diff --git a/extensions/gitpod-shared/src/analytics.ts b/extensions/gitpod-shared/src/analytics.ts index 2f324805a0afe..060519f2a22aa 100644 --- a/extensions/gitpod-shared/src/analytics.ts +++ b/extensions/gitpod-shared/src/analytics.ts @@ -38,8 +38,9 @@ export type GitpodAnalyticsEvent = action: 'share' | 'stop-sharing' | 'stop' | 'snapshot' | 'extend-timeout'; }> | GAET<'vscode_execute_command_gitpod_ports', { - action: 'private' | 'public' | 'preview' | 'openBrowser'; + action: 'private' | 'public' | 'preview' | 'openBrowser' | 'urlCopy'; isWebview?: boolean; + userOverride?: string; // 'true' | 'false' }> | GAET<'vscode_execute_command_gitpod_config', { action: 'remove' | 'add'; diff --git a/extensions/gitpod-shared/src/features.ts b/extensions/gitpod-shared/src/features.ts index 8e09ade52a5a4..0d96a89ad1048 100644 --- a/extensions/gitpod-shared/src/features.ts +++ b/extensions/gitpod-shared/src/features.ts @@ -8,6 +8,7 @@ require('reflect-metadata'); import { GitpodClient, GitpodServer, GitpodServiceImpl, WorkspaceInstanceUpdateListener } from '@gitpod/gitpod-protocol/lib/gitpod-service'; import { JsonRpcProxyFactory } from '@gitpod/gitpod-protocol/lib/messaging/proxy-factory'; import { NavigatorContext, User } from '@gitpod/gitpod-protocol/lib/protocol'; +import { Team } from '@gitpod/gitpod-protocol/lib/teams-projects-protocol'; import { ErrorCodes } from '@gitpod/gitpod-protocol/lib/messaging/error'; import { GitpodHostUrl } from '@gitpod/gitpod-protocol/lib/util/gitpod-host-url'; import { ControlServiceClient } from '@gitpod/supervisor-api-grpc/lib/control_grpc_pb'; @@ -70,7 +71,7 @@ export class SupervisorConnection { } } -type UsedGitpodFunction = ['getWorkspace', 'openPort', 'stopWorkspace', 'setWorkspaceTimeout', 'getWorkspaceTimeout', 'getLoggedInUser', 'takeSnapshot', 'waitForSnapshot', 'controlAdmission', 'sendHeartBeat', 'trackEvent']; +type UsedGitpodFunction = ['getWorkspace', 'openPort', 'stopWorkspace', 'setWorkspaceTimeout', 'getWorkspaceTimeout', 'getLoggedInUser', 'takeSnapshot', 'waitForSnapshot', 'controlAdmission', 'sendHeartBeat', 'trackEvent', 'getTeams']; type Union = Tuple[number] | Union; export type GitpodConnection = Omit, 'server'> & { server: Pick>; @@ -93,6 +94,7 @@ export class GitpodExtensionContext implements vscode.ExtensionContext { readonly info: WorkspaceInfoResponse, readonly owner: Promise, readonly user: Promise, + readonly userTeams: Promise, readonly instanceListener: Promise, readonly workspaceOwned: Promise, readonly logger: Log, @@ -241,7 +243,7 @@ export async function createGitpodExtensionContext(context: vscode.ExtensionCont const gitpodApi = workspaceInfo.getGitpodApi()!; const factory = new JsonRpcProxyFactory(); - const gitpodFunctions: UsedGitpodFunction = ['getWorkspace', 'openPort', 'stopWorkspace', 'setWorkspaceTimeout', 'getWorkspaceTimeout', 'getLoggedInUser', 'takeSnapshot', 'waitForSnapshot', 'controlAdmission', 'sendHeartBeat', 'trackEvent']; + const gitpodFunctions: UsedGitpodFunction = ['getWorkspace', 'openPort', 'stopWorkspace', 'setWorkspaceTimeout', 'getWorkspaceTimeout', 'getLoggedInUser', 'takeSnapshot', 'waitForSnapshot', 'controlAdmission', 'sendHeartBeat', 'trackEvent', 'getTeams']; const gitpodService: GitpodConnection = new GitpodServiceImpl(factory.createProxy()) as any; const gitpodScopes = new Set([ 'resource:workspace::' + workspaceId + '::get/update', @@ -302,6 +304,7 @@ export async function createGitpodExtensionContext(context: vscode.ExtensionCont } return vscode.commands.executeCommand('gitpod.api.getLoggedInUser') as typeof pendingGetOwner; })(); + const pendingGetUserTeams = gitpodService.server.getTeams(); const pendingInstanceListener = gitpodService.listenToInstance(workspaceId); const pendingWorkspaceOwned = (async () => { const owner = await pendingGetOwner; @@ -325,6 +328,7 @@ export async function createGitpodExtensionContext(context: vscode.ExtensionCont workspaceInfo, pendingGetOwner, pendingGetUser, + pendingGetUserTeams, pendingInstanceListener, pendingWorkspaceOwned, logger, diff --git a/extensions/gitpod-web/package.json b/extensions/gitpod-web/package.json index ad1f6194e95ae..0c51e619b1e04 100644 --- a/extensions/gitpod-web/package.json +++ b/extensions/gitpod-web/package.json @@ -562,6 +562,7 @@ "dependencies": { "@gitpod/gitpod-protocol": "main", "@gitpod/supervisor-api-grpc": "main", + "configcat-node": "^8.0.0", "gitpod-shared": "0.0.1", "node-fetch": "2.6.7", "uuid": "8.1.0", diff --git a/extensions/gitpod-web/portsview/src/porttable/PortLocalAddress.svelte b/extensions/gitpod-web/portsview/src/porttable/PortLocalAddress.svelte index 2fa2d3f7e5956..6d479f761cffd 100644 --- a/extensions/gitpod-web/portsview/src/porttable/PortLocalAddress.svelte +++ b/extensions/gitpod-web/portsview/src/porttable/PortLocalAddress.svelte @@ -36,6 +36,12 @@ function onHoverCommand(command: string) { dispatch("command", { command: command as PortCommand, port }); } + function openAddr(e: Event) { + e.preventDefault(); + if (port.status.exposed.url) { + dispatch("command", { command: "openBrowser" as PortCommand, port }); + } + } - {port.status.exposed.url} + { openAddr(e) }} href={port.status.exposed.url}>{port.status.exposed.url}