diff --git a/web/packages/teleterm/src/mainProcess/mainProcess.ts b/web/packages/teleterm/src/mainProcess/mainProcess.ts index b4278d998fda0..42dcb2f7b44b6 100644 --- a/web/packages/teleterm/src/mainProcess/mainProcess.ts +++ b/web/packages/teleterm/src/mainProcess/mainProcess.ts @@ -49,8 +49,7 @@ import { getAssetPath } from 'teleterm/mainProcess/runtimeSettings'; import { RootClusterUri } from 'teleterm/ui/uri'; import Logger from 'teleterm/logger'; import * as grpcCreds from 'teleterm/services/grpcCredentials'; -import { createTshdClient } from 'teleterm/services/tshd/createClient'; -import { TshdClient } from 'teleterm/services/tshd/types'; +import { createTshdClient, TshdClient } from 'teleterm/services/tshd'; import { loggingInterceptor } from 'teleterm/services/tshd/interceptors'; import { diff --git a/web/packages/teleterm/src/mainProcess/rootClusterProxyHostAllowList.ts b/web/packages/teleterm/src/mainProcess/rootClusterProxyHostAllowList.ts index ba1635dae669b..979adc3b96545 100644 --- a/web/packages/teleterm/src/mainProcess/rootClusterProxyHostAllowList.ts +++ b/web/packages/teleterm/src/mainProcess/rootClusterProxyHostAllowList.ts @@ -21,7 +21,7 @@ import { ipcMain } from 'electron'; import { isAbortError } from 'shared/utils/abortError'; import { proxyHostToBrowserProxyHost } from 'teleterm/services/tshd/cluster'; -import { TshdClient } from 'teleterm/services/tshd/types'; +import { TshdClient } from 'teleterm/services/tshd'; import { Logger } from 'teleterm/types'; import { MainProcessIpc } from 'teleterm/mainProcess/types'; import * as tshd from 'teleterm/services/tshd/types'; diff --git a/web/packages/teleterm/src/preload.ts b/web/packages/teleterm/src/preload.ts index 53fbe05b64e7a..c5b72720ca7a1 100644 --- a/web/packages/teleterm/src/preload.ts +++ b/web/packages/teleterm/src/preload.ts @@ -20,10 +20,7 @@ import { contextBridge } from 'electron'; import { ChannelCredentials, ServerCredentials } from '@grpc/grpc-js'; import { GrpcTransport } from '@protobuf-ts/grpc-transport'; -import { - createTshdClient, - createVnetClient, -} from 'teleterm/services/tshd/createClient'; +import { createTshdClient, createVnetClient } from 'teleterm/services/tshd'; import { loggingInterceptor } from 'teleterm/services/tshd/interceptors'; import createMainProcessClient from 'teleterm/mainProcess/mainProcessClient'; import { createFileLoggerService } from 'teleterm/services/logger'; diff --git a/web/packages/teleterm/src/services/tshd/createClient.ts b/web/packages/teleterm/src/services/tshd/createClient.ts index f638b2cfe1707..31bc749b1589b 100644 --- a/web/packages/teleterm/src/services/tshd/createClient.ts +++ b/web/packages/teleterm/src/services/tshd/createClient.ts @@ -17,19 +17,27 @@ */ import { GrpcTransport } from '@protobuf-ts/grpc-transport'; -import { TerminalServiceClient } from 'gen-proto-ts/teleport/lib/teleterm/v1/service_pb.client'; -import * as vnetServiceProtobuf from 'gen-proto-ts/teleport/lib/teleterm/vnet/v1/vnet_service_pb.client'; +import { + ITerminalServiceClient, + TerminalServiceClient, +} from 'gen-proto-ts/teleport/lib/teleterm/v1/service_pb.client'; +import { + IVnetServiceClient, + VnetServiceClient, +} from 'gen-proto-ts/teleport/lib/teleterm/vnet/v1/vnet_service_pb.client'; import { CloneableClient, cloneClient } from './cloneableClient'; -import * as types from './types'; -export function createTshdClient(transport: GrpcTransport): types.TshdClient { +// Creating the client type based on the interface (ITerminalServiceClient) and not the class +// (TerminalServiceClient) lets us omit a bunch of properties when mocking a client. +export type TshdClient = CloneableClient; + +export type VnetClient = CloneableClient; + +export function createTshdClient(transport: GrpcTransport): TshdClient { return cloneClient(new TerminalServiceClient(transport)); } -export function createVnetClient(transport: GrpcTransport): VnetServiceClient { - return cloneClient(new vnetServiceProtobuf.VnetServiceClient(transport)); +export function createVnetClient(transport: GrpcTransport): VnetClient { + return cloneClient(new VnetServiceClient(transport)); } - -export type VnetServiceClient = - CloneableClient; diff --git a/web/packages/teleterm/src/services/tshd/fixtures/mocks.ts b/web/packages/teleterm/src/services/tshd/fixtures/mocks.ts index bd5bc8d539195..42c0d2f9745ca 100644 --- a/web/packages/teleterm/src/services/tshd/fixtures/mocks.ts +++ b/web/packages/teleterm/src/services/tshd/fixtures/mocks.ts @@ -21,11 +21,10 @@ import { makeAppGateway, } from 'teleterm/services/tshd/testHelpers'; -import * as types from '../types'; -import { VnetServiceClient } from '../createClient'; +import { VnetClient, TshdClient } from '../createClient'; import { MockedUnaryCall } from '../cloneableClient'; -export class MockTshClient implements types.TshdClient { +export class MockTshClient implements TshdClient { listRootClusters = () => new MockedUnaryCall({ clusters: [] }); listLeafClusters = () => new MockedUnaryCall({ clusters: [] }); getKubes = () => @@ -116,10 +115,7 @@ export class MockTshClient implements types.TshdClient { authenticateWebDevice = () => new MockedUnaryCall({}); } -export class MockVnetClient implements VnetServiceClient { - typeName: never; - methods: never; - options: never; +export class MockVnetClient implements VnetClient { start = () => new MockedUnaryCall({}); stop = () => new MockedUnaryCall({}); } diff --git a/web/packages/teleterm/src/services/tshd/index.ts b/web/packages/teleterm/src/services/tshd/index.ts new file mode 100644 index 0000000000000..225cf8d0465da --- /dev/null +++ b/web/packages/teleterm/src/services/tshd/index.ts @@ -0,0 +1,21 @@ +/** + * Teleport + * Copyright (C) 2024 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 * from './createClient'; +export { cloneAbortSignal, isTshdRpcError } from './cloneableClient'; +export type { CloneableAbortSignal } from './cloneableClient'; diff --git a/web/packages/teleterm/src/services/tshd/types.ts b/web/packages/teleterm/src/services/tshd/types.ts index 828d09addd187..44d8c273d6970 100644 --- a/web/packages/teleterm/src/services/tshd/types.ts +++ b/web/packages/teleterm/src/services/tshd/types.ts @@ -16,34 +16,99 @@ * along with this program. If not, see . */ -import { ITerminalServiceClient } from 'gen-proto-ts/teleport/lib/teleterm/v1/service_pb.client'; - import { SortType } from 'design/DataTable/types'; -import { CloneableClient } from './cloneableClient'; - import type * as uri from 'teleterm/ui/uri'; -export * from 'gen-proto-ts/teleport/lib/teleterm/v1/cluster_pb'; -export * from 'gen-proto-ts/teleport/lib/teleterm/v1/database_pb'; -export * from 'gen-proto-ts/teleport/lib/teleterm/v1/gateway_pb'; -export * from 'gen-proto-ts/teleport/lib/teleterm/v1/server_pb'; -export * from 'gen-proto-ts/teleport/lib/teleterm/v1/kube_pb'; -export * from 'gen-proto-ts/teleport/lib/teleterm/v1/app_pb'; -export * from 'gen-proto-ts/teleport/lib/teleterm/v1/label_pb'; -export * from 'gen-proto-ts/teleport/lib/teleterm/v1/service_pb'; -export * from 'gen-proto-ts/teleport/lib/teleterm/v1/auth_settings_pb'; -export * from 'gen-proto-ts/teleport/lib/teleterm/v1/access_request_pb'; -export * from 'gen-proto-ts/teleport/lib/teleterm/v1/usage_events_pb'; -export * from 'gen-proto-ts/teleport/accesslist/v1/accesslist_pb'; +/* + * + * Do not add new imports to this file, we're trying to get rid of types.ts files. + * + */ -export type { - CloneableAbortSignal, - CloneableRpcOptions, - CloneableClient, -} from './cloneableClient'; +export { + /** + * @deprecated Import directly from gen-proto-ts instead. + */ + Cluster, + /** + * @deprecated Import directly from gen-proto-ts instead. + */ + LoggedInUser, + /** + * @deprecated Import directly from gen-proto-ts instead. + */ + LoggedInUser_UserType, +} from 'gen-proto-ts/teleport/lib/teleterm/v1/cluster_pb'; +export { + /** + * @deprecated Import directly from gen-proto-ts instead. + */ + Database, +} from 'gen-proto-ts/teleport/lib/teleterm/v1/database_pb'; +export { + /** + * @deprecated Import directly from gen-proto-ts instead. + */ + Gateway, + /** + * @deprecated Import directly from gen-proto-ts instead. + */ + GatewayCLICommand, +} from 'gen-proto-ts/teleport/lib/teleterm/v1/gateway_pb'; +export { + /** + * @deprecated Import directly from gen-proto-ts instead. + */ + Server, +} from 'gen-proto-ts/teleport/lib/teleterm/v1/server_pb'; +export { + /** + * @deprecated Import directly from gen-proto-ts instead. + */ + Kube, +} from 'gen-proto-ts/teleport/lib/teleterm/v1/kube_pb'; +export { + /** + * @deprecated Import directly from gen-proto-ts instead. + */ + App, +} from 'gen-proto-ts/teleport/lib/teleterm/v1/app_pb'; +export { + /** + * @deprecated Import directly from gen-proto-ts instead. + */ + Label, +} from 'gen-proto-ts/teleport/lib/teleterm/v1/label_pb'; +export { + /** + * @deprecated Import directly from gen-proto-ts instead. + */ + AuthSettings, + /** + * @deprecated Import directly from gen-proto-ts instead. + */ + AuthProvider, +} from 'gen-proto-ts/teleport/lib/teleterm/v1/auth_settings_pb'; +export { + /** + * @deprecated Import directly from gen-proto-ts instead. + */ + AccessRequest, +} from 'gen-proto-ts/teleport/lib/teleterm/v1/access_request_pb'; +export { + /** + * @deprecated Import directly from gen-proto-ts instead. + */ + AccessList, +} from 'gen-proto-ts/teleport/accesslist/v1/accesslist_pb'; -export type TshdClient = CloneableClient; +// There's too many re-exports from this file to list them individually. +// A @deprecated annotation like this Unfortunately has no effect on the language server. +/** + * @deprecated Import directly from gen-proto-ts instead. + */ +export * from 'gen-proto-ts/teleport/lib/teleterm/v1/service_pb'; /** * Available types are listed here: diff --git a/web/packages/teleterm/src/types.ts b/web/packages/teleterm/src/types.ts index 74e7d02354bb0..347ce064d34d4 100644 --- a/web/packages/teleterm/src/types.ts +++ b/web/packages/teleterm/src/types.ts @@ -24,8 +24,7 @@ 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'; -import { VnetServiceClient } from 'teleterm/services/tshd/createClient'; +import { VnetClient, TshdClient } from 'teleterm/services/tshd/createClient'; export type { Logger, @@ -107,7 +106,7 @@ export type ExtractResponseType = export type ElectronGlobals = { readonly mainProcessClient: MainProcessClient; readonly tshClient: TshdClient; - readonly vnetClient: VnetServiceClient; + readonly vnetClient: VnetClient; readonly ptyServiceClient: PtyServiceClient; readonly setupTshdEventContextBridgeService: ( listener: TshdEventContextBridgeService diff --git a/web/packages/teleterm/src/ui/appContext.ts b/web/packages/teleterm/src/ui/appContext.ts index ed8f8793188b8..8a6514c9e15db 100644 --- a/web/packages/teleterm/src/ui/appContext.ts +++ b/web/packages/teleterm/src/ui/appContext.ts @@ -40,11 +40,10 @@ import { UsageService } from 'teleterm/ui/services/usage'; import { ResourcesService } from 'teleterm/ui/services/resources'; import { ConnectMyComputerService } from 'teleterm/ui/services/connectMyComputer'; import { ConfigService } from 'teleterm/services/config'; -import { TshdClient } from 'teleterm/services/tshd/types'; +import { TshdClient, VnetClient } from 'teleterm/services/tshd/createClient'; import { IAppContext } from 'teleterm/ui/types'; import { DeepLinksService } from 'teleterm/ui/services/deepLinks'; import { parseDeepLink } from 'teleterm/deepLinks'; -import { VnetServiceClient } from 'teleterm/services/tshd/createClient'; import { CommandLauncher } from './commandLauncher'; import { createTshdEventsContextBridgeService } from './tshdEvents'; @@ -64,7 +63,7 @@ export default class AppContext implements IAppContext { fileTransferService: FileTransferService; resourcesService: ResourcesService; tshd: TshdClient; - vnet: VnetServiceClient; + vnet: VnetClient; /** * setupTshdEventContextBridgeService adds a context-bridge-compatible version of a gRPC service * that's going to be called every time a client makes a particular RPC to the tshd events diff --git a/web/packages/teleterm/src/ui/services/clusters/clustersService.test.ts b/web/packages/teleterm/src/ui/services/clusters/clustersService.test.ts index 50dad09d43850..d41ae1a1ed001 100644 --- a/web/packages/teleterm/src/ui/services/clusters/clustersService.test.ts +++ b/web/packages/teleterm/src/ui/services/clusters/clustersService.test.ts @@ -30,7 +30,7 @@ import { MockedUnaryCall } from 'teleterm/services/tshd/cloneableClient'; import { ClustersService } from './clustersService'; import type * as uri from 'teleterm/ui/uri'; -import type * as tsh from 'teleterm/services/tshd/types'; +import type { TshdClient } from 'teleterm/services/tshd'; jest.mock('teleterm/ui/services/notifications'); jest.mock('teleterm/ui/services/usage'); @@ -58,9 +58,9 @@ const NotificationsServiceMock = NotificationsService as jest.MockedClass< >; const UsageServiceMock = UsageService as jest.MockedClass; -function createService(client: Partial): ClustersService { +function createService(client: Partial): ClustersService { return new ClustersService( - client as tsh.TshdClient, + client as TshdClient, { removeKubeConfig: jest.fn().mockResolvedValueOnce(undefined), } as unknown as MainProcessClient, @@ -69,7 +69,7 @@ function createService(client: Partial): ClustersService { ); } -function getClientMocks(): Partial { +function getClientMocks(): Partial { return { login: jest.fn().mockReturnValueOnce(new MockedUnaryCall({})), logout: jest.fn().mockReturnValueOnce(new MockedUnaryCall({})), diff --git a/web/packages/teleterm/src/ui/services/clusters/clustersService.ts b/web/packages/teleterm/src/ui/services/clusters/clustersService.ts index 1dcaf2f0aaad5..2be68c77409b8 100644 --- a/web/packages/teleterm/src/ui/services/clusters/clustersService.ts +++ b/web/packages/teleterm/src/ui/services/clusters/clustersService.ts @@ -41,6 +41,7 @@ import { UsageService } from 'teleterm/ui/services/usage'; import { ImmutableStore } from '../immutableStore'; import type * as types from './types'; +import type { TshdClient, CloneableAbortSignal } from 'teleterm/services/tshd'; import type * as tsh from 'teleterm/services/tshd/types'; const { routing } = uri; @@ -56,7 +57,7 @@ export class ClustersService extends ImmutableStore state: types.ClustersServiceState = createClusterServiceState(); constructor( - public client: tsh.TshdClient, + public client: TshdClient, private mainProcessClient: MainProcessClient, private notificationsService: NotificationsService, private usageService: UsageService @@ -101,7 +102,7 @@ export class ClustersService extends ImmutableStore async loginLocal( params: types.LoginLocalParams, - abortSignal: tsh.CloneableAbortSignal + abortSignal: CloneableAbortSignal ) { await this.client.login( { @@ -126,7 +127,7 @@ export class ClustersService extends ImmutableStore async loginSso( params: types.LoginSsoParams, - abortSignal: tsh.CloneableAbortSignal + abortSignal: CloneableAbortSignal ) { await this.client.login( { @@ -147,7 +148,7 @@ export class ClustersService extends ImmutableStore async loginPasswordless( params: types.LoginPasswordlessParams, - abortSignal: tsh.CloneableAbortSignal + abortSignal: CloneableAbortSignal ) { await new Promise((resolve, reject) => { const stream = this.client.loginPasswordless({ diff --git a/web/packages/teleterm/src/ui/services/connectMyComputer/connectMyComputerService.ts b/web/packages/teleterm/src/ui/services/connectMyComputer/connectMyComputerService.ts index 0dcb5dcab7411..f938bc8642b39 100644 --- a/web/packages/teleterm/src/ui/services/connectMyComputer/connectMyComputerService.ts +++ b/web/packages/teleterm/src/ui/services/connectMyComputer/connectMyComputerService.ts @@ -21,9 +21,8 @@ import { Cluster, CreateConnectMyComputerRoleResponse, Server, - CloneableAbortSignal, - TshdClient, } from 'teleterm/services/tshd/types'; +import { TshdClient, CloneableAbortSignal } from 'teleterm/services/tshd'; import type * as uri from 'teleterm/ui/uri'; diff --git a/web/packages/teleterm/src/ui/services/fileTransferClient/fileTransferService.ts b/web/packages/teleterm/src/ui/services/fileTransferClient/fileTransferService.ts index 6582dfac33aed..68e0049ddc94f 100644 --- a/web/packages/teleterm/src/ui/services/fileTransferClient/fileTransferService.ts +++ b/web/packages/teleterm/src/ui/services/fileTransferClient/fileTransferService.ts @@ -20,7 +20,8 @@ import { FileTransferListeners } from 'shared/components/FileTransfer'; import { FileTransferDirection } from 'gen-proto-ts/teleport/lib/teleterm/v1/service_pb'; -import { FileTransferRequest, TshdClient } from 'teleterm/services/tshd/types'; +import { FileTransferRequest } from 'teleterm/services/tshd/types'; +import { TshdClient } from 'teleterm/services/tshd'; import { UsageService } from 'teleterm/ui/services/usage'; import { cloneAbortSignal } from 'teleterm/services/tshd/cloneableClient'; diff --git a/web/packages/teleterm/src/ui/services/headlessAuthn/headlessAuthnService.ts b/web/packages/teleterm/src/ui/services/headlessAuthn/headlessAuthnService.ts index de55e9688e1c4..fa5dc997e08e7 100644 --- a/web/packages/teleterm/src/ui/services/headlessAuthn/headlessAuthnService.ts +++ b/web/packages/teleterm/src/ui/services/headlessAuthn/headlessAuthnService.ts @@ -21,13 +21,14 @@ import { MainProcessClient } from 'teleterm/types'; import { ModalsService } from 'teleterm/ui/services/modals'; import { ConfigService } from 'teleterm/services/config'; +import type { TshdClient, CloneableAbortSignal } from 'teleterm/services/tshd'; import type * as types from 'teleterm/services/tshd/types'; export class HeadlessAuthenticationService { constructor( private mainProcessClient: MainProcessClient, private modalsService: ModalsService, - private tshClient: types.TshdClient, + private tshClient: TshdClient, private configService: ConfigService ) {} @@ -60,7 +61,7 @@ export class HeadlessAuthenticationService { async updateHeadlessAuthenticationState( params: types.UpdateHeadlessAuthenticationStateRequest, - abortSignal: types.CloneableAbortSignal + abortSignal: CloneableAbortSignal ): Promise { await this.tshClient.updateHeadlessAuthenticationState(params, { abort: abortSignal, 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 9a9b42086c2c1..201c95c9f8a35 100644 --- a/web/packages/teleterm/src/ui/services/resources/resourcesService.test.ts +++ b/web/packages/teleterm/src/ui/services/resources/resourcesService.test.ts @@ -30,6 +30,7 @@ import { ResourcesService, } from './resourcesService'; +import type { TshdClient } from 'teleterm/services/tshd'; import type * as tsh from 'teleterm/services/tshd/types'; describe('getServerByHostname', () => { @@ -37,7 +38,7 @@ describe('getServerByHostname', () => { const getServerByHostnameTests: Array< { name: string; - getServersMockedValue: ReturnType; + getServersMockedValue: ReturnType; } & ( | { expectedServer: tsh.Server; expectedErr?: never } | { expectedErr: any; expectedServer?: never } @@ -74,10 +75,10 @@ describe('getServerByHostname', () => { test.each(getServerByHostnameTests)( '$name', async ({ getServersMockedValue, expectedServer, expectedErr }) => { - const tshClient: Partial = { + const tshClient: Partial = { getServers: jest.fn().mockResolvedValueOnce(getServersMockedValue), }; - const service = new ResourcesService(tshClient as tsh.TshdClient); + const service = new ResourcesService(tshClient as TshdClient); const promise = service.getServerByHostname('/clusters/bar', 'foo'); @@ -110,7 +111,7 @@ describe('searchResources', () => { const kube = makeKube(); const app = makeApp(); - const tshClient: Partial = { + const tshClient: Partial = { getServers: jest.fn().mockResolvedValueOnce( new MockedUnaryCall({ agents: [server], @@ -140,7 +141,7 @@ describe('searchResources', () => { }) ), }; - const service = new ResourcesService(tshClient as tsh.TshdClient); + const service = new ResourcesService(tshClient as TshdClient); const searchResults = await service.searchResources({ clusterUri: '/clusters/foo', @@ -172,7 +173,7 @@ describe('searchResources', () => { it('returns a single item if a filter is supplied', async () => { const server = makeServer(); - const tshClient: Partial = { + const tshClient: Partial = { getServers: jest.fn().mockResolvedValueOnce( new MockedUnaryCall({ agents: [server], @@ -181,7 +182,7 @@ describe('searchResources', () => { }) ), }; - const service = new ResourcesService(tshClient as tsh.TshdClient); + const service = new ResourcesService(tshClient as TshdClient); const searchResults = await service.searchResources({ clusterUri: '/clusters/foo', @@ -200,13 +201,13 @@ describe('searchResources', () => { it('returns a custom error pointing at resource kind and cluster when an underlying promise gets rejected', async () => { const expectedCause = new Error('oops'); - const tshClient: Partial = { + const tshClient: Partial = { getServers: jest.fn().mockRejectedValueOnce(expectedCause), getDatabases: jest.fn().mockRejectedValueOnce(expectedCause), getKubes: jest.fn().mockRejectedValueOnce(expectedCause), getApps: jest.fn().mockRejectedValueOnce(expectedCause), }; - const service = new ResourcesService(tshClient as tsh.TshdClient); + const service = new ResourcesService(tshClient as TshdClient); const searchResults = await service.searchResources({ clusterUri: '/clusters/foo', diff --git a/web/packages/teleterm/src/ui/services/resources/resourcesService.ts b/web/packages/teleterm/src/ui/services/resources/resourcesService.ts index 60b3fbb3ccc5f..35fd224dbc18c 100644 --- a/web/packages/teleterm/src/ui/services/resources/resourcesService.ts +++ b/web/packages/teleterm/src/ui/services/resources/resourcesService.ts @@ -34,6 +34,7 @@ import { import Logger from 'teleterm/logger'; +import type { TshdClient } from 'teleterm/services/tshd'; import type * as types from 'teleterm/services/tshd/types'; import type * as uri from 'teleterm/ui/uri'; import type { ResourceTypeFilter } from 'teleterm/ui/Search/searchResult'; @@ -41,7 +42,7 @@ import type { ResourceTypeFilter } from 'teleterm/ui/Search/searchResult'; export class ResourcesService { private logger = new Logger('ResourcesService'); - constructor(private tshClient: types.TshdClient) {} + constructor(private tshClient: TshdClient) {} async fetchServers(params: types.GetResourcesParams) { const { response } = await this.tshClient.getServers( diff --git a/web/packages/teleterm/src/ui/services/usage/usageService.ts b/web/packages/teleterm/src/ui/services/usage/usageService.ts index e2092f590283d..950ae27747e3c 100644 --- a/web/packages/teleterm/src/ui/services/usage/usageService.ts +++ b/web/packages/teleterm/src/ui/services/usage/usageService.ts @@ -21,7 +21,8 @@ import { SubmitConnectEventRequest } from 'gen-proto-ts/prehog/v1alpha/connect_p import { Timestamp } from 'gen-proto-ts/google/protobuf/timestamp_pb'; import { ClusterOrResourceUri, ClusterUri, routing } from 'teleterm/ui/uri'; -import { Cluster, TshdClient } from 'teleterm/services/tshd/types'; +import { Cluster } from 'teleterm/services/tshd/types'; +import { TshdClient } from 'teleterm/services/tshd'; import { RuntimeSettings } from 'teleterm/mainProcess/types'; import { ConfigService } from 'teleterm/services/config'; import Logger from 'teleterm/logger'; diff --git a/web/packages/teleterm/src/ui/types.ts b/web/packages/teleterm/src/ui/types.ts index 3f34142401dbc..ae1c243007c07 100644 --- a/web/packages/teleterm/src/ui/types.ts +++ b/web/packages/teleterm/src/ui/types.ts @@ -37,8 +37,7 @@ import { UsageService } from 'teleterm/ui/services/usage'; import { ConfigService } from 'teleterm/services/config'; import { ConnectMyComputerService } from 'teleterm/ui/services/connectMyComputer'; import { HeadlessAuthenticationService } from 'teleterm/ui/services/headlessAuthn/headlessAuthnService'; -import { TshdClient } from 'teleterm/services/tshd/types'; -import { VnetServiceClient } from 'teleterm/services/tshd/createClient'; +import { TshdClient, VnetClient } from 'teleterm/services/tshd'; export interface IAppContext { clustersService: ClustersService; @@ -63,7 +62,7 @@ export interface IAppContext { connectMyComputerService: ConnectMyComputerService; headlessAuthenticationService: HeadlessAuthenticationService; tshd: TshdClient; - vnet: VnetServiceClient; + vnet: VnetClient; pullInitialState(): Promise; }