diff --git a/.eslintrc.json b/.eslintrc.json index 74ebbc80c9c23..f3771d47c4fbb 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -923,14 +923,6 @@ "**/vs/workbench/workbench.sandbox.main" ] }, - { - "target": "**/extensions/gitpod-web/**", - "restrictions": "!@gitpod/supervisor-api-grpc/**" - }, - { - "target": "**/extensions/gitpod-remote-ssh/**", - "restrictions": "!@gitpod/supervisor-api-grpc/**" - }, { "target": "**/extensions/**", "restrictions": "**/*" diff --git a/.gitpod.yml b/.gitpod.yml index 2b2f7cde1048b..f008b09c7f217 100644 --- a/.gitpod.yml +++ b/.gitpod.yml @@ -17,7 +17,8 @@ tasks: export NODE_ENV=development export VSCODE_DEV=1 gp sync-await init - yarn gitpod:watch + cd ./extensions + yarn watch name: watch extension - command: | export NODE_ENV=development diff --git a/.vscode/launch.json b/.vscode/launch.json index 5f331370008a4..b279f83e8f55d 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -495,13 +495,12 @@ "runtimeExecutable": "${execPath}", "args": [ "/workspace/vscode", - "--extensionDevelopmentPath=${workspaceRoot}/extensions/gitpod", - "--extensionDevelopmentPath=${workspaceRoot}/extensions/gitpod-remote-ssh", + "--extensionDevelopmentPath=${workspaceRoot}/extensions/gitpod-remote", "--log=debug" ], "outFiles": [ - "${workspaceRoot}/extensions/gitpod/out/**/*.js", - "${workspaceRoot}/extensions/gitpod-remote-ssh/out/**/*.js", + "${workspaceRoot}/extensions/gitpod-shared/out/**/*.js", + "${workspaceRoot}/extensions/gitpod-remote/out/**/*.js", ] } ], diff --git a/BUILD.yaml b/BUILD.yaml index b1c58cf11937e..e1e418e348c0a 100644 --- a/BUILD.yaml +++ b/BUILD.yaml @@ -13,6 +13,5 @@ packages: config: commands: - ["yarn", "--cwd", "./install/build", "compile"] - - ["yarn", "--cwd", "./install", "gitpod:link"] - ["yarn", "--cwd", "./install", "compile"] - ["yarn", "--cwd", "./install", "download-builtin-extensions"] diff --git a/build/gulpfile.extensions.js b/build/gulpfile.extensions.js index 5902cb140ce6d..27134ddb51507 100644 --- a/build/gulpfile.extensions.js +++ b/build/gulpfile.extensions.js @@ -65,10 +65,6 @@ const compilations = [ 'vscode-custom-editor-tests/tsconfig.json', 'vscode-notebook-tests/tsconfig.json', 'vscode-test-resolver/tsconfig.json', - 'gitpod/tsconfig.json', - 'gitpod-remote-ssh/tsconfig.json', - 'gitpod-web/tsconfig.json', - 'gitpod-desktop/tsconfig.json', ]; const getBaseUrl = out => `https://ticino.blob.core.windows.net/sourcemaps/${commit}/${out}`; diff --git a/build/gulpfile.gitpod.js b/build/gulpfile.gitpod.js index c8c5fb01fcd97..1b9926bb6ba0b 100644 --- a/build/gulpfile.gitpod.js +++ b/build/gulpfile.gitpod.js @@ -27,7 +27,7 @@ const rename = require('gulp-rename'); const ext = require('./lib/extensions'); const extensionsPath = path.join(path.dirname(__dirname), 'extensions'); -const marketplaceExtensions = ['gitpod', 'gitpod-desktop', 'gitpod-remote-ssh']; +const marketplaceExtensions = ['gitpod', 'gitpod-remote']; const outMarketplaceExtensions = 'out-gitpod-marketplace'; const cleanMarketplaceExtensions = task.define('clean-gitpod-marketplace-extensions', util.rimraf(outMarketplaceExtensions)); const bumpMarketplaceExtensions = task.define('bump-marketplace-extensions', () => { diff --git a/build/hygiene.js b/build/hygiene.js index 0c043400d10fc..9fd05f3dd64b5 100644 --- a/build/hygiene.js +++ b/build/hygiene.js @@ -59,7 +59,7 @@ function hygiene(some, linting = true) { }); const copyrights = es.through(function (file) { - if (file.relative.indexOf('vs/server') === -1) { + if (file.relative.indexOf('vs/server') === -1 && file.relative.indexOf('gitpod') === -1) { const lines = file.__lines; for (let i = 0; i < copyrightHeaderLines.length; i++) { diff --git a/build/lib/extensions.js b/build/lib/extensions.js index b6ffcad4b4cba..d351879ffcdcc 100644 --- a/build/lib/extensions.js +++ b/build/lib/extensions.js @@ -206,8 +206,9 @@ const excludedExtensions = [ 'vscode-notebook-tests', 'vscode-custom-editor-tests', 'github-authentication', - 'gitpod-remote-ssh', - 'gitpod-desktop', + 'gitpod-shared', + 'gitpod-remote', + 'gitpod', ]; const marketplaceWebExtensionsExclude = new Set([ 'ms-vscode.node-debug', diff --git a/build/lib/extensions.ts b/build/lib/extensions.ts index 5ec5f39a0a228..a83dd17c9880e 100644 --- a/build/lib/extensions.ts +++ b/build/lib/extensions.ts @@ -241,8 +241,9 @@ const excludedExtensions = [ 'vscode-notebook-tests', 'vscode-custom-editor-tests', 'github-authentication', - 'gitpod-remote-ssh', - 'gitpod-desktop', + 'gitpod-shared', + 'gitpod-remote', + 'gitpod', ]; const marketplaceWebExtensionsExclude = new Set([ diff --git a/build/npm/dirs.js b/build/npm/dirs.js index ffb575d9cecd0..3a8ce4d7f28f0 100644 --- a/build/npm/dirs.js +++ b/build/npm/dirs.js @@ -42,10 +42,6 @@ exports.dirs = [ 'extensions/vscode-custom-editor-tests', 'extensions/vscode-notebook-tests', 'extensions/vscode-test-resolver', - 'extensions/gitpod', - 'extensions/gitpod-remote-ssh', - 'extensions/gitpod-web', - 'extensions/gitpod-desktop', 'remote', 'remote/web', 'test/automation', diff --git a/extensions/.gitignore b/extensions/.gitignore new file mode 100644 index 0000000000000..cc1b7f164211e --- /dev/null +++ b/extensions/.gitignore @@ -0,0 +1 @@ +tsconfig.tsbuildinfo diff --git a/extensions/gitpod-desktop/README.md b/extensions/gitpod-desktop/README.md deleted file mode 100644 index 9d85ad0e0aeba..0000000000000 --- a/extensions/gitpod-desktop/README.md +++ /dev/null @@ -1,5 +0,0 @@ -# Gitpod Desktop integration - -## Features - -This extension provides support for Gitpod Desktop integration. diff --git a/extensions/gitpod-desktop/extension.webpack.config.js b/extensions/gitpod-desktop/extension.webpack.config.js deleted file mode 100644 index a513ac5c3b511..0000000000000 --- a/extensions/gitpod-desktop/extension.webpack.config.js +++ /dev/null @@ -1,20 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ - -//@ts-check - -'use strict'; - -const withDefaults = require('../shared.webpack.config'); - -module.exports = withDefaults({ - context: __dirname, - entry: { - extension: './src/extension.ts', - }, - externals: { - 'keytar': 'commonjs keytar' - } -}); diff --git a/extensions/gitpod-desktop/package.json b/extensions/gitpod-desktop/package.json deleted file mode 100644 index 8b8885f662303..0000000000000 --- a/extensions/gitpod-desktop/package.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "name": "gitpod-desktop", - "displayName": "%displayName%", - "description": "%description%", - "publisher": "gitpod", - "version": "0.0.14", - "license": "MIT", - "preview": true, - "repository": { - "type": "git", - "url": "https://github.com/gitpod-io/vscode.git" - }, - "engines": { - "vscode": "^1.58.2" - }, - "categories": [ - "Other" - ], - "extensionKind": [ - "ui" - ], - "activationEvents": [ - "*", - "onCommand:gitpod-desktop.api.autoTunnel" - ], - "main": "./out/extension.js", - "scripts": { - "compile": "gulp compile-extension:gitpod-desktop", - "watch": "gulp watch-extension:gitpod-desktop", - "vscode:prepublish": "npm run compile" - }, - "devDependencies": { - "@types/node": "^10.12.21", - "@types/node-fetch": "^2.5.12", - "@types/tmp": "^0.2.1" - }, - "dependencies": { - "@gitpod/local-app-api-grpcweb": "ak-vscode-desktop", - "@improbable-eng/grpc-web-node-http-transport": "^0.14.0", - "node-fetch": "^2.6.1", - "tmp": "^0.2.1", - "vscode-nls": "^5.0.0" - }, - "extensionDependencies": [ - "ms-vscode-remote.remote-ssh" - ] -} diff --git a/extensions/gitpod-desktop/package.nls.json b/extensions/gitpod-desktop/package.nls.json deleted file mode 100644 index 87b44eb194759..0000000000000 --- a/extensions/gitpod-desktop/package.nls.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "displayName": "Gitpod Desktop", - "description": "Gitpod Desktop Support" -} diff --git a/extensions/gitpod-desktop/src/extension.ts b/extensions/gitpod-desktop/src/extension.ts deleted file mode 100644 index 89caa67286c29..0000000000000 --- a/extensions/gitpod-desktop/src/extension.ts +++ /dev/null @@ -1,403 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Gitpod. All rights reserved. - *--------------------------------------------------------------------------------------------*/ - -/// - -import { AutoTunnelRequest, ResolveSSHConnectionRequest, ResolveSSHConnectionResponse } from '@gitpod/local-app-api-grpcweb/lib/localapp_pb'; -import { LocalAppClient } from '@gitpod/local-app-api-grpcweb/lib/localapp_pb_service'; -import { NodeHttpTransport } from '@improbable-eng/grpc-web-node-http-transport'; -import * as cp from 'child_process'; -import * as fs from 'fs'; -import * as http from 'http'; -import * as net from 'net'; -import fetch, { Response } from 'node-fetch'; -import { performance } from 'perf_hooks'; -import * as tmp from 'tmp'; -import * as util from 'util'; -import * as vscode from 'vscode'; -import { grpc } from '@improbable-eng/grpc-web'; -const streamPipeline = util.promisify(require('stream').pipeline); - -interface SSHConnectionParams { - workspaceId: string - instanceId: string - gitpodHost: string -} - -interface LocalAppConfig { - gitpodHost: string - configFile: string - apiPort: number - pid: number - logPath: string -} - -interface Lock { - value: string - deadline: number -} - -interface LocalAppInstallation { - path: string - etag: string | null -} - -export async function activate(context: vscode.ExtensionContext) { - const output = vscode.window.createOutputChannel('Gitpod'); - - // TODO(ak) commands to show logs and stop local apps - // TODO(ak) auto stop local apps if not used for 3 hours - - function throwIfCancelled(token: vscode.CancellationToken): void { - if (token.isCancellationRequested) { - throw new Error('cancelled'); - } - } - - const lockPrefix = 'lock/'; - const fastLockTimeout = 5000; - const slowLockTimeout = 30000; - function releaseStaleLocks(): void { - for (const key of context.globalState.keys()) { - if (key.startsWith(lockPrefix)) { - const lock = context.globalState.get(key); - if (typeof lock !== 'object' || performance.now() >= lock.deadline) { - const lockName = key.substr(lockPrefix.length); - output.appendLine(`cancel stale lock: ${lockName}`); - context.globalState.update(key, undefined); - } - } - } - } - let lockCount = 0; - async function withLock(lockName: string, op: (token: vscode.CancellationToken) => Promise, timeout: number): Promise { - output.appendLine(`acquiring lock: ${lockName}`); - const lockKey = lockPrefix + lockName; - const value = vscode.env.sessionId + '/' + lockCount++; - let currentLock: Lock | undefined; - let deadline: number | undefined; - const updateTimeout = 150; - while (currentLock?.value !== value) { - currentLock = context.globalState.get(lockKey); - if (!currentLock) { - deadline = performance.now() + timeout + updateTimeout * 2; - await context.globalState.update(lockKey, { value, deadline }); - } - // TODO(ak) env.globaState.onDidChange instead, see https://github.com/microsoft/vscode/issues/131182 - await new Promise(resolve => setTimeout(resolve, updateTimeout)); - currentLock = context.globalState.get(lockKey); - } - output.appendLine(`acquired lock: ${lockName}`); - const tokenSource = new vscode.CancellationTokenSource(); - let timer = setInterval(() => { - currentLock = context.globalState.get(lockKey); - if (currentLock?.value !== value) { - tokenSource.cancel(); - } - }, updateTimeout); - try { - const result = await op(tokenSource.token); - return result; - } finally { - if (timer) { - clearTimeout(timer); - } - output.appendLine(`released lock: ${lockName}`); - await context.globalState.update(lockKey, undefined); - } - } - - const releaseStaleLocksTimer = setInterval(() => releaseStaleLocks(), fastLockTimeout); - context.subscriptions.push(new vscode.Disposable(() => clearInterval(releaseStaleLocksTimer))); - - function downloadLocalApp(gitpodHost: string): Promise { - let downloadUri = vscode.Uri.parse(gitpodHost); - if (process.platform === 'win32') { - downloadUri = downloadUri.with({ - path: '/static/bin/gitpod-local-companion-windows.exe' - }); - } else if (process.platform === 'darwin') { - downloadUri = downloadUri.with({ - path: '/static/bin/gitpod-local-companion-darwin' - }); - } else { - downloadUri = downloadUri.with({ - path: '/static/bin/gitpod-local-companion-linux' - }); - } - output.appendLine(`fetching the local app from ${downloadUri.toString()}`); - return fetch(downloadUri.toString()); - } - - async function installLocalApp(download: Response, token: vscode.CancellationToken): Promise { - try { - const installationPath = await new Promise((resolve, reject) => - tmp.file({ prefix: 'gitpod-local-companion' }, (err, path) => { - if (err) { - return reject(err); - } - return resolve(path); - }) - ); - throwIfCancelled(token); - output.appendLine(`installing the local app to ${installationPath}`); - throwIfCancelled(token); - await streamPipeline(download.body, fs.createWriteStream(installationPath)); - throwIfCancelled(token); - if (process.platform !== 'win32') { - await fs.promises.chmod(installationPath, '755'); - throwIfCancelled(token); - } - const installation: LocalAppInstallation = { path: installationPath, etag: download.headers.get('etag') }; - output.appendLine(`installing the local app: ${JSON.stringify(installation, undefined, 2)}`); - return installation; - } catch (e) { - output.appendLine(`failed to install the local app: ${e}`); - throw e; - } - } - - async function startLocalApp(gitpodHost: string, installation: LocalAppInstallation, token: vscode.CancellationToken): Promise { - try { - const [configFile, apiPort] = await Promise.all([new Promise((resolve, reject) => - tmp.file({ prefix: 'gitpod_ssh_config' }, (err, path) => { - if (err) { - return reject(err); - } - return resolve(path); - }) - ), new Promise(resolve => { - const server = http.createServer(); - server.listen(0, 'localhost', () => { - resolve((server.address() as net.AddressInfo).port); - server.close(); - }); - })]); - throwIfCancelled(token); - output.appendLine(`starting the local app with the config: ${JSON.stringify({ gitpodHost, configFile, apiPort }, undefined, 2)}`); - const logPath = installation.path + '.log'; - let spawnTimer: NodeJS.Timeout | undefined; - const pid = await new Promise((resolve, reject) => { - const logStream = fs.createWriteStream(logPath); - logStream.on('error', reject); - logStream.on('open', () => { - if (token.isCancellationRequested) { - reject(new Error('cancelled')); - } - // TODO(ak) pass this window URL as oauth callback - const localAppProcess = cp.spawn(installation.path, { - detached: true, - stdio: ['ignore', logStream, logStream], - env: { - ...process.env, - GITPOD_HOST: gitpodHost, - GITPOD_LCA_SSH_CONFIG: configFile, - GITPOD_LCA_API_PORT: String(apiPort), - GITPOD_LCA_AUTO_TUNNEL: String(false), - GITPOD_LCA_AUTH_REDIRECT_URL: `${vscode.env.uriScheme}://${context.extension.id}${authCompletePath}` - } - }); - localAppProcess.on('error', reject); - localAppProcess.on('exit', code => reject(new Error('unexpectedly exit with code: ' + code))); - localAppProcess.unref(); - if (localAppProcess.pid) { - // TODO(ak) when Node.js > 14.17 - // localAppProcess.on('spwan', () => resolve(localAppProcess.pid))); - spawnTimer = setInterval(() => { - try { - process.kill(localAppProcess.pid, 0); - resolve(localAppProcess.pid); - } catch { } - }, 150); - } - }); - }).finally(() => { - if (spawnTimer) { - clearInterval(spawnTimer); - } - }); - output.appendLine(`the local app has been stared: ${JSON.stringify({ pid, logPath }, undefined, 2)}`); - return { gitpodHost, configFile, apiPort, pid, logPath }; - } catch (e) { - output.appendLine(`failed to start the local app: ${e}`); - throw e; - } - } - - /** - * **Important: it should not call the local app to manage in 30sec** - */ - async function ensureLocalApp(gitpodHost: string, configKey: string, installationKey: string, token: vscode.CancellationToken): Promise { - let download: Response | Error; - try { - download = await downloadLocalApp(gitpodHost); - throwIfCancelled(token); - if (!download.ok) { - download = new Error(`unexpected download response ${download.statusText} (${download.status})`); - } - } catch (e) { - download = e; - } - let config = context.globalState.get(configKey); - let installation = context.globalState.get(installationKey); - if (installation) { - const upgrade = !(download instanceof Error) && { etag: download.headers.get('etag'), url: download.url }; - if (upgrade && upgrade.etag && upgrade.etag !== installation.etag) { - output.appendLine(`the local app is outdated, upgrading: ${JSON.stringify({ installation, upgrade }, undefined, 2)}`); - installation = undefined; - if (config) { - try { - process.kill(config.pid); - } catch (e) { - output.appendLine(`failed to kill the outdated local app (pid: ${config.pid}): ${e}`); - } - } - config = undefined; - } - } - if (config) { - return config; - } - if (installation) { - try { - await fs.promises.access(installation.path, fs.constants.X_OK); - throwIfCancelled(token); - } catch { - installation = undefined; - } - } - if (!installation) { - if (download instanceof Error) { - throw download; - } - installation = await installLocalApp(download, token); - await context.globalState.update(installationKey, installation); - throwIfCancelled(token); - } - config = await startLocalApp(gitpodHost, installation, token); - await context.globalState.update(configKey, config); - throwIfCancelled(token); - return config; - } - - async function withLocalApp(gitpodHost: string, op: (client: LocalAppClient, config: LocalAppConfig) => Promise): Promise { - const gitpodAuthority = vscode.Uri.parse(gitpodHost).authority; - const configKey = 'config/' + gitpodAuthority; - const installationKey = 'installation/' + gitpodAuthority; - let restartAttempts = 0; - while (restartAttempts < 5) { - const config = await withLock(gitpodAuthority, token => - ensureLocalApp(gitpodHost, configKey, installationKey, token) - , slowLockTimeout); - const client = new LocalAppClient('http://localhost:' + config.apiPort, { transport: NodeHttpTransport() }); - try { - const result = await op(client, config); - return result; - } catch (e) { - let running: true | Error; - try { - process.kill(config.pid, 0); - running = true; - } catch (e2) { - running = e2; - } - if (running === true && (e.code === grpc.Code.Unavailable || e.code === grpc.Code.Unknown)) { - output.appendLine(`the local app (pid: ${config.pid}) is running, but the api endpoint is not ready: ${e}`); - output.appendLine(`retying again after 1s delay...`); - await new Promise(resolve => setTimeout(resolve, 1000)); - continue; - } - if (running === true) { - throw e; - } - output.appendLine(`failed to access the local app: ${e}`); - output.appendLine(`the local app (pid: ${config.pid}) is not running: ${running}`); - output.appendLine(`restarting the local app...`); - await withLock(gitpodAuthority, async () => { - if (JSON.stringify(context.globalState.get(configKey)) === JSON.stringify(config)) { - await context.globalState.update(configKey, undefined); - } - }, fastLockTimeout); - restartAttempts++; - } - } - throw new Error('failed to access the local app'); - } - - async function resolveSSHConnection({ instanceId, workspaceId, gitpodHost }: SSHConnectionParams): Promise { - return withLocalApp(gitpodHost, client => { - const request = new ResolveSSHConnectionRequest(); - request.setInstanceId(instanceId); - request.setWorkspaceId(workspaceId); - return new Promise((resolve, reject) => - client.resolveSSHConnection(request, (e, r) => r ? resolve(r) : reject(e)) - ); - }); - } - - const authCompletePath = '/auth-complete'; - context.subscriptions.push(vscode.window.registerUriHandler({ - handleUri: async uri => { - if (uri.path === authCompletePath) { - output.appendLine('auth completed'); - return; - } - output.appendLine('open workspace window: ' + uri.toString()); - const params: SSHConnectionParams = JSON.parse(uri.query); - try { - await vscode.window.withProgress({ - location: vscode.ProgressLocation.Notification, - cancellable: false, - title: `Connecting to Gitpod workspace: ${params.workspaceId}` - }, async () => { - const connection = await resolveSSHConnection(params); - - const config = vscode.workspace.getConfiguration('remote.SSH'); - const defaultExtensions = config.get('defaultExtensions') || []; - if (defaultExtensions.indexOf('gitpod.gitpod-remote-ssh') === -1) { - defaultExtensions.unshift('gitpod.gitpod-remote-ssh'); - await config.update('defaultExtensions', defaultExtensions, vscode.ConfigurationTarget.Global); - } - // TODO(ak) notify a user about config file changes? - const gitpodConfigFile = connection.getConfigFile(); - const currentConfigFile = config.get('configFile'); - if (currentConfigFile === gitpodConfigFile) { - // invalidate cached SSH targets from the current config file - await config.update('configFile', undefined, vscode.ConfigurationTarget.Global); - } - await config.update('configFile', gitpodConfigFile, vscode.ConfigurationTarget.Global); - // TODO(ak) ensure that vscode.ssh-remote is installed - await vscode.commands.executeCommand('vscode.openFolder', vscode.Uri.parse(`vscode-remote://ssh-remote+${connection.getHost()}${uri.path || '/'}`), { - forceNewWindow: true - }); - }); - } catch (e) { - vscode.window.showErrorMessage(`Failed to connect to Gitpod workspace ${params.workspaceId}: ${e}`); - output.appendLine(`failed to open uri: ${e}`); - throw e; - } - } - })); - - if (vscode.env.remoteName === undefined || context.extension.extensionKind !== vscode.ExtensionKind.UI) { - return; - } - - context.subscriptions.push(vscode.commands.registerCommand('gitpod-desktop.api.autoTunnel', async (gitpodHost: string, instanceId: string, enabled: boolean) => { - try { - await withLocalApp(gitpodHost, client => { - const request = new AutoTunnelRequest(); - request.setInstanceId(instanceId); - request.setEnabled(enabled); - return new Promise((resolve, reject) => - client.autoTunnel(request, (e, r) => r ? resolve(undefined) : reject(e)) - ); - }); - } catch (e) { - console.error('failed to disable auto tunneling', e); - } - })); -} - -export function deactivate() { } diff --git a/extensions/gitpod-desktop/yarn.lock b/extensions/gitpod-desktop/yarn.lock deleted file mode 100644 index 6226fa25ca600..0000000000000 --- a/extensions/gitpod-desktop/yarn.lock +++ /dev/null @@ -1,198 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@gitpod/local-app-api-grpcweb@ak-vscode-desktop": - version "0.1.5-ak-vscode-desktop.10" - resolved "https://registry.yarnpkg.com/@gitpod/local-app-api-grpcweb/-/local-app-api-grpcweb-0.1.5-ak-vscode-desktop.10.tgz#85ae5128dacc7cb7ae0ddbfe36b826302e969f83" - integrity sha512-YX7zKRQjb0O58DM2e5rAb9VQNZELSHUJXW8ZkIogqe4YY6kQFgl5eTs2Tyj6EsHt1N/du4UR/9Wt4SQ0I0QmYg== - dependencies: - "@gitpod/supervisor-api-grpcweb" "0.1.5-prs-core-dev-kubeconfig.3" - "@improbable-eng/grpc-web" "0.14.0" - google-protobuf "^3.17.0" - -"@gitpod/supervisor-api-grpcweb@0.1.5-prs-core-dev-kubeconfig.3": - version "0.1.5-prs-core-dev-kubeconfig.3" - resolved "https://registry.yarnpkg.com/@gitpod/supervisor-api-grpcweb/-/supervisor-api-grpcweb-0.1.5-prs-core-dev-kubeconfig.3.tgz#ce6844841dd66435c77c3ef74cb1833f23038400" - integrity sha512-d7Def3zFVarb2vueYLmJ+hRkaNEkK84r2B0xWtYT/OLr323NMWiPYlWePPis7Vt7WBV9u69erCtTqP7jAqu2Tg== - dependencies: - "@improbable-eng/grpc-web" "^0.14.0" - -"@improbable-eng/grpc-web-node-http-transport@^0.14.0": - version "0.14.0" - resolved "https://registry.yarnpkg.com/@improbable-eng/grpc-web-node-http-transport/-/grpc-web-node-http-transport-0.14.0.tgz#3edf05360541b2d7ba799ec0144780a7a9a99383" - integrity sha512-NGZJgY8zTTWM//9oGdJZ+acmCgcgUcqxu3NV3GMFxw35D+3xkdEz599r9O7urg1Vv0+LzXDvfWEg7qg1Ec8x1w== - -"@improbable-eng/grpc-web@0.14.0", "@improbable-eng/grpc-web@^0.14.0": - version "0.14.0" - resolved "https://registry.yarnpkg.com/@improbable-eng/grpc-web/-/grpc-web-0.14.0.tgz#a71c5af471dcef6a2810798f71f93ed8d6ac3817" - integrity sha512-ag1PTMWpBZKGi6GrEcZ4lkU5Qag23Xjo10BmnK9qyx4TMmSVcWmQ3rECirfQzm2uogrM9n1M6xfOpFsJP62ivA== - dependencies: - browser-headers "^0.4.1" - -"@types/node-fetch@^2.5.12": - version "2.5.12" - resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.5.12.tgz#8a6f779b1d4e60b7a57fb6fd48d84fb545b9cc66" - integrity sha512-MKgC4dlq4kKNa/mYrwpKfzQMB5X3ee5U6fSprkKpToBqBmX4nFZL9cW5jl6sWn+xpRJ7ypWh2yyqqr8UUCstSw== - dependencies: - "@types/node" "*" - form-data "^3.0.0" - -"@types/node@*": - version "16.6.2" - resolved "https://registry.yarnpkg.com/@types/node/-/node-16.6.2.tgz#331b7b9f8621c638284787c5559423822fdffc50" - integrity sha512-LSw8TZt12ZudbpHc6EkIyDM3nHVWKYrAvGy6EAJfNfjusbwnThqjqxUKKRwuV3iWYeW/LYMzNgaq3MaLffQ2xA== - -"@types/node@^10.12.21": - version "10.17.60" - resolved "https://registry.yarnpkg.com/@types/node/-/node-10.17.60.tgz#35f3d6213daed95da7f0f73e75bcc6980e90597b" - integrity sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw== - -"@types/tmp@^0.2.1": - version "0.2.1" - resolved "https://registry.yarnpkg.com/@types/tmp/-/tmp-0.2.1.tgz#83ecf4ec22a8c218c71db25f316619fe5b986011" - integrity sha512-7cTXwKP/HLOPVgjg+YhBdQ7bMiobGMuoBmrGmqwIWJv8elC6t1DfVc/mn4fD9UE1IjhwmhaQ5pGVXkmXbH0rhg== - -asynckit@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" - integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= - -balanced-match@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" - integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== - -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -browser-headers@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/browser-headers/-/browser-headers-0.4.1.tgz#4308a7ad3b240f4203dbb45acedb38dc2d65dd02" - integrity sha512-CA9hsySZVo9371qEHjHZtYxV2cFtVj5Wj/ZHi8ooEsrtm4vOnl9Y9HmyYWk9q+05d7K3rdoAE0j3MVEFVvtQtg== - -combined-stream@^1.0.8: - version "1.0.8" - resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" - integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== - dependencies: - delayed-stream "~1.0.0" - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= - -delayed-stream@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" - integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= - -form-data@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.1.tgz#ebd53791b78356a99af9a300d4282c4d5eb9755f" - integrity sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.8" - mime-types "^2.1.12" - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= - -glob@^7.1.3: - version "7.1.7" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90" - integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - -google-protobuf@^3.17.0: - version "3.17.3" - resolved "https://registry.yarnpkg.com/google-protobuf/-/google-protobuf-3.17.3.tgz#f87595073545a77946c8f0b67c302c5f7646d700" - integrity sha512-OVPzcSWIAJ+d5yiHyeaLrdufQtrvaBrF4JQg+z8ynTkbO3uFcujqXszTumqg1cGsAsjkWnI+M5B1xZ19yR4Wyg== - -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2: - version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - -mime-db@1.49.0: - version "1.49.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.49.0.tgz#f3dfde60c99e9cf3bc9701d687778f537001cbed" - integrity sha512-CIc8j9URtOVApSFCQIF+VBkX1RwXp/oMMOrqdyXSBXq5RWNEsRfyj1kiRnQgmNXmHxPoFIxOroKA3zcU9P+nAA== - -mime-types@^2.1.12: - version "2.1.32" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.32.tgz#1d00e89e7de7fe02008db61001d9e02852670fd5" - integrity sha512-hJGaVS4G4c9TSMYh2n6SQAGrC4RnfU+daP8G7cSCmaqNjiOoUY0VHCMS42pxnQmVF1GWwFhbHWn3RIxCqTmZ9A== - dependencies: - mime-db "1.49.0" - -minimatch@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" - integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== - dependencies: - brace-expansion "^1.1.7" - -node-fetch@^2.6.1: - version "2.6.1" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052" - integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw== - -once@^1.3.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= - dependencies: - wrappy "1" - -path-is-absolute@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= - -rimraf@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" - integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== - dependencies: - glob "^7.1.3" - -tmp@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.1.tgz#8457fc3037dcf4719c251367a1af6500ee1ccf14" - integrity sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ== - dependencies: - rimraf "^3.0.0" - -vscode-nls@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/vscode-nls/-/vscode-nls-5.0.0.tgz#99f0da0bd9ea7cda44e565a74c54b1f2bc257840" - integrity sha512-u0Lw+IYlgbEJFF6/qAqG2d1jQmJl0eyAGJHoAJqr2HT4M2BNuQYSEiSE75f52pXHSJm8AlTjnLLbBFPrdz2hpA== - -wrappy@1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= diff --git a/extensions/gitpod-remote-ssh/.vscodeignore b/extensions/gitpod-remote-ssh/.vscodeignore deleted file mode 100644 index f65bc15d8391a..0000000000000 --- a/extensions/gitpod-remote-ssh/.vscodeignore +++ /dev/null @@ -1,9 +0,0 @@ -.gitignore -src/** -!src/common/config.json -out/** -build/** -extension.webpack.config.js -extension-browser.webpack.config.js -tsconfig.json -yarn.lock diff --git a/extensions/gitpod-remote-ssh/package.json b/extensions/gitpod-remote-ssh/package.json deleted file mode 100644 index 4bd359d980462..0000000000000 --- a/extensions/gitpod-remote-ssh/package.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "name": "gitpod-remote-ssh", - "displayName": "%displayName%", - "description": "%description%", - "publisher": "gitpod", - "version": "0.0.14", - "license": "MIT", - "preview": true, - "repository": { - "type": "git", - "url": "https://github.com/gitpod-io/vscode.git" - }, - "engines": { - "vscode": "^1.58.2" - }, - "categories": [ - "Other" - ], - "extensionKind": [ - "workspace" - ], - "activationEvents": [ - "*" - ], - "main": "./out/extension.js", - "contributes": {}, - "scripts": { - "compile": "gulp compile-extension:gitpod-remote-ssh", - "watch": "gulp watch-extension:gitpod-remote-ssh", - "vscode:prepublish": "npm run compile" - }, - "devDependencies": { - "@types/node": "^10.12.21" - }, - "dependencies": { - "vscode-nls": "^5.0.0" - }, - "extensionDependencies": [ - "gitpod.gitpod" - ] -} diff --git a/extensions/gitpod-remote-ssh/package.nls.json b/extensions/gitpod-remote-ssh/package.nls.json deleted file mode 100644 index b18416320a760..0000000000000 --- a/extensions/gitpod-remote-ssh/package.nls.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "displayName": "Gitpod Remote SSH", - "description": "Gitpod Remote SSH Support" -} diff --git a/extensions/gitpod-remote-ssh/yarn.lock b/extensions/gitpod-remote-ssh/yarn.lock deleted file mode 100644 index f869b66a776f9..0000000000000 --- a/extensions/gitpod-remote-ssh/yarn.lock +++ /dev/null @@ -1,13 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@types/node@^10.12.21": - version "10.17.60" - resolved "https://registry.yarnpkg.com/@types/node/-/node-10.17.60.tgz#35f3d6213daed95da7f0f73e75bcc6980e90597b" - integrity sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw== - -vscode-nls@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/vscode-nls/-/vscode-nls-5.0.0.tgz#99f0da0bd9ea7cda44e565a74c54b1f2bc257840" - integrity sha512-u0Lw+IYlgbEJFF6/qAqG2d1jQmJl0eyAGJHoAJqr2HT4M2BNuQYSEiSE75f52pXHSJm8AlTjnLLbBFPrdz2hpA== diff --git a/extensions/gitpod-desktop/.vscodeignore b/extensions/gitpod-remote/.vscodeignore similarity index 100% rename from extensions/gitpod-desktop/.vscodeignore rename to extensions/gitpod-remote/.vscodeignore diff --git a/extensions/gitpod-remote-ssh/README.md b/extensions/gitpod-remote/README.md similarity index 100% rename from extensions/gitpod-remote-ssh/README.md rename to extensions/gitpod-remote/README.md diff --git a/extensions/gitpod-remote-ssh/extension.webpack.config.js b/extensions/gitpod-remote/extension.webpack.config.js similarity index 100% rename from extensions/gitpod-remote-ssh/extension.webpack.config.js rename to extensions/gitpod-remote/extension.webpack.config.js diff --git a/extensions/gitpod-remote/package.json b/extensions/gitpod-remote/package.json new file mode 100644 index 0000000000000..7dbd577debd6d --- /dev/null +++ b/extensions/gitpod-remote/package.json @@ -0,0 +1,224 @@ +{ + "name": "gitpod-remote-ssh", + "displayName": "%displayName%", + "description": "%description%", + "publisher": "gitpod", + "version": "0.0.16", + "license": "MIT", + "preview": true, + "repository": { + "type": "git", + "url": "https://github.com/gitpod-io/vscode.git" + }, + "engines": { + "vscode": "^1.58.2" + }, + "categories": [ + "Other" + ], + "extensionKind": [ + "workspace" + ], + "activationEvents": [ + "*" + ], + "main": "./out/extension.js", + "contributes": { + "commands": [ + { + "command": "gitpod.stop.ws", + "title": "%stopWorkspace%", + "enablement": "gitpod.inWorkspace == true && gitpod.workspaceOwned == true" + }, + { + "command": "gitpod.open.settings", + "title": "%openSettings%", + "enablement": "gitpod.inWorkspace == true" + }, + { + "command": "gitpod.open.accessControl", + "title": "%openAccessControl%", + "enablement": "gitpod.inWorkspace == true" + }, + { + "command": "gitpod.open.context", + "title": "%openContext%", + "enablement": "gitpod.inWorkspace == true" + }, + { + "command": "gitpod.open.dashboard", + "title": "%openDashboard%", + "enablement": "gitpod.inWorkspace == true" + }, + { + "command": "gitpod.open.documentation", + "title": "%openDocumentation%", + "enablement": "gitpod.inWorkspace == true" + }, + { + "command": "gitpod.open.twitter", + "title": "%openTwitter%", + "enablement": "gitpod.inWorkspace == true" + }, + { + "command": "gitpod.open.discord", + "title": "%openDiscord%", + "enablement": "gitpod.inWorkspace == true" + }, + { + "command": "gitpod.open.discourse", + "title": "%openDiscourse%", + "enablement": "gitpod.inWorkspace == true" + }, + { + "command": "gitpod.reportIssue", + "title": "%reportIssue%", + "enablement": "gitpod.inWorkspace == true" + }, + { + "command": "gitpod.upgradeSubscription", + "title": "%upgradeSubscription%", + "enablement": "gitpod.inWorkspace == true && gitpod.workspaceOwned == true" + }, + { + "command": "gitpod.ExtendTimeout", + "title": "%extendTimeout%", + "enablement": "gitpod.inWorkspace == true && gitpod.workspaceOwned == true" + }, + { + "command": "gitpod.takeSnapshot", + "title": "%takeSnapshot%", + "enablement": "gitpod.inWorkspace == true && gitpod.workspaceOwned == true" + }, + { + "command": "gitpod.shareWorkspace", + "title": "%shareWorkspace%", + "enablement": "gitpod.inWorkspace == true && gitpod.workspaceOwned == true && gitpod.workspaceShared == false" + }, + { + "command": "gitpod.stopSharingWorkspace", + "title": "%stopSharingWorkspace%", + "enablement": "gitpod.inWorkspace == true && gitpod.workspaceOwned == true && gitpod.workspaceShared == true" + }, + { + "command": "gitpod.openInStable", + "title": "%openInStable%", + "enablement": "gitpod.inWorkspace == true && gitpod.UIKind == 'web'" + }, + { + "command": "gitpod.openInInsiders", + "title": "%openInInsiders%", + "enablement": "gitpod.inWorkspace == true && gitpod.UIKind == 'web'" + }, + { + "command": "gitpod.openInBrowser", + "title": "%openInBrowser%", + "enablement": "gitpod.inWorkspace == true && gitpod.UIKind == 'desktop'" + } + ], + "menus": { + "statusBar/remoteIndicator": [ + { + "command": "gitpod.stop.ws", + "group": "remote_00_gitpod_navigation@10", + "when": "gitpod.inWorkspace == true && gitpod.workspaceOwned == true" + }, + { + "command": "gitpod.open.settings", + "group": "remote_00_gitpod_navigation@20", + "when": "gitpod.inWorkspace == true" + }, + { + "command": "gitpod.open.accessControl", + "group": "remote_00_gitpod_navigation@30", + "when": "gitpod.inWorkspace == true" + }, + { + "command": "gitpod.open.context", + "group": "remote_00_gitpod_navigation@40", + "when": "gitpod.inWorkspace == true" + }, + { + "command": "gitpod.open.dashboard", + "group": "remote_00_gitpod_navigation@50", + "when": "gitpod.inWorkspace == true" + }, + { + "command": "gitpod.open.documentation", + "group": "remote_00_gitpod_navigation@60", + "when": "gitpod.inWorkspace == true" + }, + { + "command": "gitpod.open.twitter", + "group": "remote_00_gitpod_navigation@70", + "when": "gitpod.inWorkspace == true" + }, + { + "command": "gitpod.open.discord", + "group": "remote_00_gitpod_navigation@80", + "when": "gitpod.inWorkspace == true" + }, + { + "command": "gitpod.open.discourse", + "group": "remote_00_gitpod_navigation@81", + "when": "gitpod.inWorkspace == true" + }, + { + "command": "gitpod.reportIssue", + "group": "remote_00_gitpod_navigation@90", + "when": "gitpod.inWorkspace == true" + }, + { + "command": "gitpod.upgradeSubscription", + "group": "remote_00_gitpod_navigation@100", + "when": "gitpod.inWorkspace == true && gitpod.workspaceOwned == true" + }, + { + "command": "gitpod.ExtendTimeout", + "group": "remote_00_gitpod_navigation@110", + "when": "gitpod.inWorkspace == true && gitpod.workspaceOwned == true" + }, + { + "command": "gitpod.takeSnapshot", + "group": "remote_00_gitpod_navigation@120", + "when": "gitpod.inWorkspace == true && gitpod.workspaceOwned == true" + }, + { + "command": "gitpod.shareWorkspace", + "group": "remote_00_gitpod_navigation@130", + "when": "gitpod.inWorkspace == true && gitpod.workspaceOwned == true && gitpod.workspaceShared == false" + }, + { + "command": "gitpod.stopSharingWorkspace", + "group": "remote_00_gitpod_navigation@130", + "when": "gitpod.inWorkspace == true && gitpod.workspaceOwned == true && gitpod.workspaceShared == true" + }, + { + "command": "gitpod.openInStable", + "group": "remote_00_gitpod_navigation@900", + "when": "gitpod.inWorkspace == true && gitpod.UIKind == 'web'" + }, + { + "command": "gitpod.openInInsiders", + "group": "remote_00_gitpod_navigation@1000", + "when": "gitpod.inWorkspace == true && gitpod.UIKind == 'web'" + }, + { + "command": "gitpod.openInBrowser", + "group": "remote_00_gitpod_navigation@1000", + "when": "gitpod.inWorkspace == true && gitpod.UIKind == 'desktop'" + } + ] + } + }, + "scripts": { + "vscode:prepublish": "yarn run compile --cwd .." + }, + "devDependencies": { + "@types/node": "^10.12.21" + }, + "dependencies": { + "gitpod-shared": "0.0.1", + "vscode-nls": "^5.0.0" + } +} diff --git a/extensions/gitpod-remote/package.nls.json b/extensions/gitpod-remote/package.nls.json new file mode 100644 index 0000000000000..25a1830803087 --- /dev/null +++ b/extensions/gitpod-remote/package.nls.json @@ -0,0 +1,22 @@ +{ + "displayName": "Gitpod Remote", + "description": "Gitpod Remote Support", + "openDashboard": "Gitpod: Open Dashboard", + "openAccessControl": "Gitpod: Open Access Control", + "openSettings": "Gitpod: Open Settings", + "openContext": "Gitpod: Open Context", + "openDocumentation": "Gitpod: Documentation", + "openDiscord": "Gitpod: Open Community Chat", + "openDiscourse": "Gitpod: Open Community Forum", + "openTwitter": "Gitpod: Follow us on Twitter", + "reportIssue": "Gitpod: Report Issue", + "stopWorkspace": "Gitpod: Stop Workspace", + "upgradeSubscription": "Gitpod: Upgrade Subscription", + "extendTimeout": "Gitpod: Extend Workspace Timeout", + "takeSnapshot": "Gitpod: Share Workspace Snapshot", + "shareWorkspace": "Gitpod: Share Running Workspace", + "stopSharingWorkspace": "Gitpod: Stop Sharing Running Workspace", + "openInStable": "Gitpod: Open in VS Code", + "openInInsiders": "Gitpod: Open in VS Code Insiders", + "openInBrowser": "Gitpod: Open in Browser" +} \ No newline at end of file diff --git a/extensions/gitpod-remote-ssh/src/cli.ts b/extensions/gitpod-remote/src/cli.ts similarity index 100% rename from extensions/gitpod-remote-ssh/src/cli.ts rename to extensions/gitpod-remote/src/cli.ts diff --git a/extensions/gitpod-remote-ssh/src/extension.ts b/extensions/gitpod-remote/src/extension.ts similarity index 89% rename from extensions/gitpod-remote-ssh/src/extension.ts rename to extensions/gitpod-remote/src/extension.ts index 0d65780dd1dba..3544407857047 100644 --- a/extensions/gitpod-remote-ssh/src/extension.ts +++ b/extensions/gitpod-remote/src/extension.ts @@ -6,18 +6,30 @@ import * as grpc from '@grpc/grpc-js'; import * as cp from 'child_process'; -import type { GitpodExtension, GitpodExtensionContext, status, terminal } from 'gitpod/src/gitpod'; +import * as shared from 'gitpod-shared/out/extension'; +import { GitpodExtensionContext } from 'gitpod-shared/out/features'; +import { TaskStatus, TasksStatusRequest, TasksStatusResponse, TaskState } from '@gitpod/supervisor-api-grpc/lib/status_pb'; +import { Terminal, ListTerminalsRequest, TerminalSize, SetTerminalSizeRequest, ListenTerminalRequest, ListenTerminalResponse, ShutdownTerminalRequest, WriteTerminalRequest } from '@gitpod/supervisor-api-grpc/lib/terminal_pb'; import * as http from 'http'; import * as path from 'path'; import * as util from 'util'; import * as vscode from 'vscode'; +let gitpodContext: GitpodExtensionContext | undefined; export async function activate(context: vscode.ExtensionContext) { - const gitpodExtension = vscode.extensions.getExtension('gitpod.gitpod')!.exports; - if (!gitpodExtension) { + gitpodContext = await shared.createContext(context); + if (!gitpodContext) { + return; + } + if (vscode.extensions.getExtension('gitpod.gitpod')) { + try { + await util.promisify(cp.exec)('code --uninstall-extension gitpod.gitpod'); + vscode.commands.executeCommand('workbench.action.reloadWindow'); + } catch (e) { + gitpodContext.output.appendLine('failed to uninstall gitpod.gitpod: ' + e); + } return; } - const gitpodContext = gitpodExtension.newContext(context); if (openWorkspaceLocation(gitpodContext)) { return; } @@ -28,8 +40,8 @@ export async function activate(context: vscode.ExtensionContext) { registerCLI(gitpodContext); // For port tunneling we rely on Remote SSH capabilities - // and gitpod.gitpod-desktop to disable auto tunneling from the current local machine. - vscode.commands.executeCommand('gitpod-desktop.api.autoTunnel', gitpodContext.info.getGitpodHost(), gitpodContext.info.getInstanceId(), false); + // and gitpod.gitpod to disable auto tunneling from the current local machine. + vscode.commands.executeCommand('gitpod.api.autoTunnel', gitpodContext.info.getGitpodHost(), gitpodContext.info.getInstanceId(), false); // TODO // - auth? @@ -40,7 +52,12 @@ export async function activate(context: vscode.ExtensionContext) { await gitpodContext.active; } -export function deactivate() { } +export function deactivate() { + if (!gitpodContext) { + return; + } + return gitpodContext.dispose(); +} export function registerCLI(context: GitpodExtensionContext): void { // configure regular terminals @@ -247,12 +264,12 @@ async function registerTasks(context: GitpodExtensionContext): Promise { dispose: () => tokenSource.cancel() }); - const tasks = new Map(); + const tasks = new Map(); let synched = false; while (!synched) { let listener: vscode.Disposable | undefined; try { - const req = new context.supervisor.TasksStatusRequest(); + const req = new TasksStatusRequest(); req.setObserve(true); const stream = context.supervisor.status.tasksStatus(req, context.supervisor.metadata); function done() { @@ -263,10 +280,10 @@ async function registerTasks(context: GitpodExtensionContext): Promise { await new Promise((resolve, reject) => { stream.on('end', resolve); stream.on('error', reject); - stream.on('data', (response: status.TasksStatusResponse) => { + stream.on('data', (response: TasksStatusResponse) => { if (response.getTasksList().every(status => { tasks.set(status.getTerminal(), status); - return status.getState() !== context.supervisor.TaskState.OPENING; + return status.getState() !== TaskState.OPENING; })) { done(); } @@ -287,9 +304,9 @@ async function registerTasks(context: GitpodExtensionContext): Promise { return; } - const terminals = new Map(); + const terminals = new Map(); try { - const response = await util.promisify(context.supervisor.terminal.list.bind(context.supervisor.terminal, new context.supervisor.ListTerminalsRequest(), context.supervisor.metadata, { + const response = await util.promisify(context.supervisor.terminal.list.bind(context.supervisor.terminal, new ListTerminalsRequest(), context.supervisor.metadata, { deadline: Date.now() + context.supervisor.deadlines.long }))(); for (const terminal of response.getTerminalsList()) { @@ -330,11 +347,11 @@ function regsiterTask(alias: string, initialTitle: string, context: GitpodExtens return; } try { - const size = new context.supervisor.TerminalSize(); + const size = new TerminalSize(); size.setCols(dimensions.columns); size.setRows(dimensions.rows); - const request = new context.supervisor.SetTerminalSizeRequest(); + const request = new SetTerminalSizeRequest(); request.setAlias(alias); request.setSize(size); request.setForce(true); @@ -364,13 +381,13 @@ function regsiterTask(alias: string, initialTitle: string, context: GitpodExtens let listener: vscode.Disposable | undefined; try { await new Promise((resolve, reject) => { - const request = new context.supervisor.ListenTerminalRequest(); + const request = new ListenTerminalRequest(); request.setAlias(alias); const stream = context.supervisor.terminal.listen(request, context.supervisor.metadata); listener = token.onCancellationRequested(() => stream.cancel()); stream.on('end', resolve); stream.on('error', reject); - stream.on('data', (response: terminal.ListenTerminalResponse) => { + stream.on('data', (response: ListenTerminalResponse) => { if (response.hasTitle()) { const title = response.getTitle(); if (title) { @@ -426,7 +443,7 @@ function regsiterTask(alias: string, initialTitle: string, context: GitpodExtens // Attempt to kill the pty, it may have already been killed at this // point but we want to make sure try { - const request = new context.supervisor.ShutdownTerminalRequest(); + const request = new ShutdownTerminalRequest(); request.setAlias(alias); await util.promisify(context.supervisor.terminal.shutdown.bind(context.supervisor.terminal, request, context.supervisor.metadata, { deadline: Date.now() + context.supervisor.deadlines.short @@ -450,7 +467,7 @@ function regsiterTask(alias: string, initialTitle: string, context: GitpodExtens return; } try { - const request = new context.supervisor.WriteTerminalRequest(); + const request = new WriteTerminalRequest(); request.setAlias(alias); request.setStdin(Buffer.from(data, 'utf8')); await util.promisify(context.supervisor.terminal.write.bind(context.supervisor.terminal, request, context.supervisor.metadata, { diff --git a/extensions/gitpod-remote-ssh/tsconfig.json b/extensions/gitpod-remote/tsconfig.json similarity index 69% rename from extensions/gitpod-remote-ssh/tsconfig.json rename to extensions/gitpod-remote/tsconfig.json index 13d9b9033b070..60d09fdf59579 100644 --- a/extensions/gitpod-remote-ssh/tsconfig.json +++ b/extensions/gitpod-remote/tsconfig.json @@ -4,5 +4,8 @@ "outDir": "./out", "rootDir": "./src", "esModuleInterop": true - } + }, + "references": [ + { "path": "../gitpod-shared" } + ] } diff --git a/extensions/gitpod-shared/package.json b/extensions/gitpod-shared/package.json new file mode 100644 index 0000000000000..05b5c8a74915d --- /dev/null +++ b/extensions/gitpod-shared/package.json @@ -0,0 +1,27 @@ +{ + "private": true, + "name": "gitpod-shared", + "publisher": "gitpod", + "version": "0.0.1", + "license": "MIT", + "engines": { + "vscode": "^1.58.2" + }, + "scripts": { + "prepare": "node scripts/inflate.js" + }, + "devDependencies": { + "@types/node": "^10.12.21", + "@types/ws": "^7.2.6" + }, + "dependencies": { + "@gitpod/gitpod-protocol": "main", + "@gitpod/supervisor-api-grpc": "main", + "bufferutil": "^4.0.1", + "reconnecting-websocket": "^4.4.0", + "utf-8-validate": "^5.0.2", + "vscode-nls": "^5.0.0", + "ws": "^7.3.1", + "yaml": "^1.10.0" + } +} diff --git a/extensions/gitpod-shared/scripts/inflate.js b/extensions/gitpod-shared/scripts/inflate.js new file mode 100644 index 0000000000000..47d966ed66681 --- /dev/null +++ b/extensions/gitpod-shared/scripts/inflate.js @@ -0,0 +1,242 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Gitpod. All rights reserved. + *--------------------------------------------------------------------------------------------*/ + +//@ts-check +const fs = require('fs'); +const path = require('path'); + +const nls = { + 'openDashboard': 'Gitpod: Open Dashboard', + 'openAccessControl': 'Gitpod: Open Access Control', + 'openSettings': 'Gitpod: Open Settings', + 'openContext': 'Gitpod: Open Context', + 'openDocumentation': 'Gitpod: Documentation', + 'openDiscord': 'Gitpod: Open Community Chat', + 'openDiscourse': 'Gitpod: Open Community Forum', + 'openTwitter': 'Gitpod: Follow us on Twitter', + 'reportIssue': 'Gitpod: Report Issue', + 'stopWorkspace': 'Gitpod: Stop Workspace', + 'upgradeSubscription': 'Gitpod: Upgrade Subscription', + 'extendTimeout': 'Gitpod: Extend Workspace Timeout', + 'takeSnapshot': 'Gitpod: Share Workspace Snapshot', + 'shareWorkspace': 'Gitpod: Share Running Workspace', + 'stopSharingWorkspace': 'Gitpod: Stop Sharing Running Workspace', + 'openInStable': 'Gitpod: Open in VS Code', + 'openInInsiders': 'Gitpod: Open in VS Code Insiders', + 'openInBrowser': 'Gitpod: Open in Browser' +}; + +const commands = [ + { + 'command': 'gitpod.stop.ws', + 'title': '%stopWorkspace%', + 'enablement': 'gitpod.inWorkspace == true && gitpod.workspaceOwned == true' + }, + { + 'command': 'gitpod.open.settings', + 'title': '%openSettings%', + 'enablement': 'gitpod.inWorkspace == true' + }, + { + 'command': 'gitpod.open.accessControl', + 'title': '%openAccessControl%', + 'enablement': 'gitpod.inWorkspace == true' + }, + { + 'command': 'gitpod.open.context', + 'title': '%openContext%', + 'enablement': 'gitpod.inWorkspace == true' + }, + { + 'command': 'gitpod.open.dashboard', + 'title': '%openDashboard%', + 'enablement': 'gitpod.inWorkspace == true' + }, + { + 'command': 'gitpod.open.documentation', + 'title': '%openDocumentation%', + 'enablement': 'gitpod.inWorkspace == true' + }, + { + 'command': 'gitpod.open.twitter', + 'title': '%openTwitter%', + 'enablement': 'gitpod.inWorkspace == true' + }, + { + 'command': 'gitpod.open.discord', + 'title': '%openDiscord%', + 'enablement': 'gitpod.inWorkspace == true' + }, + { + 'command': 'gitpod.open.discourse', + 'title': '%openDiscourse%', + 'enablement': 'gitpod.inWorkspace == true' + }, + { + 'command': 'gitpod.reportIssue', + 'title': '%reportIssue%', + 'enablement': 'gitpod.inWorkspace == true' + }, + { + 'command': 'gitpod.upgradeSubscription', + 'title': '%upgradeSubscription%', + 'enablement': 'gitpod.inWorkspace == true && gitpod.workspaceOwned == true' + }, + { + 'command': 'gitpod.ExtendTimeout', + 'title': '%extendTimeout%', + 'enablement': 'gitpod.inWorkspace == true && gitpod.workspaceOwned == true' + }, + { + 'command': 'gitpod.takeSnapshot', + 'title': '%takeSnapshot%', + 'enablement': 'gitpod.inWorkspace == true && gitpod.workspaceOwned == true' + }, + { + 'command': 'gitpod.shareWorkspace', + 'title': '%shareWorkspace%', + 'enablement': 'gitpod.inWorkspace == true && gitpod.workspaceOwned == true && gitpod.workspaceShared == false' + }, + { + 'command': 'gitpod.stopSharingWorkspace', + 'title': '%stopSharingWorkspace%', + 'enablement': 'gitpod.inWorkspace == true && gitpod.workspaceOwned == true && gitpod.workspaceShared == true' + }, + { + 'command': 'gitpod.openInStable', + 'title': '%openInStable%', + 'enablement': 'gitpod.inWorkspace == true && gitpod.UIKind == \'web\'' + }, + { + 'command': 'gitpod.openInInsiders', + 'title': '%openInInsiders%', + 'enablement': 'gitpod.inWorkspace == true && gitpod.UIKind == \'web\'' + }, + { + 'command': 'gitpod.openInBrowser', + 'title': '%openInBrowser%', + 'enablement': 'gitpod.inWorkspace == true && gitpod.UIKind == \'desktop\'' + } +]; + +const remoteMenus = [ + { + 'command': 'gitpod.stop.ws', + 'group': 'remote_00_gitpod_navigation@10', + 'when': 'gitpod.inWorkspace == true && gitpod.workspaceOwned == true' + }, + { + 'command': 'gitpod.open.settings', + 'group': 'remote_00_gitpod_navigation@20', + 'when': 'gitpod.inWorkspace == true' + }, + { + 'command': 'gitpod.open.accessControl', + 'group': 'remote_00_gitpod_navigation@30', + 'when': 'gitpod.inWorkspace == true' + }, + { + 'command': 'gitpod.open.context', + 'group': 'remote_00_gitpod_navigation@40', + 'when': 'gitpod.inWorkspace == true' + }, + { + 'command': 'gitpod.open.dashboard', + 'group': 'remote_00_gitpod_navigation@50', + 'when': 'gitpod.inWorkspace == true' + }, + { + 'command': 'gitpod.open.documentation', + 'group': 'remote_00_gitpod_navigation@60', + 'when': 'gitpod.inWorkspace == true' + }, + { + 'command': 'gitpod.open.twitter', + 'group': 'remote_00_gitpod_navigation@70', + 'when': 'gitpod.inWorkspace == true' + }, + { + 'command': 'gitpod.open.discord', + 'group': 'remote_00_gitpod_navigation@80', + 'when': 'gitpod.inWorkspace == true' + }, + { + 'command': 'gitpod.open.discourse', + 'group': 'remote_00_gitpod_navigation@81', + 'when': 'gitpod.inWorkspace == true' + }, + { + 'command': 'gitpod.reportIssue', + 'group': 'remote_00_gitpod_navigation@90', + 'when': 'gitpod.inWorkspace == true' + }, + { + 'command': 'gitpod.upgradeSubscription', + 'group': 'remote_00_gitpod_navigation@100', + 'when': 'gitpod.inWorkspace == true && gitpod.workspaceOwned == true' + }, + { + 'command': 'gitpod.ExtendTimeout', + 'group': 'remote_00_gitpod_navigation@110', + 'when': 'gitpod.inWorkspace == true && gitpod.workspaceOwned == true' + }, + { + 'command': 'gitpod.takeSnapshot', + 'group': 'remote_00_gitpod_navigation@120', + 'when': 'gitpod.inWorkspace == true && gitpod.workspaceOwned == true' + }, + { + 'command': 'gitpod.shareWorkspace', + 'group': 'remote_00_gitpod_navigation@130', + 'when': 'gitpod.inWorkspace == true && gitpod.workspaceOwned == true && gitpod.workspaceShared == false' + }, + { + 'command': 'gitpod.stopSharingWorkspace', + 'group': 'remote_00_gitpod_navigation@130', + 'when': 'gitpod.inWorkspace == true && gitpod.workspaceOwned == true && gitpod.workspaceShared == true' + }, + { + 'command': 'gitpod.openInStable', + 'group': 'remote_00_gitpod_navigation@900', + 'when': 'gitpod.inWorkspace == true && gitpod.UIKind == \'web\'' + }, + { + 'command': 'gitpod.openInInsiders', + 'group': 'remote_00_gitpod_navigation@1000', + 'when': 'gitpod.inWorkspace == true && gitpod.UIKind == \'web\'' + }, + { + 'command': 'gitpod.openInBrowser', + 'group': 'remote_00_gitpod_navigation@1000', + 'when': 'gitpod.inWorkspace == true && gitpod.UIKind == \'desktop\'' + } +]; + +function inflateManifest(manifest) { + const contributes = manifest.contributes = (manifest.contributes || {}); + contributes.commands = (contributes.commands || []).filter(c => commands.findIndex(c2 => c.command === c2.command) === -1); + contributes.commands.unshift(...commands); + const menus = contributes.menus = (contributes.menus || {}); + menus['statusBar/remoteIndicator'] = (menus['statusBar/remoteIndicator'] || []).filter(m => remoteMenus.findIndex(m2 => m.command === m2.command) === -1); + menus['statusBar/remoteIndicator'].unshift(...remoteMenus); +} + +function main() { + const workspacePath = path.resolve(__dirname, '..', '..'); + for (const name of ['gitpod-remote', 'gitpod-web']) { + const manifestPath = path.resolve(workspacePath, name, 'package.json'); + const pckContent = fs.readFileSync(manifestPath, { encoding: 'utf-8' }); + const manifest = JSON.parse(pckContent); + inflateManifest(manifest); + fs.writeFileSync(manifestPath, JSON.stringify(manifest, undefined, 2), { encoding: 'utf-8' }); + + const nlsPath = path.resolve(workspacePath, name, 'package.nls.json'); + const nlsContent = fs.readFileSync(nlsPath, { encoding: 'utf-8' }); + fs.writeFileSync(nlsPath, JSON.stringify({ + ...JSON.parse(nlsContent), ...nls + }, undefined, '\t'), { encoding: 'utf-8' }); + } +} + +main(); diff --git a/extensions/gitpod-shared/src/extension.ts b/extensions/gitpod-shared/src/extension.ts new file mode 100644 index 0000000000000..8a8d95369a386 --- /dev/null +++ b/extensions/gitpod-shared/src/extension.ts @@ -0,0 +1,55 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Gitpod. All rights reserved. + *--------------------------------------------------------------------------------------------*/ + +import * as vscode from 'vscode'; +import { createGitpodExtensionContext, GitpodExtensionContext, registerDefaultLayout, registerNotifications, registerWorkspaceCommands, registerWorkspaceSharing, registerWorkspaceTimeout } from './features'; +import { performance } from 'perf_hooks'; + +export async function createContext(context: vscode.ExtensionContext): Promise { + if (typeof vscode.env.remoteName === 'undefined' || context.extension.extensionKind !== vscode.ExtensionKind.Workspace) { + return undefined; + } + + const gitpodContext = await createGitpodExtensionContext(context); + if (!gitpodContext) { + vscode.commands.executeCommand('setContext', 'gitpod.inWorkspace', false); + return undefined; + } + vscode.commands.executeCommand('setContext', 'gitpod.inWorkspace', true); + registerUsageAnalytics(gitpodContext); + registerWorkspaceCommands(gitpodContext); + registerWorkspaceSharing(gitpodContext); + registerWorkspaceTimeout(gitpodContext); + registerNotifications(gitpodContext); + registerDefaultLayout(gitpodContext); + return gitpodContext; +} + +function registerUsageAnalytics(context: GitpodExtensionContext): void { + if (context.devMode && vscode.env.uiKind === vscode.UIKind.Web) { + return; + } + const properties = { + id: vscode.env.sessionId, + workspaceId: context.info.getWorkspaceId(), + appName: vscode.env.appName, + uiKind: vscode.env.uiKind === vscode.UIKind.Web ? 'web' : 'desktop', + devMode: context.devMode, + }; + function fireEvent(phase: 'start' | 'running' | 'end'): Promise { + return context.gitpod.server.trackEvent({ + event: 'vscode_session', + properties: { + ...properties, + timestamp: performance.now(), + focused: vscode.window.state.focused, + phase, + } + }); + } + fireEvent('start'); + context.subscriptions.push(vscode.window.onDidChangeWindowState(() => fireEvent('running'))); + context.pendingWillCloseSocket.push(() => fireEvent('end')); +} + diff --git a/extensions/gitpod/src/features.ts b/extensions/gitpod-shared/src/features.ts similarity index 93% rename from extensions/gitpod/src/features.ts rename to extensions/gitpod-shared/src/features.ts index 6af27b783c67c..4effb2b024800 100644 --- a/extensions/gitpod/src/features.ts +++ b/extensions/gitpod-shared/src/features.ts @@ -10,17 +10,14 @@ import { JsonRpcProxyFactory } from '@gitpod/gitpod-protocol/lib/messaging/proxy import { NavigatorContext, PullRequestContext, User } from '@gitpod/gitpod-protocol/lib/protocol'; import { GitpodHostUrl } from '@gitpod/gitpod-protocol/lib/util/gitpod-host-url'; import { ControlServiceClient } from '@gitpod/supervisor-api-grpc/lib/control_grpc_pb'; -import { ExposePortRequest } from '@gitpod/supervisor-api-grpc/lib/control_pb'; import { InfoServiceClient } from '@gitpod/supervisor-api-grpc/lib/info_grpc_pb'; import { WorkspaceInfoRequest, WorkspaceInfoResponse } from '@gitpod/supervisor-api-grpc/lib/info_pb'; import { NotificationServiceClient } from '@gitpod/supervisor-api-grpc/lib/notification_grpc_pb'; import { NotifyRequest, NotifyResponse, RespondRequest, SubscribeRequest, SubscribeResponse } from '@gitpod/supervisor-api-grpc/lib/notification_pb'; import { PortServiceClient } from '@gitpod/supervisor-api-grpc/lib/port_grpc_pb'; -import { CloseTunnelRequest, RetryAutoExposeRequest, TunnelPortRequest, TunnelVisiblity } from '@gitpod/supervisor-api-grpc/lib/port_pb'; import { StatusServiceClient } from '@gitpod/supervisor-api-grpc/lib/status_grpc_pb'; -import { ContentStatusRequest, ExposedPortInfo, OnPortExposedAction, PortAutoExposure, PortsStatus, PortsStatusRequest, PortsStatusResponse, PortVisibility, TasksStatusRequest, TaskState } from '@gitpod/supervisor-api-grpc/lib/status_pb'; +import { ContentStatusRequest } from '@gitpod/supervisor-api-grpc/lib/status_pb'; import { TerminalServiceClient } from '@gitpod/supervisor-api-grpc/lib/terminal_grpc_pb'; -import { ListenTerminalRequest, ListTerminalsRequest, SetTerminalSizeRequest, ShutdownTerminalRequest, TerminalSize, WriteTerminalRequest } from '@gitpod/supervisor-api-grpc/lib/terminal_pb'; import { TokenServiceClient } from '@gitpod/supervisor-api-grpc/lib/token_grpc_pb'; import { GetTokenRequest } from '@gitpod/supervisor-api-grpc/lib/token_pb'; import * as grpc from '@grpc/grpc-js'; @@ -65,32 +62,6 @@ export class SupervisorConnection { this.port = new PortServiceClient(this.addr, grpc.credentials.createInsecure(), this.clientOptions); this.terminal = new TerminalServiceClient(this.addr, grpc.credentials.createInsecure(), this.clientOptions); } - - ExposePortRequest = ExposePortRequest; - - CloseTunnelRequest = CloseTunnelRequest; - RetryAutoExposeRequest = RetryAutoExposeRequest; - TunnelPortRequest = TunnelPortRequest; - TunnelVisiblity = TunnelVisiblity; - - ExposedPortInfo = ExposedPortInfo; - OnPortExposedAction = OnPortExposedAction; - PortAutoExposure = PortAutoExposure; - PortsStatus = PortsStatus; - PortsStatusRequest = PortsStatusRequest; - PortsStatusResponse = PortsStatusResponse; - PortVisibility = PortVisibility; - TaskState = TaskState; - TasksStatusRequest = TasksStatusRequest; - - GetTokenRequest = GetTokenRequest; - - TerminalSize = TerminalSize; - ListTerminalsRequest = ListTerminalsRequest; - ListenTerminalRequest = ListenTerminalRequest; - WriteTerminalRequest = WriteTerminalRequest; - SetTerminalSizeRequest = SetTerminalSizeRequest; - ShutdownTerminalRequest = ShutdownTerminalRequest; } type UsedGitpodFunction = ['getWorkspace', 'openPort', 'stopWorkspace', 'setWorkspaceTimeout', 'getWorkspaceTimeout', 'getLoggedInUser', 'takeSnapshot', 'controlAdmission', 'sendHeartBeat', 'trackEvent']; @@ -123,13 +94,6 @@ export class GitpodExtensionContext implements vscode.ExtensionContext { this.workspaceContextUrl = vscode.Uri.parse(info.getWorkspaceContextUrl()); } - fork(context: vscode.ExtensionContext): GitpodExtensionContext { - const { devMode, config, supervisor, gitpod, pendingWillCloseSocket, info, owner, user, instanceListener, workspaceOwned, output, ipcHookCli } = this; - return new GitpodExtensionContext( - context, devMode, config, supervisor, gitpod, undefined, pendingWillCloseSocket, info, owner, user, instanceListener, workspaceOwned, output, ipcHookCli - ); - } - get active() { Object.freeze(this.pendingActivate); return Promise.all(this.pendingActivate.map(p => p.catch(console.error))); @@ -206,7 +170,7 @@ export class GitpodExtensionContext implements vscode.ExtensionContext { } export async function createGitpodExtensionContext(context: vscode.ExtensionContext): Promise { - const output = vscode.window.createOutputChannel('Gitpod'); + const output = vscode.window.createOutputChannel('Gitpod Workspace'); const devMode = context.extensionMode === vscode.ExtensionMode.Development || !!process.env['VSCODE_DEV']; const supervisor = new SupervisorConnection(context); diff --git a/extensions/gitpod/src/gitpod-plugin-model.ts b/extensions/gitpod-shared/src/gitpod-plugin-model.ts similarity index 100% rename from extensions/gitpod/src/gitpod-plugin-model.ts rename to extensions/gitpod-shared/src/gitpod-plugin-model.ts diff --git a/extensions/gitpod-desktop/tsconfig.json b/extensions/gitpod-shared/tsconfig.json similarity index 86% rename from extensions/gitpod-desktop/tsconfig.json rename to extensions/gitpod-shared/tsconfig.json index 13d9b9033b070..6a3f5ca88a5d5 100644 --- a/extensions/gitpod-desktop/tsconfig.json +++ b/extensions/gitpod-shared/tsconfig.json @@ -3,6 +3,7 @@ "compilerOptions": { "outDir": "./out", "rootDir": "./src", + "composite": true, "esModuleInterop": true } } diff --git a/extensions/gitpod-web/package.json b/extensions/gitpod-web/package.json index e6624ee6e7614..7875461824d87 100644 --- a/extensions/gitpod-web/package.json +++ b/extensions/gitpod-web/package.json @@ -1,266 +1,444 @@ { - "name": "gitpod-web", - "displayName": "%displayName%", - "description": "%description%", - "publisher": "gitpod", - "version": "0.0.1", - "license": "MIT", - "engines": { - "vscode": "^1.58.2" - }, - "enableProposedApi": true, - "categories": [ - "Other" - ], - "extensionKind": [ - "workspace" - ], - "activationEvents": [ - "*", - "onAuthenticationRequest:gitpod", - "onAuthenticationRequest:github" - ], - "main": "./out/extension.js", - "contributes": { - "commands": [ - { - "command": "gitpod.ports.openBrowser", - "title": "%openBrowser%", - "icon": "$(globe)" - }, - { - "command": "gitpod.ports.retryAutoExpose", - "title": "%retryAutoExpose%", - "icon": "$(refresh)" - }, - { - "command": "gitpod.ports.preview", - "title": "%openPreview%", - "icon": "$(open-preview)" - }, - { - "command": "gitpod.ports.makePrivate", - "title": "%makePrivate%", - "icon": "$(lock)" - }, - { - "command": "gitpod.ports.makePublic", - "title": "%makePublic%", - "icon": "$(unlock)" - }, - { - "command": "gitpod.ports.tunnelNetwork", - "title": "%tunnelNetwork%", - "icon": "$(eye-closed)" - }, - { - "command": "gitpod.ports.tunnelHost", - "title": "%tunnelHost%", - "icon": "$(eye)" - }, - { - "command": "gitpod.extensions.addToConfig", - "title": "%addToConfig%" - }, - { - "command": "gitpod.dev.connectLocalApp", - "title": "%connectLocalApp%" - }, - { - "command": "gitpod.dev.enableForwardedPortsView", - "title": "%enableForwardedPortsView%" - } - ], - "menus": { - "menuBar/home": [ - { - "command": "gitpod.open.context", - "group": "gitpod@10" - }, - { - "command": "gitpod.open.documentation", - "group": "gitpod@20" - }, - { - "command": "gitpod.takeSnapshot", - "group": "gitpod@30", - "when": "gitpod.workspaceOwned == true" - }, - { - "command": "gitpod.shareWorkspace", - "group": "gitpod@40", - "when": "gitpod.workspaceOwned == true && gitpod.workspaceShared == false" - }, - { - "command": "gitpod.stopSharingWorkspace", - "group": "gitpod@40", - "when": "gitpod.workspaceOwned == true && gitpod.workspaceShared == true" - }, - { - "command": "gitpod.stop.ws", - "group": "gitpod@50", - "when": "gitpod.workspaceOwned == true" - }, - { - "command": "gitpod.openInStable", - "group": "gitpod@60" - }, - { - "command": "gitpod.openInInsiders", - "group": "gitpod@70" - } - ], - "accounts/context": [ - { - "command": "gitpod.open.settings", - "group": "navigation@10" - }, - { - "command": "gitpod.open.accessControl", - "group": "navigation@20" - }, - { - "command": "gitpod.upgradeSubscription", - "group": "navigation@30", - "when": "gitpod.workspaceOwned == true" - }, - { - "command": "gitpod.ExtendTimeout", - "group": "navigation@50", - "when": "gitpod.workspaceOwned == true" - } - ], - "menuBar/help": [ - { - "command": "gitpod.open.twitter", - "group": "z_about2@10" - }, - { - "command": "gitpod.open.discord", - "group": "z_about2@20" - }, - { - "command": "gitpod.open.discourse", - "group": "z_about2@30" - }, - { - "command": "gitpod.reportIssue", - "group": "z_about2@40" - } - ], - "extension/context": [ - { - "command": "gitpod.extensions.addToConfig", - "group": "2_configure" - } - ], - "view/item/context": [ - { - "command": "gitpod.ports.tunnelNetwork", - "when": "view == gitpod.workspace && viewItem =~ /host/ && viewItem =~ /tunneled/", - "group": "inline@1" - }, - { - "command": "gitpod.ports.tunnelHost", - "when": "view == gitpod.workspace && viewItem =~ /network/ && viewItem =~ /tunneled/", - "group": "inline@1" - }, - { - "command": "gitpod.ports.makePublic", - "when": "view == gitpod.workspace && viewItem =~ /private/", - "group": "inline@2" - }, - { - "command": "gitpod.ports.makePrivate", - "when": "view == gitpod.workspace && viewItem =~ /public/", - "group": "inline@2" - }, - { - "command": "gitpod.ports.preview", - "when": "view == gitpod.workspace && viewItem =~ /exposed/ || viewItem =~ /tunneled/", - "group": "inline@3" - }, - { - "command": "gitpod.ports.openBrowser", - "when": "view == gitpod.workspace && viewItem =~ /exposed/ || viewItem =~ /tunneled/", - "group": "inline@4" - }, - { - "command": "gitpod.ports.retryAutoExpose", - "when": "view == gitpod.workspace && viewItem =~ /failed/", - "group": "inline@5" - } - ], - "commandPalette": [ - { - "command": "gitpod.ports.preview", - "when": "false" - }, - { - "command": "gitpod.ports.openBrowser", - "when": "false" - }, - { - "command": "gitpod.ports.retryAutoExpose", - "when": "false" - }, - { - "command": "gitpod.ports.makePublic", - "when": "false" - }, - { - "command": "gitpod.ports.makePrivate", - "when": "false" - }, - { - "command": "gitpod.ports.tunnelNetwork", - "when": "false" - }, - { - "command": "gitpod.ports.tunnelHost", - "when": "false" - }, - { - "command": "gitpod.dev.connectLocalApp", - "when": "gitpod.localAppConnected == false" - } - ] - }, - "views": { - "remote": [ - { - "id": "gitpod.workspace", - "name": "Gitpod Workspace" - } - ] - }, - "authentication": [ - { - "id": "gitpod", - "label": "Gitpod" - }, - { - "id": "github", - "label": "GitHub" - } - ] - }, - "scripts": { - "compile": "gulp compile-extension:gitpod-web", - "watch": "gulp watch-extension:gitpod-web", - "vscode:prepublish": "npm run compile" - }, - "devDependencies": { - "@types/node": "^10.12.21", - "@types/node-fetch": "^2.5.8" - }, - "dependencies": { - "node-fetch": "^2.6.1", - "uuid": "^8.3.1", - "vscode-jsonrpc": "^5.0.1", - "vscode-nls": "^5.0.0" - }, - "extensionDependencies": [ - "gitpod.gitpod" - ] + "name": "gitpod-web", + "displayName": "%displayName%", + "description": "%description%", + "publisher": "gitpod", + "version": "0.0.1", + "license": "MIT", + "engines": { + "vscode": "^1.58.2" + }, + "enableProposedApi": true, + "categories": [ + "Other" + ], + "extensionKind": [ + "workspace" + ], + "activationEvents": [ + "*", + "onAuthenticationRequest:gitpod", + "onAuthenticationRequest:github" + ], + "main": "./out/extension.js", + "contributes": { + "commands": [ + { + "command": "gitpod.stop.ws", + "title": "%stopWorkspace%", + "enablement": "gitpod.inWorkspace == true && gitpod.workspaceOwned == true" + }, + { + "command": "gitpod.open.settings", + "title": "%openSettings%", + "enablement": "gitpod.inWorkspace == true" + }, + { + "command": "gitpod.open.accessControl", + "title": "%openAccessControl%", + "enablement": "gitpod.inWorkspace == true" + }, + { + "command": "gitpod.open.context", + "title": "%openContext%", + "enablement": "gitpod.inWorkspace == true" + }, + { + "command": "gitpod.open.dashboard", + "title": "%openDashboard%", + "enablement": "gitpod.inWorkspace == true" + }, + { + "command": "gitpod.open.documentation", + "title": "%openDocumentation%", + "enablement": "gitpod.inWorkspace == true" + }, + { + "command": "gitpod.open.twitter", + "title": "%openTwitter%", + "enablement": "gitpod.inWorkspace == true" + }, + { + "command": "gitpod.open.discord", + "title": "%openDiscord%", + "enablement": "gitpod.inWorkspace == true" + }, + { + "command": "gitpod.open.discourse", + "title": "%openDiscourse%", + "enablement": "gitpod.inWorkspace == true" + }, + { + "command": "gitpod.reportIssue", + "title": "%reportIssue%", + "enablement": "gitpod.inWorkspace == true" + }, + { + "command": "gitpod.upgradeSubscription", + "title": "%upgradeSubscription%", + "enablement": "gitpod.inWorkspace == true && gitpod.workspaceOwned == true" + }, + { + "command": "gitpod.ExtendTimeout", + "title": "%extendTimeout%", + "enablement": "gitpod.inWorkspace == true && gitpod.workspaceOwned == true" + }, + { + "command": "gitpod.takeSnapshot", + "title": "%takeSnapshot%", + "enablement": "gitpod.inWorkspace == true && gitpod.workspaceOwned == true" + }, + { + "command": "gitpod.shareWorkspace", + "title": "%shareWorkspace%", + "enablement": "gitpod.inWorkspace == true && gitpod.workspaceOwned == true && gitpod.workspaceShared == false" + }, + { + "command": "gitpod.stopSharingWorkspace", + "title": "%stopSharingWorkspace%", + "enablement": "gitpod.inWorkspace == true && gitpod.workspaceOwned == true && gitpod.workspaceShared == true" + }, + { + "command": "gitpod.openInStable", + "title": "%openInStable%", + "enablement": "gitpod.inWorkspace == true && gitpod.UIKind == 'web'" + }, + { + "command": "gitpod.openInInsiders", + "title": "%openInInsiders%", + "enablement": "gitpod.inWorkspace == true && gitpod.UIKind == 'web'" + }, + { + "command": "gitpod.openInBrowser", + "title": "%openInBrowser%", + "enablement": "gitpod.inWorkspace == true && gitpod.UIKind == 'desktop'" + }, + { + "command": "gitpod.ports.openBrowser", + "title": "%openBrowser%", + "icon": "$(globe)" + }, + { + "command": "gitpod.ports.retryAutoExpose", + "title": "%retryAutoExpose%", + "icon": "$(refresh)" + }, + { + "command": "gitpod.ports.preview", + "title": "%openPreview%", + "icon": "$(open-preview)" + }, + { + "command": "gitpod.ports.makePrivate", + "title": "%makePrivate%", + "icon": "$(lock)" + }, + { + "command": "gitpod.ports.makePublic", + "title": "%makePublic%", + "icon": "$(unlock)" + }, + { + "command": "gitpod.ports.tunnelNetwork", + "title": "%tunnelNetwork%", + "icon": "$(eye-closed)" + }, + { + "command": "gitpod.ports.tunnelHost", + "title": "%tunnelHost%", + "icon": "$(eye)" + }, + { + "command": "gitpod.extensions.addToConfig", + "title": "%addToConfig%" + }, + { + "command": "gitpod.dev.connectLocalApp", + "title": "%connectLocalApp%" + }, + { + "command": "gitpod.dev.enableForwardedPortsView", + "title": "%enableForwardedPortsView%" + } + ], + "menus": { + "menuBar/home": [ + { + "command": "gitpod.open.context", + "group": "gitpod@10" + }, + { + "command": "gitpod.open.documentation", + "group": "gitpod@20" + }, + { + "command": "gitpod.takeSnapshot", + "group": "gitpod@30", + "when": "gitpod.workspaceOwned == true" + }, + { + "command": "gitpod.shareWorkspace", + "group": "gitpod@40", + "when": "gitpod.workspaceOwned == true && gitpod.workspaceShared == false" + }, + { + "command": "gitpod.stopSharingWorkspace", + "group": "gitpod@40", + "when": "gitpod.workspaceOwned == true && gitpod.workspaceShared == true" + }, + { + "command": "gitpod.stop.ws", + "group": "gitpod@50", + "when": "gitpod.workspaceOwned == true" + }, + { + "command": "gitpod.openInStable", + "group": "gitpod@60" + }, + { + "command": "gitpod.openInInsiders", + "group": "gitpod@70" + } + ], + "accounts/context": [ + { + "command": "gitpod.open.settings", + "group": "navigation@10" + }, + { + "command": "gitpod.open.accessControl", + "group": "navigation@20" + }, + { + "command": "gitpod.upgradeSubscription", + "group": "navigation@30", + "when": "gitpod.workspaceOwned == true" + }, + { + "command": "gitpod.ExtendTimeout", + "group": "navigation@50", + "when": "gitpod.workspaceOwned == true" + } + ], + "menuBar/help": [ + { + "command": "gitpod.open.twitter", + "group": "z_about2@10" + }, + { + "command": "gitpod.open.discord", + "group": "z_about2@20" + }, + { + "command": "gitpod.open.discourse", + "group": "z_about2@30" + }, + { + "command": "gitpod.reportIssue", + "group": "z_about2@40" + } + ], + "extension/context": [ + { + "command": "gitpod.extensions.addToConfig", + "group": "2_configure" + } + ], + "view/item/context": [ + { + "command": "gitpod.ports.tunnelNetwork", + "when": "view == gitpod.workspace && viewItem =~ /host/ && viewItem =~ /tunneled/", + "group": "inline@1" + }, + { + "command": "gitpod.ports.tunnelHost", + "when": "view == gitpod.workspace && viewItem =~ /network/ && viewItem =~ /tunneled/", + "group": "inline@1" + }, + { + "command": "gitpod.ports.makePublic", + "when": "view == gitpod.workspace && viewItem =~ /private/", + "group": "inline@2" + }, + { + "command": "gitpod.ports.makePrivate", + "when": "view == gitpod.workspace && viewItem =~ /public/", + "group": "inline@2" + }, + { + "command": "gitpod.ports.preview", + "when": "view == gitpod.workspace && viewItem =~ /exposed/ || viewItem =~ /tunneled/", + "group": "inline@3" + }, + { + "command": "gitpod.ports.openBrowser", + "when": "view == gitpod.workspace && viewItem =~ /exposed/ || viewItem =~ /tunneled/", + "group": "inline@4" + }, + { + "command": "gitpod.ports.retryAutoExpose", + "when": "view == gitpod.workspace && viewItem =~ /failed/", + "group": "inline@5" + } + ], + "commandPalette": [ + { + "command": "gitpod.ports.preview", + "when": "false" + }, + { + "command": "gitpod.ports.openBrowser", + "when": "false" + }, + { + "command": "gitpod.ports.retryAutoExpose", + "when": "false" + }, + { + "command": "gitpod.ports.makePublic", + "when": "false" + }, + { + "command": "gitpod.ports.makePrivate", + "when": "false" + }, + { + "command": "gitpod.ports.tunnelNetwork", + "when": "false" + }, + { + "command": "gitpod.ports.tunnelHost", + "when": "false" + }, + { + "command": "gitpod.dev.connectLocalApp", + "when": "gitpod.localAppConnected == false" + } + ], + "statusBar/remoteIndicator": [ + { + "command": "gitpod.stop.ws", + "group": "remote_00_gitpod_navigation@10", + "when": "gitpod.inWorkspace == true && gitpod.workspaceOwned == true" + }, + { + "command": "gitpod.open.settings", + "group": "remote_00_gitpod_navigation@20", + "when": "gitpod.inWorkspace == true" + }, + { + "command": "gitpod.open.accessControl", + "group": "remote_00_gitpod_navigation@30", + "when": "gitpod.inWorkspace == true" + }, + { + "command": "gitpod.open.context", + "group": "remote_00_gitpod_navigation@40", + "when": "gitpod.inWorkspace == true" + }, + { + "command": "gitpod.open.dashboard", + "group": "remote_00_gitpod_navigation@50", + "when": "gitpod.inWorkspace == true" + }, + { + "command": "gitpod.open.documentation", + "group": "remote_00_gitpod_navigation@60", + "when": "gitpod.inWorkspace == true" + }, + { + "command": "gitpod.open.twitter", + "group": "remote_00_gitpod_navigation@70", + "when": "gitpod.inWorkspace == true" + }, + { + "command": "gitpod.open.discord", + "group": "remote_00_gitpod_navigation@80", + "when": "gitpod.inWorkspace == true" + }, + { + "command": "gitpod.open.discourse", + "group": "remote_00_gitpod_navigation@81", + "when": "gitpod.inWorkspace == true" + }, + { + "command": "gitpod.reportIssue", + "group": "remote_00_gitpod_navigation@90", + "when": "gitpod.inWorkspace == true" + }, + { + "command": "gitpod.upgradeSubscription", + "group": "remote_00_gitpod_navigation@100", + "when": "gitpod.inWorkspace == true && gitpod.workspaceOwned == true" + }, + { + "command": "gitpod.ExtendTimeout", + "group": "remote_00_gitpod_navigation@110", + "when": "gitpod.inWorkspace == true && gitpod.workspaceOwned == true" + }, + { + "command": "gitpod.takeSnapshot", + "group": "remote_00_gitpod_navigation@120", + "when": "gitpod.inWorkspace == true && gitpod.workspaceOwned == true" + }, + { + "command": "gitpod.shareWorkspace", + "group": "remote_00_gitpod_navigation@130", + "when": "gitpod.inWorkspace == true && gitpod.workspaceOwned == true && gitpod.workspaceShared == false" + }, + { + "command": "gitpod.stopSharingWorkspace", + "group": "remote_00_gitpod_navigation@130", + "when": "gitpod.inWorkspace == true && gitpod.workspaceOwned == true && gitpod.workspaceShared == true" + }, + { + "command": "gitpod.openInStable", + "group": "remote_00_gitpod_navigation@900", + "when": "gitpod.inWorkspace == true && gitpod.UIKind == 'web'" + }, + { + "command": "gitpod.openInInsiders", + "group": "remote_00_gitpod_navigation@1000", + "when": "gitpod.inWorkspace == true && gitpod.UIKind == 'web'" + }, + { + "command": "gitpod.openInBrowser", + "group": "remote_00_gitpod_navigation@1000", + "when": "gitpod.inWorkspace == true && gitpod.UIKind == 'desktop'" + } + ] + }, + "views": { + "remote": [ + { + "id": "gitpod.workspace", + "name": "Gitpod Workspace" + } + ] + }, + "authentication": [ + { + "id": "gitpod", + "label": "Gitpod" + }, + { + "id": "github", + "label": "GitHub" + } + ] + }, + "scripts": { + "vscode:prepublish": "yarn run compile --cwd .." + }, + "devDependencies": { + "@types/node": "^10.12.21", + "@types/node-fetch": "^2.5.8" + }, + "dependencies": { + "gitpod-shared": "0.0.1", + "node-fetch": "^2.6.1", + "uuid": "^8.3.1", + "vscode-jsonrpc": "^5.0.1", + "vscode-nls": "^5.0.0" } +} \ No newline at end of file diff --git a/extensions/gitpod-web/package.nls.json b/extensions/gitpod-web/package.nls.json index 096bb8bdb1ef0..0bcc32a23b07f 100644 --- a/extensions/gitpod-web/package.nls.json +++ b/extensions/gitpod-web/package.nls.json @@ -10,5 +10,23 @@ "addToConfig": "Add to .gitpod.yml", "connectLocalApp": "Developer: Connect to Local Gitpod App", "enableForwardedPortsView": "Developer: Enable Tunneled Ports View", - "retryAutoExpose": "Retry to expose" -} + "retryAutoExpose": "Retry to expose", + "openDashboard": "Gitpod: Open Dashboard", + "openAccessControl": "Gitpod: Open Access Control", + "openSettings": "Gitpod: Open Settings", + "openContext": "Gitpod: Open Context", + "openDocumentation": "Gitpod: Documentation", + "openDiscord": "Gitpod: Open Community Chat", + "openDiscourse": "Gitpod: Open Community Forum", + "openTwitter": "Gitpod: Follow us on Twitter", + "reportIssue": "Gitpod: Report Issue", + "stopWorkspace": "Gitpod: Stop Workspace", + "upgradeSubscription": "Gitpod: Upgrade Subscription", + "extendTimeout": "Gitpod: Extend Workspace Timeout", + "takeSnapshot": "Gitpod: Share Workspace Snapshot", + "shareWorkspace": "Gitpod: Share Running Workspace", + "stopSharingWorkspace": "Gitpod: Stop Sharing Running Workspace", + "openInStable": "Gitpod: Open in VS Code", + "openInInsiders": "Gitpod: Open in VS Code Insiders", + "openInBrowser": "Gitpod: Open in Browser" +} \ No newline at end of file diff --git a/extensions/gitpod-web/src/extension.ts b/extensions/gitpod-web/src/extension.ts index 50be998a0a60f..ce4c350e0374e 100644 --- a/extensions/gitpod-web/src/extension.ts +++ b/extensions/gitpod-web/src/extension.ts @@ -8,6 +8,13 @@ import * as workspaceInstance from '@gitpod/gitpod-protocol/lib/workspace-instance'; import * as grpc from '@grpc/grpc-js'; import * as fs from 'fs'; +import * as shared from 'gitpod-shared/out/extension'; +import { GitpodExtensionContext } from 'gitpod-shared/out/features'; +import { GitpodPluginModel } from 'gitpod-shared/out/gitpod-plugin-model'; +import { GetTokenRequest } from '@gitpod/supervisor-api-grpc/lib/token_pb'; +import { PortsStatus, ExposedPortInfo, PortsStatusRequest, PortsStatusResponse, PortAutoExposure, PortVisibility, OnPortExposedAction } from '@gitpod/supervisor-api-grpc/lib/status_pb'; +import { TunnelVisiblity, TunnelPortRequest, RetryAutoExposeRequest, CloseTunnelRequest } from '@gitpod/supervisor-api-grpc/lib/port_pb'; +import { ExposePortRequest } from '@gitpod/supervisor-api-grpc/lib/control_pb'; import type * as keytarType from 'keytar'; import fetch from 'node-fetch'; import * as path from 'path'; @@ -16,15 +23,14 @@ import * as util from 'util'; import * as vscode from 'vscode'; import * as rpc from 'vscode-jsonrpc'; import type { ServerExtensionHostConnection } from '../../../src/vs/gitpod/node/server-extension-host-connection'; -import type { GitpodExtension, GitpodExtensionContext, GitpodPluginModel, port, status } from 'gitpod/src/gitpod'; import { ThrottledDelayer } from './async'; +let gitpodContext: GitpodExtensionContext | undefined; export async function activate(context: vscode.ExtensionContext) { - const gitpodExtension = vscode.extensions.getExtension('gitpod.gitpod')!.exports; - if (!gitpodExtension) { + gitpodContext = await shared.createContext(context); + if (!gitpodContext) { return; } - const gitpodContext = gitpodExtension.newContext(context); registerAuth(gitpodContext); registerPorts(gitpodContext); @@ -34,7 +40,12 @@ export async function activate(context: vscode.ExtensionContext) { await gitpodContext.active; } -export function deactivate() { } +export function deactivate() { + if (!gitpodContext) { + return; + } + return gitpodContext.dispose(); +} class MessageReader extends rpc.IPCMessageReader { override listen(callback: rpc.DataCallback): void { @@ -136,7 +147,7 @@ export function registerAuth(context: GitpodExtensionContext): void { } } } else { - const getTokenRequest = new context.supervisor.GetTokenRequest(); + const getTokenRequest = new GetTokenRequest(); getTokenRequest.setKind('gitpod'); getTokenRequest.setHost(context.info.getGitpodApi()!.getHost()); const scopes = [ @@ -205,7 +216,7 @@ export function registerAuth(context: GitpodExtensionContext): void { } async function loginGitHub(scopes?: readonly string[]): Promise { - const getTokenRequest = new context.supervisor.GetTokenRequest(); + const getTokenRequest = new GetTokenRequest(); getTokenRequest.setKind('git'); getTokenRequest.setHost('github.com'); if (scopes) { @@ -262,7 +273,7 @@ export function registerAuth(context: GitpodExtensionContext): void { } export class GitpodWorkspacePort extends vscode.TreeItem { - status?: status.PortsStatus.AsObject; + status?: PortsStatus.AsObject; tunnel?: vscode.TunnelDescription; readonly localUrl: string; constructor( @@ -304,8 +315,8 @@ export class GitpodWorkspacePort extends vscode.TreeItem { }); } } - async setTunnelVisibility(visibility: port.TunnelVisiblity): Promise { - const request = new this.context.supervisor.TunnelPortRequest(); + async setTunnelVisibility(visibility: TunnelVisiblity): Promise { + const request = new TunnelPortRequest(); request.setPort(this.portNumber); request.setTargetPort(this.portNumber); request.setVisibility(visibility); @@ -315,16 +326,16 @@ export class GitpodWorkspacePort extends vscode.TreeItem { } } -interface ExposedPort extends status.PortsStatus.AsObject { - exposed: status.ExposedPortInfo.AsObject +interface ExposedPort extends PortsStatus.AsObject { + exposed: ExposedPortInfo.AsObject } -function isExposedPort(port: status.PortsStatus.AsObject | undefined): port is ExposedPort { +function isExposedPort(port: PortsStatus.AsObject | undefined): port is ExposedPort { return !!port?.exposed; } interface ExposedServedPort extends ExposedPort { served: true } -function isExposedServedPort(port: status.PortsStatus.AsObject | undefined): port is ExposedServedPort { +function isExposedServedPort(port: PortsStatus.AsObject | undefined): port is ExposedServedPort { return isExposedPort(port) && !!port.served; } interface ExposedServedGitpodWorkspacePort extends GitpodWorkspacePort { @@ -388,8 +399,8 @@ export class GitpodWorkspaceTreeDataProvider implements vscode.TreeDataProvider< this.update(); } - private portStatus: status.PortsStatusResponse | undefined; - updatePortsStatus(portsStatus: status.PortsStatusResponse): void { + private portStatus: PortsStatusResponse | undefined; + updatePortsStatus(portsStatus: PortsStatusResponse): void { this.portStatus = portsStatus; this.update(); } @@ -426,7 +437,7 @@ export class GitpodWorkspaceTreeDataProvider implements vscode.TreeDataProvider< port.description = 'not served'; port.iconPath = new vscode.ThemeIcon('circle-outline'); } else if (!accessible) { - if (portStatus.getAutoExposure() === this.context.supervisor.PortAutoExposure.FAILED) { + if (portStatus.getAutoExposure() === PortAutoExposure.FAILED) { port.description = 'failed to expose'; port.iconPath = new vscode.ThemeIcon('warning', new vscode.ThemeColor('editorWarning.foreground')); } else { @@ -439,7 +450,7 @@ export class GitpodWorkspaceTreeDataProvider implements vscode.TreeDataProvider< port.description += ` on ${!!port.tunnel.public ? 'all interfaces' : 'localhost'}`; } if (exposed) { - port.description += ` ${exposed.getVisibility() === this.context.supervisor.PortVisibility.PUBLIC ? '(public)' : '(private)'}`; + port.description += ` ${exposed.getVisibility() === PortVisibility.PUBLIC ? '(public)' : '(private)'}`; } port.iconPath = new vscode.ThemeIcon('circle-filled', new vscode.ThemeColor('ports.iconRunningProcessForeground')); } @@ -450,7 +461,7 @@ export class GitpodWorkspaceTreeDataProvider implements vscode.TreeDataProvider< } if (exposed) { port.contextValue = 'exposed-' + port.contextValue; - if (exposed.getVisibility() === this.context.supervisor.PortVisibility.PUBLIC) { + if (exposed.getVisibility() === PortVisibility.PUBLIC) { port.contextValue = 'public-' + port.contextValue; } else { port.contextValue = 'private-' + port.contextValue; @@ -464,7 +475,7 @@ export class GitpodWorkspaceTreeDataProvider implements vscode.TreeDataProvider< port.contextValue = 'host-' + port.contextValue; } } - if (!accessible && portStatus.getAutoExposure() === this.context.supervisor.PortAutoExposure.FAILED) { + if (!accessible && portStatus.getAutoExposure() === PortAutoExposure.FAILED) { port.contextValue = 'failed-' + port.contextValue; } if (isExposedServedGitpodWorkspacePort(port) && !isExposedServedPort(currentStatus)) { @@ -496,7 +507,7 @@ export function registerPorts(context: GitpodExtensionContext): void { (async () => { while (run) { try { - const req = new context.supervisor.PortsStatusRequest(); + const req = new PortsStatusRequest(); req.setObserve(true); const evts = context.supervisor.status.portsStatus(req, context.supervisor.metadata); stopUpdates = evts.cancel.bind(evts); @@ -504,7 +515,7 @@ export function registerPorts(context: GitpodExtensionContext): void { await new Promise((resolve, reject) => { evts.on('end', resolve); evts.on('error', reject); - evts.on('data', (update: status.PortsStatusResponse) => { + evts.on('data', (update: PortsStatusResponse) => { gitpodWorkspaceTreeDataProvider.updatePortsStatus(update); }); }); @@ -544,7 +555,7 @@ export function registerPorts(context: GitpodExtensionContext): void { listener.dispose(); } }); - const request = new context.supervisor.ExposePortRequest(); + const request = new ExposePortRequest(); request.setPort(portNumber); request.setTargetPort(portNumber); await util.promisify(context.supervisor.control.exposePort.bind(context.supervisor.control, request, context.supervisor.metadata, { @@ -563,10 +574,10 @@ export function registerPorts(context: GitpodExtensionContext): void { port.setPortVisibility('public') )); context.subscriptions.push(vscode.commands.registerCommand('gitpod.ports.tunnelNetwork', (port: GitpodWorkspacePort) => - port.setTunnelVisibility(context.supervisor.TunnelVisiblity.NETWORK) + port.setTunnelVisibility(TunnelVisiblity.NETWORK) )); context.subscriptions.push(vscode.commands.registerCommand('gitpod.ports.tunnelHost', async (port: GitpodWorkspacePort) => - port.setTunnelVisibility(context.supervisor.TunnelVisiblity.HOST) + port.setTunnelVisibility(TunnelVisiblity.HOST) )); context.subscriptions.push(vscode.commands.registerCommand('gitpod.ports.preview', (port: GitpodWorkspacePort) => openPreview(port) @@ -575,7 +586,7 @@ export function registerPorts(context: GitpodExtensionContext): void { port.openExternal() )); context.subscriptions.push(vscode.commands.registerCommand('gitpod.ports.retryAutoExpose', async (port: GitpodWorkspacePort) => { - const request = new context.supervisor.RetryAutoExposeRequest(); + const request = new RetryAutoExposeRequest(); request.setPort(port.portNumber); await util.promisify(context.supervisor.port.retryAutoExpose.bind(context.supervisor.port, request, context.supervisor.metadata, { deadline: Date.now() + context.supervisor.deadlines.normal @@ -652,27 +663,27 @@ export function registerPorts(context: GitpodExtensionContext): void { }); } context.subscriptions.push(gitpodWorkspaceTreeDataProvider.onDidExposeServedPort(port => { - if (port.status.exposed.onExposed === context.supervisor.OnPortExposedAction.IGNORE) { + if (port.status.exposed.onExposed === OnPortExposedAction.IGNORE) { return; } - if (port.status.exposed.onExposed === context.supervisor.OnPortExposedAction.OPEN_BROWSER) { + if (port.status.exposed.onExposed === OnPortExposedAction.OPEN_BROWSER) { port.openExternal(); return; } - if (port.status.exposed.onExposed === context.supervisor.OnPortExposedAction.OPEN_PREVIEW) { + if (port.status.exposed.onExposed === OnPortExposedAction.OPEN_PREVIEW) { openPreview(port); return; } - if (port.status.exposed.onExposed === context.supervisor.OnPortExposedAction.NOTIFY) { + if (port.status.exposed.onExposed === OnPortExposedAction.NOTIFY) { showOpenServiceNotification(port); return; } - if (port.status.exposed.onExposed === context.supervisor.OnPortExposedAction.NOTIFY_PRIVATE) { - showOpenServiceNotification(port, port.status.exposed.visibility !== context.supervisor.PortVisibility.PUBLIC); + if (port.status.exposed.onExposed === OnPortExposedAction.NOTIFY_PRIVATE) { + showOpenServiceNotification(port, port.status.exposed.visibility !== PortVisibility.PUBLIC); return; } })); @@ -697,16 +708,16 @@ export function registerPorts(context: GitpodExtensionContext): void { return vscode.workspace.openTunnel(tunnelOptions); })); context.subscriptions.push(vscode.commands.registerCommand('gitpod.api.openTunnel', async (tunnelOptions: vscode.TunnelOptions, _tunnelCreationOptions: vscode.TunnelCreationOptions) => { - const request = new context.supervisor.TunnelPortRequest(); + const request = new TunnelPortRequest(); request.setPort(tunnelOptions.remoteAddress.port); request.setTargetPort(tunnelOptions.localAddressPort || tunnelOptions.remoteAddress.port); - request.setVisibility(!!tunnelOptions?.public ? context.supervisor.TunnelVisiblity.NETWORK : context.supervisor.TunnelVisiblity.HOST); + request.setVisibility(!!tunnelOptions?.public ? TunnelVisiblity.NETWORK : TunnelVisiblity.HOST); await util.promisify(context.supervisor.port.tunnel.bind(context.supervisor.port, request, context.supervisor.metadata, { deadline: Date.now() + context.supervisor.deadlines.normal }))(); })); context.subscriptions.push(vscode.commands.registerCommand('gitpod.api.closeTunnel', async (port: number) => { - const request = new context.supervisor.CloseTunnelRequest(); + const request = new CloseTunnelRequest(); request.setPort(port); await util.promisify(context.supervisor.port.closeTunnel.bind(context.supervisor.port, request, context.supervisor.metadata, { deadline: Date.now() + context.supervisor.deadlines.normal diff --git a/extensions/gitpod-web/tsconfig.json b/extensions/gitpod-web/tsconfig.json index 13d9b9033b070..60d09fdf59579 100644 --- a/extensions/gitpod-web/tsconfig.json +++ b/extensions/gitpod-web/tsconfig.json @@ -4,5 +4,8 @@ "outDir": "./out", "rootDir": "./src", "esModuleInterop": true - } + }, + "references": [ + { "path": "../gitpod-shared" } + ] } diff --git a/extensions/gitpod-web/yarn.lock b/extensions/gitpod-web/yarn.lock deleted file mode 100644 index 659c16f242976..0000000000000 --- a/extensions/gitpod-web/yarn.lock +++ /dev/null @@ -1,79 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@types/node-fetch@^2.5.8": - version "2.5.12" - resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.5.12.tgz#8a6f779b1d4e60b7a57fb6fd48d84fb545b9cc66" - integrity sha512-MKgC4dlq4kKNa/mYrwpKfzQMB5X3ee5U6fSprkKpToBqBmX4nFZL9cW5jl6sWn+xpRJ7ypWh2yyqqr8UUCstSw== - dependencies: - "@types/node" "*" - form-data "^3.0.0" - -"@types/node@*": - version "16.4.1" - resolved "https://registry.yarnpkg.com/@types/node/-/node-16.4.1.tgz#9fad171a5b701613ee8a6f4ece3c88b1034b1b03" - integrity sha512-UW7cbLqf/Wu5XH2RKKY1cHwUNLicIDRLMraYKz+HHAerJ0ZffUEk+fMnd8qU2JaS6cAy0r8tsaf7yqHASf/Y0Q== - -"@types/node@^10.12.21": - version "10.17.60" - resolved "https://registry.yarnpkg.com/@types/node/-/node-10.17.60.tgz#35f3d6213daed95da7f0f73e75bcc6980e90597b" - integrity sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw== - -asynckit@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" - integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= - -combined-stream@^1.0.8: - version "1.0.8" - resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" - integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== - dependencies: - delayed-stream "~1.0.0" - -delayed-stream@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" - integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= - -form-data@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.1.tgz#ebd53791b78356a99af9a300d4282c4d5eb9755f" - integrity sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.8" - mime-types "^2.1.12" - -mime-db@1.48.0: - version "1.48.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.48.0.tgz#e35b31045dd7eada3aaad537ed88a33afbef2d1d" - integrity sha512-FM3QwxV+TnZYQ2aRqhlKBMHxk10lTbMt3bBkMAp54ddrNeVSfcQYOOKuGuy3Ddrm38I04If834fOUSq1yzslJQ== - -mime-types@^2.1.12: - version "2.1.31" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.31.tgz#a00d76b74317c61f9c2db2218b8e9f8e9c5c9e6b" - integrity sha512-XGZnNzm3QvgKxa8dpzyhFTHmpP3l5YNusmne07VUOXxou9CqUqYa/HBy124RqtVh/O2pECas/MOcsDgpilPOPg== - dependencies: - mime-db "1.48.0" - -node-fetch@^2.6.1: - version "2.6.1" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052" - integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw== - -uuid@^8.3.1: - version "8.3.2" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" - integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== - -vscode-jsonrpc@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/vscode-jsonrpc/-/vscode-jsonrpc-5.0.1.tgz#9bab9c330d89f43fc8c1e8702b5c36e058a01794" - integrity sha512-JvONPptw3GAQGXlVV2utDcHx0BiY34FupW/kI6mZ5x06ER5DdPG/tXWMVHjTNULF5uKPOUUD0SaXg5QaubJL0A== - -vscode-nls@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/vscode-nls/-/vscode-nls-5.0.0.tgz#99f0da0bd9ea7cda44e565a74c54b1f2bc257840" - integrity sha512-u0Lw+IYlgbEJFF6/qAqG2d1jQmJl0eyAGJHoAJqr2HT4M2BNuQYSEiSE75f52pXHSJm8AlTjnLLbBFPrdz2hpA== diff --git a/extensions/gitpod/README.md b/extensions/gitpod/README.md index 9a8a56a69c89b..9d85ad0e0aeba 100644 --- a/extensions/gitpod/README.md +++ b/extensions/gitpod/README.md @@ -1,7 +1,5 @@ -# Gitpod integration - -**Notice:** This extension is bundled with Gitpod Code. It can be disabled but not uninstalled. +# Gitpod Desktop integration ## Features -This extension provides support for Gitpod integration. +This extension provides support for Gitpod Desktop integration. diff --git a/extensions/gitpod/extension.webpack.config.js b/extensions/gitpod/extension.webpack.config.js index e18229a8e170a..a513ac5c3b511 100644 --- a/extensions/gitpod/extension.webpack.config.js +++ b/extensions/gitpod/extension.webpack.config.js @@ -7,7 +7,6 @@ 'use strict'; -const path = require('path'); const withDefaults = require('../shared.webpack.config'); module.exports = withDefaults({ diff --git a/extensions/gitpod/package.json b/extensions/gitpod/package.json index 9951fb5bbb40d..00041354fc65e 100644 --- a/extensions/gitpod/package.json +++ b/extensions/gitpod/package.json @@ -1,233 +1,47 @@ { - "name": "gitpod", - "displayName": "%displayName%", - "description": "%description%", - "publisher": "gitpod", - "version": "0.0.14", - "license": "MIT", - "preview": true, - "repository": { - "type": "git", - "url": "https://github.com/gitpod-io/vscode.git" - }, - "engines": { - "vscode": "^1.58.2" - }, - "categories": [ - "Other" - ], - "extensionKind": [ - "workspace" - ], - "activationEvents": [ - "*" - ], - "main": "./out/extension.js", - "contributes": { - "commands": [ - { - "command": "gitpod.stop.ws", - "title": "%stopWorkspace%", - "enablement": "gitpod.inWorkspace == true && gitpod.workspaceOwned == true" - }, - { - "command": "gitpod.open.settings", - "title": "%openSettings%", - "enablement": "gitpod.inWorkspace == true" - }, - { - "command": "gitpod.open.accessControl", - "title": "%openAccessControl%", - "enablement": "gitpod.inWorkspace == true" - }, - { - "command": "gitpod.open.context", - "title": "%openContext%", - "enablement": "gitpod.inWorkspace == true" - }, - { - "command": "gitpod.open.dashboard", - "title": "%openDashboard%", - "enablement": "gitpod.inWorkspace == true" - }, - { - "command": "gitpod.open.documentation", - "title": "%openDocumentation%", - "enablement": "gitpod.inWorkspace == true" - }, - { - "command": "gitpod.open.twitter", - "title": "%openTwitter%", - "enablement": "gitpod.inWorkspace == true" - }, - { - "command": "gitpod.open.discord", - "title": "%openDiscord%", - "enablement": "gitpod.inWorkspace == true" - }, - { - "command": "gitpod.open.discourse", - "title": "%openDiscourse%", - "enablement": "gitpod.inWorkspace == true" - }, - { - "command": "gitpod.reportIssue", - "title": "%reportIssue%", - "enablement": "gitpod.inWorkspace == true" - }, - { - "command": "gitpod.upgradeSubscription", - "title": "%upgradeSubscription%", - "enablement": "gitpod.inWorkspace == true && gitpod.workspaceOwned == true" - }, - { - "command": "gitpod.ExtendTimeout", - "title": "%extendTimeout%", - "enablement": "gitpod.inWorkspace == true && gitpod.workspaceOwned == true" - }, - { - "command": "gitpod.takeSnapshot", - "title": "%takeSnapshot%", - "enablement": "gitpod.inWorkspace == true && gitpod.workspaceOwned == true" - }, - { - "command": "gitpod.shareWorkspace", - "title": "%shareWorkspace%", - "enablement": "gitpod.inWorkspace == true && gitpod.workspaceOwned == true && gitpod.workspaceShared == false" - }, - { - "command": "gitpod.stopSharingWorkspace", - "title": "%stopSharingWorkspace%", - "enablement": "gitpod.inWorkspace == true && gitpod.workspaceOwned == true && gitpod.workspaceShared == true" - }, - { - "command": "gitpod.openInStable", - "title": "%openInStable%", - "enablement": "gitpod.inWorkspace == true && gitpod.UIKind == 'web'" - }, - { - "command": "gitpod.openInInsiders", - "title": "%openInInsiders%", - "enablement": "gitpod.inWorkspace == true && gitpod.UIKind == 'web'" - }, - { - "command": "gitpod.openInBrowser", - "title": "%openInBrowser%", - "enablement": "gitpod.inWorkspace == true && gitpod.UIKind == 'desktop'" - } - ], - "menus": { - "statusBar/remoteIndicator": [ - { - "command": "gitpod.stop.ws", - "group": "remote_00_gitpod_navigation@10", - "when": "gitpod.inWorkspace == true && gitpod.workspaceOwned == true" - }, - { - "command": "gitpod.open.settings", - "group": "remote_00_gitpod_navigation@20", - "when": "gitpod.inWorkspace == true" - }, - { - "command": "gitpod.open.accessControl", - "group": "remote_00_gitpod_navigation@30", - "when": "gitpod.inWorkspace == true" - }, - { - "command": "gitpod.open.context", - "group": "remote_00_gitpod_navigation@40", - "when": "gitpod.inWorkspace == true" - }, - { - "command": "gitpod.open.dashboard", - "group": "remote_00_gitpod_navigation@50", - "when": "gitpod.inWorkspace == true" - }, - { - "command": "gitpod.open.documentation", - "group": "remote_00_gitpod_navigation@60", - "when": "gitpod.inWorkspace == true" - }, - { - "command": "gitpod.open.twitter", - "group": "remote_00_gitpod_navigation@70", - "when": "gitpod.inWorkspace == true" - }, - { - "command": "gitpod.open.discord", - "group": "remote_00_gitpod_navigation@80", - "when": "gitpod.inWorkspace == true" - }, - { - "command": "gitpod.open.discourse", - "group": "remote_00_gitpod_navigation@81", - "when": "gitpod.inWorkspace == true" - }, - { - "command": "gitpod.reportIssue", - "group": "remote_00_gitpod_navigation@90", - "when": "gitpod.inWorkspace == true" - }, - { - "command": "gitpod.upgradeSubscription", - "group": "remote_00_gitpod_navigation@100", - "when": "gitpod.inWorkspace == true && gitpod.workspaceOwned == true" - }, - { - "command": "gitpod.ExtendTimeout", - "group": "remote_00_gitpod_navigation@110", - "when": "gitpod.inWorkspace == true && gitpod.workspaceOwned == true" - }, - { - "command": "gitpod.takeSnapshot", - "group": "remote_00_gitpod_navigation@120", - "when": "gitpod.inWorkspace == true && gitpod.workspaceOwned == true" - }, - { - "command": "gitpod.shareWorkspace", - "group": "remote_00_gitpod_navigation@130", - "when": "gitpod.inWorkspace == true && gitpod.workspaceOwned == true && gitpod.workspaceShared == false" - }, - { - "command": "gitpod.stopSharingWorkspace", - "group": "remote_00_gitpod_navigation@130", - "when": "gitpod.inWorkspace == true && gitpod.workspaceOwned == true && gitpod.workspaceShared == true" - }, - { - "command": "gitpod.openInStable", - "group": "remote_00_gitpod_navigation@900", - "when": "gitpod.inWorkspace == true && gitpod.UIKind == 'web'" - }, - { - "command": "gitpod.openInInsiders", - "group": "remote_00_gitpod_navigation@1000", - "when": "gitpod.inWorkspace == true && gitpod.UIKind == 'web'" - }, - { - "command": "gitpod.openInBrowser", - "group": "remote_00_gitpod_navigation@1000", - "when": "gitpod.inWorkspace == true && gitpod.UIKind == 'desktop'" - } - ] - } - }, - "scripts": { - "compile": "gulp compile-extension:gitpod", - "watch": "gulp watch-extension:gitpod", - "vscode:prepublish": "npm run compile" - }, - "devDependencies": { - "@types/node": "^10.12.21", - "@types/ws": "^7.2.6" - }, - "dependencies": { - "@gitpod/gitpod-protocol": "main", - "@gitpod/supervisor-api-grpc": "main", - "bufferutil": "^4.0.1", - "reconnecting-websocket": "^4.4.0", - "utf-8-validate": "^5.0.2", - "vscode-nls": "^5.0.0", - "ws": "^7.3.1", - "yaml": "^1.10.0" - } + "name": "gitpod-desktop", + "displayName": "%displayName%", + "description": "%description%", + "publisher": "gitpod", + "version": "0.0.16", + "license": "MIT", + "preview": true, + "repository": { + "type": "git", + "url": "https://github.com/gitpod-io/vscode.git" + }, + "engines": { + "vscode": "^1.58.2" + }, + "categories": [ + "Other" + ], + "extensionKind": [ + "ui" + ], + "activationEvents": [ + "*", + "onCommand:gitpod.api.autoTunnel" + ], + "main": "./out/extension.js", + "scripts": { + "compile": "gulp compile-extension:gitpod", + "watch": "gulp watch-extension:gitpod", + "vscode:prepublish": "npm run compile" + }, + "devDependencies": { + "@types/node": "^10.12.21", + "@types/node-fetch": "^2.5.12", + "@types/tmp": "^0.2.1" + }, + "dependencies": { + "@gitpod/local-app-api-grpcweb": "main", + "@improbable-eng/grpc-web-node-http-transport": "^0.14.0", + "node-fetch": "^2.6.1", + "tmp": "^0.2.1", + "vscode-nls": "^5.0.0" + }, + "extensionDependencies": [ + "ms-vscode-remote.remote-ssh" + ] } diff --git a/extensions/gitpod/package.nls.json b/extensions/gitpod/package.nls.json index 3d5c07d335cd1..8646753789e8a 100644 --- a/extensions/gitpod/package.nls.json +++ b/extensions/gitpod/package.nls.json @@ -1,22 +1,4 @@ { "displayName": "Gitpod", - "description": "Gitpod Integration Support", - "openDashboard": "Gitpod: Open Dashboard", - "openAccessControl": "Gitpod: Open Access Control", - "openSettings": "Gitpod: Open Settings", - "openContext": "Gitpod: Open Context", - "openDocumentation": "Gitpod: Documentation", - "openDiscord": "Gitpod: Open Community Chat", - "openDiscourse": "Gitpod: Open Community Forum", - "openTwitter": "Gitpod: Follow us on Twitter", - "reportIssue": "Gitpod: Report Issue", - "stopWorkspace": "Gitpod: Stop Workspace", - "upgradeSubscription": "Gitpod: Upgrade Subscription", - "extendTimeout": "Gitpod: Extend Workspace Timeout", - "takeSnapshot": "Gitpod: Share Workspace Snapshot", - "shareWorkspace": "Gitpod: Share Running Workspace", - "stopSharingWorkspace": "Gitpod: Stop Sharing Running Workspace", - "openInStable": "Gitpod: Open in VS Code", - "openInInsiders": "Gitpod: Open in VS Code Insiders", - "openInBrowser": "Gitpod: Open in Browser" + "description": "Gitpod Support" } diff --git a/extensions/gitpod/src/extension.ts b/extensions/gitpod/src/extension.ts index 260e1021d9aac..bf83c959fcd4f 100644 --- a/extensions/gitpod/src/extension.ts +++ b/extensions/gitpod/src/extension.ts @@ -2,67 +2,410 @@ * Copyright (c) Gitpod. All rights reserved. *--------------------------------------------------------------------------------------------*/ -import * as vscode from 'vscode'; -import { createGitpodExtensionContext, GitpodExtensionContext, registerDefaultLayout, registerNotifications, registerWorkspaceCommands, registerWorkspaceSharing, registerWorkspaceTimeout } from './features'; -import { GitpodExtension } from './gitpod'; +/// + +import { AutoTunnelRequest, ResolveSSHConnectionRequest, ResolveSSHConnectionResponse } from '@gitpod/local-app-api-grpcweb/lib/localapp_pb'; +import { LocalAppClient } from '@gitpod/local-app-api-grpcweb/lib/localapp_pb_service'; +import { NodeHttpTransport } from '@improbable-eng/grpc-web-node-http-transport'; +import * as cp from 'child_process'; +import * as fs from 'fs'; +import * as http from 'http'; +import * as net from 'net'; +import fetch, { Response } from 'node-fetch'; import { performance } from 'perf_hooks'; +import * as tmp from 'tmp'; +import * as util from 'util'; +import * as vscode from 'vscode'; +import { grpc } from '@improbable-eng/grpc-web'; +const streamPipeline = util.promisify(require('stream').pipeline); + +interface SSHConnectionParams { + workspaceId: string + instanceId: string + gitpodHost: string +} + +interface LocalAppConfig { + gitpodHost: string + configFile: string + apiPort: number + pid: number + logPath: string +} + +interface Lock { + value: string + deadline: number +} + +interface LocalAppInstallation { + path: string + etag: string | null +} -let gitpodContext: GitpodExtensionContext | undefined; -export async function activate(context: vscode.ExtensionContext): Promise { - if (typeof vscode.env.remoteName === 'undefined' || context.extension.extensionKind !== vscode.ExtensionKind.Workspace) { - return undefined; +export async function activate(context: vscode.ExtensionContext) { + const output = vscode.window.createOutputChannel('Gitpod'); + + // TODO(ak) commands to show logs and stop local apps + // TODO(ak) auto stop local apps if not used for 3 hours + + function throwIfCancelled(token: vscode.CancellationToken): void { + if (token.isCancellationRequested) { + throw new Error('cancelled'); + } } - gitpodContext = await createGitpodExtensionContext(context); - if (!gitpodContext) { - vscode.commands.executeCommand('setContext', 'gitpod.inWorkspace', false); - return undefined; + const lockPrefix = 'lock/'; + const fastLockTimeout = 30000; + const slowLockTimeout = 300000; + function releaseStaleLocks(): void { + for (const key of context.globalState.keys()) { + if (key.startsWith(lockPrefix)) { + const lock = context.globalState.get(key); + if (typeof lock !== 'object' || performance.now() >= lock.deadline) { + const lockName = key.substr(lockPrefix.length); + output.appendLine(`cancel stale lock: ${lockName}`); + context.globalState.update(key, undefined); + } + } + } + } + let lockCount = 0; + async function withLock(lockName: string, op: (token: vscode.CancellationToken) => Promise, timeout: number): Promise { + output.appendLine(`acquiring lock: ${lockName}`); + const lockKey = lockPrefix + lockName; + const value = vscode.env.sessionId + '/' + lockCount++; + let currentLock: Lock | undefined; + let deadline: number | undefined; + const updateTimeout = 150; + while (currentLock?.value !== value) { + currentLock = context.globalState.get(lockKey); + if (!currentLock) { + deadline = performance.now() + timeout + updateTimeout * 2; + await context.globalState.update(lockKey, { value, deadline }); + } + // TODO(ak) env.globaState.onDidChange instead, see https://github.com/microsoft/vscode/issues/131182 + await new Promise(resolve => setTimeout(resolve, updateTimeout)); + currentLock = context.globalState.get(lockKey); + } + output.appendLine(`acquired lock: ${lockName}`); + const tokenSource = new vscode.CancellationTokenSource(); + let timer = setInterval(() => { + currentLock = context.globalState.get(lockKey); + if (currentLock?.value !== value) { + tokenSource.cancel(); + } + }, updateTimeout); + try { + const result = await op(tokenSource.token); + return result; + } finally { + if (timer) { + clearTimeout(timer); + } + output.appendLine(`released lock: ${lockName}`); + await context.globalState.update(lockKey, undefined); + } } - vscode.commands.executeCommand('setContext', 'gitpod.inWorkspace', true); - registerUsageAnalytics(gitpodContext); - registerWorkspaceCommands(gitpodContext); - registerWorkspaceSharing(gitpodContext); - registerWorkspaceTimeout(gitpodContext); - registerNotifications(gitpodContext); - registerDefaultLayout(gitpodContext); - - await gitpodContext.active; - return { - newContext: childContext => gitpodContext!.fork(childContext) - }; -} -export function deactivate() { - if (!gitpodContext) { - return; + const releaseStaleLocksTimer = setInterval(() => releaseStaleLocks(), fastLockTimeout); + context.subscriptions.push(new vscode.Disposable(() => clearInterval(releaseStaleLocksTimer))); + + function downloadLocalApp(gitpodHost: string): Promise { + let downloadUri = vscode.Uri.parse(gitpodHost); + if (process.platform === 'win32') { + downloadUri = downloadUri.with({ + path: '/static/bin/gitpod-local-companion-windows.exe' + }); + } else if (process.platform === 'darwin') { + downloadUri = downloadUri.with({ + path: '/static/bin/gitpod-local-companion-darwin' + }); + } else { + downloadUri = downloadUri.with({ + path: '/static/bin/gitpod-local-companion-linux' + }); + } + output.appendLine(`fetching the local app from ${downloadUri.toString()}`); + return fetch(downloadUri.toString()); } - return gitpodContext.dispose(); -} -function registerUsageAnalytics(context: GitpodExtensionContext): void { - if (context.devMode && vscode.env.uiKind === vscode.UIKind.Web) { - return; + async function installLocalApp(download: Response, token: vscode.CancellationToken): Promise { + try { + const fileExtension = process.platform === 'win32' ? '.exe' : undefined; + const installationPath = await new Promise((resolve, reject) => + tmp.file({ prefix: 'gitpod-local-companion', postfix: fileExtension }, (err, path) => { + if (err) { + return reject(err); + } + return resolve(path); + }) + ); + throwIfCancelled(token); + output.appendLine(`installing the local app to ${installationPath}`); + throwIfCancelled(token); + await streamPipeline(download.body, fs.createWriteStream(installationPath)); + throwIfCancelled(token); + if (process.platform !== 'win32') { + await fs.promises.chmod(installationPath, '755'); + throwIfCancelled(token); + } + const installation: LocalAppInstallation = { path: installationPath, etag: download.headers.get('etag') }; + output.appendLine(`installing the local app: ${JSON.stringify(installation, undefined, 2)}`); + return installation; + } catch (e) { + output.appendLine(`failed to install the local app: ${e}`); + throw e; + } + } + + async function startLocalApp(gitpodHost: string, installation: LocalAppInstallation, token: vscode.CancellationToken): Promise { + try { + const [configFile, apiPort] = await Promise.all([new Promise((resolve, reject) => + tmp.file({ prefix: 'gitpod_ssh_config' }, (err, path) => { + if (err) { + return reject(err); + } + return resolve(path); + }) + ), new Promise(resolve => { + const server = http.createServer(); + server.listen(0, 'localhost', () => { + resolve((server.address() as net.AddressInfo).port); + server.close(); + }); + })]); + throwIfCancelled(token); + output.appendLine(`starting the local app with the config: ${JSON.stringify({ gitpodHost, configFile, apiPort }, undefined, 2)}`); + const logPath = installation.path + '.log'; + let spawnTimer: NodeJS.Timeout | undefined; + const pid = await new Promise((resolve, reject) => { + const logStream = fs.createWriteStream(logPath); + logStream.on('error', reject); + logStream.on('open', () => { + if (token.isCancellationRequested) { + reject(new Error('cancelled')); + } + const localAppProcess = cp.spawn(installation.path, { + detached: true, + stdio: ['ignore', logStream, logStream], + env: { + ...process.env, + GITPOD_HOST: gitpodHost, + GITPOD_LCA_SSH_CONFIG: configFile, + GITPOD_LCA_API_PORT: String(apiPort), + GITPOD_LCA_AUTO_TUNNEL: String(false), + GITPOD_LCA_AUTH_REDIRECT_URL: `${vscode.env.uriScheme}://${context.extension.id}${authCompletePath}` + } + }); + localAppProcess.on('error', reject); + localAppProcess.on('exit', code => reject(new Error('unexpectedly exit with code: ' + code))); + localAppProcess.unref(); + if (localAppProcess.pid) { + // TODO(ak) when Node.js > 14.17 + // localAppProcess.on('spwan', () => resolve(localAppProcess.pid))); + spawnTimer = setInterval(() => { + try { + process.kill(localAppProcess.pid, 0); + resolve(localAppProcess.pid); + } catch { } + }, 150); + } + }); + }).finally(() => { + if (spawnTimer) { + clearInterval(spawnTimer); + } + }); + output.appendLine(`the local app has been stared: ${JSON.stringify({ pid, log: vscode.Uri.file(logPath).toString() }, undefined, 2)}`); + return { gitpodHost, configFile, apiPort, pid, logPath }; + } catch (e) { + output.appendLine(`failed to start the local app: ${e}`); + throw e; + } + } + + /** + * **Important: it should not call the local app to manage in 30sec** + */ + async function ensureLocalApp(gitpodHost: string, configKey: string, installationKey: string, token: vscode.CancellationToken): Promise { + let download: Response | Error; + try { + download = await downloadLocalApp(gitpodHost); + throwIfCancelled(token); + if (!download.ok) { + download = new Error(`unexpected download response ${download.statusText} (${download.status})`); + } + } catch (e) { + download = e; + } + let config = context.globalState.get(configKey); + let installation = context.globalState.get(installationKey); + if (installation) { + const upgrade = !(download instanceof Error) && { etag: download.headers.get('etag'), url: download.url }; + if (upgrade && upgrade.etag && upgrade.etag !== installation.etag) { + output.appendLine(`the local app is outdated, upgrading: ${JSON.stringify({ installation, upgrade }, undefined, 2)}`); + installation = undefined; + if (config) { + try { + process.kill(config.pid); + } catch (e) { + output.appendLine(`failed to kill the outdated local app (pid: ${config.pid}): ${e}`); + } + } + config = undefined; + } + } + if (config) { + return config; + } + if (installation) { + try { + await fs.promises.access(installation.path, fs.constants.X_OK); + throwIfCancelled(token); + } catch { + installation = undefined; + } + } + if (!installation) { + if (download instanceof Error) { + throw download; + } + installation = await installLocalApp(download, token); + await context.globalState.update(installationKey, installation); + throwIfCancelled(token); + } + config = await startLocalApp(gitpodHost, installation, token); + await context.globalState.update(configKey, config); + throwIfCancelled(token); + return config; } - const properties = { - id: vscode.env.sessionId, - workspaceId: context.info.getWorkspaceId(), - appName: vscode.env.appName, - uiKind: vscode.env.uiKind === vscode.UIKind.Web ? 'web' : 'desktop', - devMode: context.devMode, - }; - function fireEvent(phase: 'start' | 'running' | 'end'): Promise { - return context.gitpod.server.trackEvent({ - event: 'vscode_session', - properties: { - ...properties, - timestamp: performance.now(), - focused: vscode.window.state.focused, - phase, + + async function withLocalApp(gitpodHost: string, op: (client: LocalAppClient, config: LocalAppConfig) => Promise): Promise { + const gitpodAuthority = vscode.Uri.parse(gitpodHost).authority; + const configKey = 'config/' + gitpodAuthority; + const installationKey = 'installation/' + gitpodAuthority; + let restartAttempts = 0; + while (restartAttempts < 5) { + const config = await withLock(gitpodAuthority, token => + ensureLocalApp(gitpodHost, configKey, installationKey, token) + , slowLockTimeout); + const client = new LocalAppClient('http://localhost:' + config.apiPort, { transport: NodeHttpTransport() }); + try { + const result = await op(client, config); + return result; + } catch (e) { + let running: true | Error; + try { + process.kill(config.pid, 0); + running = true; + } catch (e2) { + running = e2; + } + if (running === true && (e.code === grpc.Code.Unavailable || e.code === grpc.Code.Unknown)) { + output.appendLine(`the local app (pid: ${config.pid}) is running, but the api endpoint is not ready: ${e}`); + output.appendLine(`retying again after 1s delay...`); + await new Promise(resolve => setTimeout(resolve, 1000)); + continue; + } + if (running === true) { + throw e; + } + output.appendLine(`failed to access the local app: ${e}`); + output.appendLine(`the local app (pid: ${config.pid}) is not running: ${running}`); + output.appendLine(`restarting the local app...`); + await withLock(gitpodAuthority, async () => { + if (JSON.stringify(context.globalState.get(configKey)) === JSON.stringify(config)) { + await context.globalState.update(configKey, undefined); + } + }, fastLockTimeout); + restartAttempts++; + } + } + throw new Error('failed to access the local app'); + } + + const authCompletePath = '/auth-complete'; + context.subscriptions.push(vscode.window.registerUriHandler({ + handleUri: async uri => { + if (uri.path === authCompletePath) { + output.appendLine('auth completed'); + return; } - }); + output.appendLine('open workspace window: ' + uri.toString()); + const params: SSHConnectionParams = JSON.parse(uri.query); + let resolvedConfig: LocalAppConfig | undefined; + try { + await vscode.window.withProgress({ + location: vscode.ProgressLocation.Notification, + cancellable: false, + title: `Connecting to Gitpod workspace: ${params.workspaceId}` + }, async () => { + const connection = await withLocalApp(params.gitpodHost, (client, config) => { + resolvedConfig = config; + const request = new ResolveSSHConnectionRequest(); + request.setInstanceId(params.instanceId); + request.setWorkspaceId(params.workspaceId); + return new Promise((resolve, reject) => + client.resolveSSHConnection(request, (e, r) => r ? resolve(r) : reject(e)) + ); + }); + + const config = vscode.workspace.getConfiguration('remote.SSH'); + const defaultExtensions = config.get('defaultExtensions') || []; + if (defaultExtensions.indexOf('gitpod.gitpod-remote-ssh') === -1) { + defaultExtensions.unshift('gitpod.gitpod-remote-ssh'); + await config.update('defaultExtensions', defaultExtensions, vscode.ConfigurationTarget.Global); + } + // TODO(ak) notify a user about config file changes? + const gitpodConfigFile = connection.getConfigFile(); + const currentConfigFile = config.get('configFile'); + if (currentConfigFile === gitpodConfigFile) { + // invalidate cached SSH targets from the current config file + await config.update('configFile', undefined, vscode.ConfigurationTarget.Global); + } + await config.update('configFile', gitpodConfigFile, vscode.ConfigurationTarget.Global); + // TODO(ak) ensure that vscode.ssh-remote is installed + await vscode.commands.executeCommand('vscode.openFolder', vscode.Uri.parse(`vscode-remote://ssh-remote+${connection.getHost()}${uri.path || '/'}`), { + forceNewWindow: true + }); + }); + } catch (e) { + const seeLogs = 'See Logs'; + vscode.window.showErrorMessage(`Failed to connect to Gitpod workspace ${params.workspaceId}: ${e}`, seeLogs).then(async result => { + if (result !== seeLogs) { + return; + } + output.show(); + if (resolvedConfig) { + const document = await vscode.workspace.openTextDocument(vscode.Uri.file(resolvedConfig.logPath)); + vscode.window.showTextDocument(document); + } + }); + output.appendLine(`failed to open uri: ${e}`); + throw e; + } + } + })); + + if (vscode.env.remoteName === undefined || context.extension.extensionKind !== vscode.ExtensionKind.UI) { + return; } - fireEvent('start'); - context.subscriptions.push(vscode.window.onDidChangeWindowState(() => fireEvent('running'))); - context.pendingWillCloseSocket.push(() => fireEvent('end')); + + context.subscriptions.push(vscode.commands.registerCommand('gitpod.api.autoTunnel', async (gitpodHost: string, instanceId: string, enabled: boolean) => { + try { + await withLocalApp(gitpodHost, client => { + const request = new AutoTunnelRequest(); + request.setInstanceId(instanceId); + request.setEnabled(enabled); + return new Promise((resolve, reject) => + client.autoTunnel(request, (e, r) => r ? resolve(undefined) : reject(e)) + ); + }); + } catch (e) { + console.error('failed to disable auto tunneling', e); + } + })); } +export function deactivate() { } diff --git a/extensions/gitpod/src/gitpod.d.ts b/extensions/gitpod/src/gitpod.d.ts deleted file mode 100644 index 95746452dfcca..0000000000000 --- a/extensions/gitpod/src/gitpod.d.ts +++ /dev/null @@ -1,20 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Gitpod. All rights reserved. - *--------------------------------------------------------------------------------------------*/ - -import type * as vscode from 'vscode'; -import type { GitpodExtensionContext } from './features'; -export { GitpodExtensionContext }; -export interface GitpodExtension { - newContext(context: vscode.ExtensionContext): GitpodExtensionContext; -} - -import type { GitpodPluginModel } from './gitpod-plugin-model'; -export { GitpodPluginModel }; - -import type * as status from '@gitpod/supervisor-api-grpc/lib/status_pb'; -import type * as port from '@gitpod/supervisor-api-grpc/lib/port_pb'; -import type * as terminal from '@gitpod/supervisor-api-grpc/lib/terminal_pb'; -export { - status, port, terminal -}; diff --git a/extensions/gitpod/yarn.lock b/extensions/gitpod/yarn.lock deleted file mode 100644 index 11d07c40bb62e..0000000000000 --- a/extensions/gitpod/yarn.lock +++ /dev/null @@ -1,445 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@gitpod/gitpod-protocol@main": - version "0.1.5-main.1215" - resolved "https://registry.yarnpkg.com/@gitpod/gitpod-protocol/-/gitpod-protocol-0.1.5-main.1215.tgz#dae24f5f4498a3c0a47ae191bc4c2c80c0fd7ab5" - integrity sha512-8owHtTWENWn8OQYmnV846WijLuP962Lz15k5nG+f1XEX26Ku1i3MhoXIpej0bKI6yA9z72t7XAuX9lK6rAyMIQ== - dependencies: - ajv "^6.5.4" - analytics-node "^4.0.1" - inversify "^5.0.1" - jaeger-client "3.17.2" - js-yaml "^3.10.0" - opentracing "^0.14.4" - prom-client "^10.2.0" - random-number-csprng "^1.0.2" - reconnecting-websocket "^4.4.0" - reflect-metadata "^0.1.10" - uuid "^3.3.3" - vscode-uri "^1.0.1" - vscode-ws-jsonrpc "^0.2.0" - ws "^7.4.6" - -"@gitpod/supervisor-api-grpc@main": - version "0.1.5-main.1153" - resolved "https://registry.yarnpkg.com/@gitpod/supervisor-api-grpc/-/supervisor-api-grpc-0.1.5-main.1153.tgz#fca63edd4603d889f18875fffe1abaf33816004d" - integrity sha512-izCAZ1ZzHnDjPc38a7wwv4GsQoEmbqnoeY+XBbsOpMvBWLJcMcT57UuDFurb7rIOPiFgYMyrzu8dZ1S4WYpc7Q== - dependencies: - "@grpc/grpc-js" "^1.1.5" - google-protobuf "^3.15.8" - -"@grpc/grpc-js@^1.1.5": - version "1.3.6" - resolved "https://registry.yarnpkg.com/@grpc/grpc-js/-/grpc-js-1.3.6.tgz#6e2d17610c2c8df0f6ceab0e1968f563df74b173" - integrity sha512-v7+LQFbqZKmd/Tvf5/j1Xlbq6jXL/4d+gUtm2TNX4QiEC3ELWADmGr2dGlUyLl6aKTuYfsN72vAsO5zmavYkEg== - dependencies: - "@types/node" ">=12.12.47" - -"@segment/loosely-validate-event@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@segment/loosely-validate-event/-/loosely-validate-event-2.0.0.tgz#87dfc979e5b4e7b82c5f1d8b722dfd5d77644681" - integrity sha512-ZMCSfztDBqwotkl848ODgVcAmN4OItEWDCkshcKz0/W6gGSQayuuCtWV/MlodFivAZD793d6UgANd6wCXUfrIw== - dependencies: - component-type "^1.2.1" - join-component "^1.1.0" - -"@types/node@*": - version "14.11.2" - resolved "https://registry.yarnpkg.com/@types/node/-/node-14.11.2.tgz#2de1ed6670439387da1c9f549a2ade2b0a799256" - integrity sha512-jiE3QIxJ8JLNcb1Ps6rDbysDhN4xa8DJJvuC9prr6w+1tIh+QAbYyNF3tyiZNLDBIuBCf4KEcV2UvQm/V60xfA== - -"@types/node@>=12.12.47": - version "14.14.35" - resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.35.tgz#42c953a4e2b18ab931f72477e7012172f4ffa313" - integrity sha512-Lt+wj8NVPx0zUmUwumiVXapmaLUcAk3yPuHCFVXras9k5VT9TdhJqKqGVUQCD60OTMCl0qxJ57OiTL0Mic3Iag== - -"@types/node@^10.12.21": - version "10.17.35" - resolved "https://registry.yarnpkg.com/@types/node/-/node-10.17.35.tgz#58058f29b870e6ae57b20e4f6e928f02b7129f56" - integrity sha512-gXx7jAWpMddu0f7a+L+txMplp3FnHl53OhQIF9puXKq3hDGY/GjH+MF04oWnV/adPSCrbtHumDCFwzq2VhltWA== - -"@types/ws@^7.2.6": - version "7.2.6" - resolved "https://registry.yarnpkg.com/@types/ws/-/ws-7.2.6.tgz#516cbfb818310f87b43940460e065eb912a4178d" - integrity sha512-Q07IrQUSNpr+cXU4E4LtkSIBPie5GLZyyMC1QtQYRLWz701+XcoVygGUZgvLqElq1nU4ICldMYPnexlBsg3dqQ== - dependencies: - "@types/node" "*" - -ajv@^6.5.4: - version "6.12.5" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.5.tgz#19b0e8bae8f476e5ba666300387775fb1a00a4da" - integrity sha512-lRF8RORchjpKG50/WFf8xmg7sgCLFiYNNnqdKflk63whMQcWR5ngGjiSXkL9bjxy6B2npOK2HSMN49jEBMSkag== - dependencies: - fast-deep-equal "^3.1.1" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.4.1" - uri-js "^4.2.2" - -analytics-node@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/analytics-node/-/analytics-node-4.0.1.tgz#f3d20738d4da1e4aa7236d654d9f580e254a7437" - integrity sha512-+zXOOTB+eTRW6R9+pfvPfk1dHraFJzhNnAyZiYJIDGOjHQgfk9qfqgoJX9MfR4qY0J/E1YJ3FBncrLGadTDW1A== - dependencies: - "@segment/loosely-validate-event" "^2.0.0" - axios "^0.21.1" - axios-retry "^3.0.2" - lodash.isstring "^4.0.1" - md5 "^2.2.1" - ms "^2.0.0" - remove-trailing-slash "^0.1.0" - uuid "^3.2.1" - -ansi-color@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/ansi-color/-/ansi-color-0.2.1.tgz#3e75c037475217544ed763a8db5709fa9ae5bf9a" - integrity sha1-PnXAN0dSF1RO12Oo21cJ+prlv5o= - -argparse@^1.0.7: - version "1.0.10" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" - integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== - dependencies: - sprintf-js "~1.0.2" - -axios-retry@^3.0.2: - version "3.1.9" - resolved "https://registry.yarnpkg.com/axios-retry/-/axios-retry-3.1.9.tgz#6c30fc9aeb4519aebaec758b90ef56fa03fe72e8" - integrity sha512-NFCoNIHq8lYkJa6ku4m+V1837TP6lCa7n79Iuf8/AqATAHYB0ISaAS1eyIenDOfHOLtym34W65Sjke2xjg2fsA== - dependencies: - is-retry-allowed "^1.1.0" - -axios@^0.21.1: - version "0.21.1" - resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.1.tgz#22563481962f4d6bde9a76d516ef0e5d3c09b2b8" - integrity sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA== - dependencies: - follow-redirects "^1.10.0" - -bintrees@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/bintrees/-/bintrees-1.0.1.tgz#0e655c9b9c2435eaab68bf4027226d2b55a34524" - integrity sha1-DmVcm5wkNeqraL9AJyJtK1WjRSQ= - -bluebird@^3.3.3: - version "3.7.2" - resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" - integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== - -bufferutil@^4.0.1: - version "4.0.3" - resolved "https://registry.yarnpkg.com/bufferutil/-/bufferutil-4.0.3.tgz#66724b756bed23cd7c28c4d306d7994f9943cc6b" - integrity sha512-yEYTwGndELGvfXsImMBLop58eaGW+YdONi1fNjTINSY98tmMmFijBG6WXgdkfuLNt4imzQNtIE+eBp1PVpMCSw== - dependencies: - node-gyp-build "^4.2.0" - -bufrw@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/bufrw/-/bufrw-1.3.0.tgz#28d6cfdaf34300376836310f5c31d57eeb40c8fa" - integrity sha512-jzQnSbdJqhIltU9O5KUiTtljP9ccw2u5ix59McQy4pV2xGhVLhRZIndY8GIrgh5HjXa6+QJ9AQhOd2QWQizJFQ== - dependencies: - ansi-color "^0.2.1" - error "^7.0.0" - hexer "^1.5.0" - xtend "^4.0.0" - -charenc@0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667" - integrity sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc= - -component-type@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/component-type/-/component-type-1.2.1.tgz#8a47901700238e4fc32269771230226f24b415a9" - integrity sha1-ikeQFwAjjk/DIml3EjAibyS0Fak= - -create-error@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/create-error/-/create-error-0.3.1.tgz#69810245a629e654432bf04377360003a5351a23" - integrity sha1-aYECRaYp5lRDK/BDdzYAA6U1GiM= - -crypt@0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b" - integrity sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs= - -error@7.0.2: - version "7.0.2" - resolved "https://registry.yarnpkg.com/error/-/error-7.0.2.tgz#a5f75fff4d9926126ddac0ea5dc38e689153cb02" - integrity sha1-pfdf/02ZJhJt2sDqXcOOaJFTywI= - dependencies: - string-template "~0.2.1" - xtend "~4.0.0" - -error@^7.0.0: - version "7.2.1" - resolved "https://registry.yarnpkg.com/error/-/error-7.2.1.tgz#eab21a4689b5f684fc83da84a0e390de82d94894" - integrity sha512-fo9HBvWnx3NGUKMvMwB/CBCMMrfEJgbDTVDEkPygA3Bdd3lM1OyCd+rbQ8BwnpF6GdVeOLDNmyL4N5Bg80ZvdA== - dependencies: - string-template "~0.2.1" - -esprima@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" - integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== - -fast-deep-equal@^3.1.1: - version "3.1.3" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" - integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== - -fast-json-stable-stringify@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" - integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== - -follow-redirects@^1.10.0: - version "1.14.1" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.1.tgz#d9114ded0a1cfdd334e164e6662ad02bfd91ff43" - integrity sha512-HWqDgT7ZEkqRzBvc2s64vSZ/hfOceEol3ac/7tKwzuvEyWx3/4UegXh5oBOIotkGsObyk3xznnSRVADBgWSQVg== - -google-protobuf@^3.15.8: - version "3.15.8" - resolved "https://registry.yarnpkg.com/google-protobuf/-/google-protobuf-3.15.8.tgz#5f3948905e4951c867d6bc143f385a80e2a39efe" - integrity sha512-2jtfdqTaSxk0cuBJBtTTWsot4WtR9RVr2rXg7x7OoqiuOKopPrwXpM1G4dXIkLcUNRh3RKzz76C8IOkksZSeOw== - -hexer@^1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/hexer/-/hexer-1.5.0.tgz#b86ce808598e8a9d1892c571f3cedd86fc9f0653" - integrity sha1-uGzoCFmOip0YksVx887dhvyfBlM= - dependencies: - ansi-color "^0.2.1" - minimist "^1.1.0" - process "^0.10.0" - xtend "^4.0.0" - -inversify@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/inversify/-/inversify-5.0.1.tgz#500d709b1434896ce5a0d58915c4a4210e34fb6e" - integrity sha512-Ieh06s48WnEYGcqHepdsJUIJUXpwH5o5vodAX+DK2JA/gjy4EbEcQZxw+uFfzysmKjiLXGYwNG3qDZsKVMcINQ== - -is-buffer@~1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" - integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== - -is-retry-allowed@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz#d778488bd0a4666a3be8a1482b9f2baafedea8b4" - integrity sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg== - -jaeger-client@3.17.2: - version "3.17.2" - resolved "https://registry.yarnpkg.com/jaeger-client/-/jaeger-client-3.17.2.tgz#92cf26752c5c66f3e66adf595cdde2f548cc0804" - integrity sha512-19YloSidmKbrXHgecLWod8eXo7rm2ieUnsfg0ripTFGRCW5v2OWE96Gte4/tOQG/8N+T39VoLU2nMBdjbdMUJg== - dependencies: - node-int64 "^0.4.0" - opentracing "^0.13.0" - thriftrw "^3.5.0" - uuid "^3.2.1" - xorshift "^0.2.0" - -join-component@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/join-component/-/join-component-1.1.0.tgz#b8417b750661a392bee2c2537c68b2a9d4977cd5" - integrity sha1-uEF7dQZho5K+4sJTfGiyqdSXfNU= - -js-yaml@^3.10.0: - version "3.14.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.0.tgz#a7a34170f26a21bb162424d8adacb4113a69e482" - integrity sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A== - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" - -json-schema-traverse@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" - integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== - -lodash.isstring@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/lodash.isstring/-/lodash.isstring-4.0.1.tgz#d527dfb5456eca7cc9bb95d5daeaf88ba54a5451" - integrity sha1-1SfftUVuynzJu5XV2ur4i6VKVFE= - -long@^2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/long/-/long-2.4.0.tgz#9fa180bb1d9500cdc29c4156766a1995e1f4524f" - integrity sha1-n6GAux2VAM3CnEFWdmoZleH0Uk8= - -md5@^2.2.1: - version "2.3.0" - resolved "https://registry.yarnpkg.com/md5/-/md5-2.3.0.tgz#c3da9a6aae3a30b46b7b0c349b87b110dc3bda4f" - integrity sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g== - dependencies: - charenc "0.0.2" - crypt "0.0.2" - is-buffer "~1.1.6" - -minimist@^1.1.0: - version "1.2.5" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" - integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== - -ms@^2.0.0: - version "2.1.3" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" - integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== - -node-gyp-build@^4.2.0: - version "4.2.3" - resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.2.3.tgz#ce6277f853835f718829efb47db20f3e4d9c4739" - integrity sha512-MN6ZpzmfNCRM+3t57PTJHgHyw/h4OWnZ6mR8P5j/uZtqQr46RRuDE/P+g3n0YR/AiYXeWixZZzaip77gdICfRg== - -node-gyp-build@~3.7.0: - version "3.7.0" - resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-3.7.0.tgz#daa77a4f547b9aed3e2aac779eaf151afd60ec8d" - integrity sha512-L/Eg02Epx6Si2NXmedx+Okg+4UHqmaf3TNcxd50SF9NQGcJaON3AtU++kax69XV7YWz4tUspqZSAsVofhFKG2w== - -node-int64@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" - integrity sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs= - -opentracing@^0.13.0: - version "0.13.0" - resolved "https://registry.yarnpkg.com/opentracing/-/opentracing-0.13.0.tgz#6a341442f09d7d866bc11ed03de1e3828e3d6aab" - integrity sha1-ajQUQvCdfYZrwR7QPeHjgo49aqs= - -opentracing@^0.14.4: - version "0.14.4" - resolved "https://registry.yarnpkg.com/opentracing/-/opentracing-0.14.4.tgz#a113408ea740da3a90fde5b3b0011a375c2e4268" - integrity sha512-nNnZDkUNExBwEpb7LZaeMeQgvrlO8l4bgY/LvGNZCR0xG/dGWqHqjKrAmR5GUoYo0FIz38kxasvA1aevxWs2CA== - -process@^0.10.0: - version "0.10.1" - resolved "https://registry.yarnpkg.com/process/-/process-0.10.1.tgz#842457cc51cfed72dc775afeeafb8c6034372725" - integrity sha1-hCRXzFHP7XLcd1r+6vuMYDQ3JyU= - -prom-client@^10.2.0: - version "10.2.3" - resolved "https://registry.yarnpkg.com/prom-client/-/prom-client-10.2.3.tgz#a51bf21c239c954a6c5be4b1361fdd380218bb41" - integrity sha512-Xboq5+TdUwuQtSSDRZRNnb5NprINlgQN999VqUjZxnLKydUNLeIPx6Eiahg6oJua3XBg2TGnh5Cth1s4I6+r7g== - dependencies: - tdigest "^0.1.1" - -punycode@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" - integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== - -random-number-csprng@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/random-number-csprng/-/random-number-csprng-1.0.2.tgz#fcd120e62dffc2c07674c7c3fe01e16b25f73a26" - integrity sha1-/NEg5i3/wsB2dMfD/gHhayX3OiY= - dependencies: - bluebird "^3.3.3" - create-error "^0.3.1" - -reconnecting-websocket@^4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/reconnecting-websocket/-/reconnecting-websocket-4.4.0.tgz#3b0e5b96ef119e78a03135865b8bb0af1b948783" - integrity sha512-D2E33ceRPga0NvTDhJmphEgJ7FUYF0v4lr1ki0csq06OdlxKfugGzN0dSkxM/NfqCxYELK4KcaTOUOjTV6Dcng== - -reflect-metadata@^0.1.10: - version "0.1.13" - resolved "https://registry.yarnpkg.com/reflect-metadata/-/reflect-metadata-0.1.13.tgz#67ae3ca57c972a2aa1642b10fe363fe32d49dc08" - integrity sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg== - -remove-trailing-slash@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/remove-trailing-slash/-/remove-trailing-slash-0.1.1.tgz#be2285a59f39c74d1bce4f825950061915e3780d" - integrity sha512-o4S4Qh6L2jpnCy83ysZDau+VORNvnFw07CKSAymkd6ICNVEPisMyzlc00KlvvicsxKck94SEwhDnMNdICzO+tA== - -sprintf-js@~1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" - integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= - -string-template@~0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/string-template/-/string-template-0.2.1.tgz#42932e598a352d01fc22ec3367d9d84eec6c9add" - integrity sha1-QpMuWYo1LQH8IuwzZ9nYTuxsmt0= - -tdigest@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/tdigest/-/tdigest-0.1.1.tgz#2e3cb2c39ea449e55d1e6cd91117accca4588021" - integrity sha1-Ljyyw56kSeVdHmzZEReszKRYgCE= - dependencies: - bintrees "1.0.1" - -thriftrw@^3.5.0: - version "3.12.0" - resolved "https://registry.yarnpkg.com/thriftrw/-/thriftrw-3.12.0.tgz#30857847755e7f036b2e0a79d11c9f55075539d9" - integrity sha512-4YZvR4DPEI41n4Opwr4jmrLGG4hndxr7387kzRFIIzxHQjarPusH4lGXrugvgb7TtPrfZVTpZCVe44/xUxowEw== - dependencies: - bufrw "^1.3.0" - error "7.0.2" - long "^2.4.0" - -uri-js@^4.2.2: - version "4.4.0" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.0.tgz#aa714261de793e8a82347a7bcc9ce74e86f28602" - integrity sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g== - dependencies: - punycode "^2.1.0" - -utf-8-validate@^5.0.2: - version "5.0.2" - resolved "https://registry.yarnpkg.com/utf-8-validate/-/utf-8-validate-5.0.2.tgz#63cfbccd85dc1f2b66cf7a1d0eebc08ed056bfb3" - integrity sha512-SwV++i2gTD5qh2XqaPzBnNX88N6HdyhQrNNRykvcS0QKvItV9u3vPEJr+X5Hhfb1JC0r0e1alL0iB09rY8+nmw== - dependencies: - node-gyp-build "~3.7.0" - -uuid@^3.2.1, uuid@^3.3.3: - version "3.4.0" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" - integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== - -vscode-jsonrpc@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/vscode-jsonrpc/-/vscode-jsonrpc-5.0.1.tgz#9bab9c330d89f43fc8c1e8702b5c36e058a01794" - integrity sha512-JvONPptw3GAQGXlVV2utDcHx0BiY34FupW/kI6mZ5x06ER5DdPG/tXWMVHjTNULF5uKPOUUD0SaXg5QaubJL0A== - -vscode-nls@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/vscode-nls/-/vscode-nls-5.0.0.tgz#99f0da0bd9ea7cda44e565a74c54b1f2bc257840" - integrity sha512-u0Lw+IYlgbEJFF6/qAqG2d1jQmJl0eyAGJHoAJqr2HT4M2BNuQYSEiSE75f52pXHSJm8AlTjnLLbBFPrdz2hpA== - -vscode-uri@^1.0.1: - version "1.0.8" - resolved "https://registry.yarnpkg.com/vscode-uri/-/vscode-uri-1.0.8.tgz#9769aaececae4026fb6e22359cb38946580ded59" - integrity sha512-obtSWTlbJ+a+TFRYGaUumtVwb+InIUVI0Lu0VBUAPmj2cU5JutEXg3xUE0c2J5Tcy7h2DEKVJBFi+Y9ZSFzzPQ== - -vscode-ws-jsonrpc@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/vscode-ws-jsonrpc/-/vscode-ws-jsonrpc-0.2.0.tgz#5e9c26e10da54a1a235da7d59e74508bbcb8edd9" - integrity sha512-NE9HNRgPjCaPyTJvIudcpyIWPImxwRDtuTX16yks7SAiZgSXigxAiZOvSvVBGmD1G/OMfrFo6BblOtjVR9DdVA== - dependencies: - vscode-jsonrpc "^5.0.0" - -ws@^7.3.1: - version "7.3.1" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.3.1.tgz#d0547bf67f7ce4f12a72dfe31262c68d7dc551c8" - integrity sha512-D3RuNkynyHmEJIpD2qrgVkc9DQ23OrN/moAwZX4L8DfvszsJxpjQuUq3LMx6HoYji9fbIOBY18XWBsAux1ZZUA== - -ws@^7.4.6: - version "7.5.3" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.3.tgz#160835b63c7d97bfab418fc1b8a9fced2ac01a74" - integrity sha512-kQ/dHIzuLrS6Je9+uv81ueZomEwH0qVYstcAQ4/Z93K8zeko9gtAbttJWzoC5ukqXY1PpoouV3+VSOqEAFt5wg== - -xorshift@^0.2.0: - version "0.2.1" - resolved "https://registry.yarnpkg.com/xorshift/-/xorshift-0.2.1.tgz#fcd82267e9351c13f0fb9c73307f25331d29c63a" - integrity sha1-/NgiZ+k1HBPw+5xzMH8lMx0pxjo= - -xtend@^4.0.0, xtend@~4.0.0: - version "4.0.2" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" - integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== - -yaml@^1.10.0: - version "1.10.2" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" - integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== diff --git a/extensions/package.json b/extensions/package.json index 848eaa085f24a..e2ebd6b351d4e 100644 --- a/extensions/package.json +++ b/extensions/package.json @@ -1,4 +1,5 @@ { + "private": true, "name": "vscode-extensions", "version": "0.0.1", "license": "MIT", @@ -7,10 +8,20 @@ "typescript": "4.4.3" }, "scripts": { - "postinstall": "node ./postinstall" + "postinstall": "node ./postinstall", + "compile": "../node_modules/.bin/tsc -b", + "watch": "../node_modules/.bin/tsc -b -w" }, "devDependencies": { "esbuild": "^0.11.12", "vscode-grammar-updater": "^1.0.3" + }, + "workspaces": { + "packages": [ + "gitpod-shared", + "gitpod-remote", + "gitpod-web", + "gitpod" + ] } } diff --git a/extensions/tsconfig.base.json b/extensions/tsconfig.base.json index 5651d57263223..0c444f51597cd 100644 --- a/extensions/tsconfig.base.json +++ b/extensions/tsconfig.base.json @@ -32,6 +32,7 @@ "noImplicitOverride": true, "noUnusedLocals": true, "noUnusedParameters": true, - "forceConsistentCasingInFileNames": true + "forceConsistentCasingInFileNames": true, + "skipLibCheck": true } } diff --git a/extensions/tsconfig.json b/extensions/tsconfig.json new file mode 100644 index 0000000000000..20ade7e7a8ae4 --- /dev/null +++ b/extensions/tsconfig.json @@ -0,0 +1,9 @@ +{ + "files": [], + "references": [ + { "path": "./gitpod-shared" }, + { "path": "./gitpod-remote" }, + { "path": "./gitpod-web" }, + { "path": "./gitpod" } + ] +} diff --git a/extensions/yarn.lock b/extensions/yarn.lock index 69310ebd64ad4..f35f70f726ee8 100644 --- a/extensions/yarn.lock +++ b/extensions/yarn.lock @@ -2,11 +2,251 @@ # yarn lockfile v1 +"@gitpod/gitpod-protocol@main": + version "0.1.5-main.1291" + resolved "https://registry.yarnpkg.com/@gitpod/gitpod-protocol/-/gitpod-protocol-0.1.5-main.1291.tgz#98b6d9c14a8eb0ed852352723f7087787411f61c" + integrity sha512-GmonU20iiu/LMGgI2cSYHdM87zywPq2tZJnhvK20WIxCh4lEgk+PIECdIyJgiUafZ9g4LWkSyrikJfgB0ZVqjQ== + dependencies: + ajv "^6.5.4" + analytics-node "^4.0.1" + inversify "^5.0.1" + jaeger-client "3.17.2" + js-yaml "^3.10.0" + opentracing "^0.14.4" + prom-client "^10.2.0" + random-number-csprng "^1.0.2" + reconnecting-websocket "^4.4.0" + reflect-metadata "^0.1.10" + uuid "^3.3.3" + vscode-uri "^1.0.1" + vscode-ws-jsonrpc "^0.2.0" + ws "^7.4.6" + +"@gitpod/local-app-api-grpcweb@main": + version "0.1.5-main.1291" + resolved "https://registry.yarnpkg.com/@gitpod/local-app-api-grpcweb/-/local-app-api-grpcweb-0.1.5-main.1291.tgz#0ad3b11c38b7db7f026188817d24cbf02ac173f6" + integrity sha512-GkOK0kd63Ji5EDskAxMMtT9NihGCDZuw05dVhCp2E7CdspROURlEQumRQA1RTQE6lDb0O70xNA2DICUnA0ssFg== + dependencies: + "@gitpod/supervisor-api-grpcweb" "0.1.5-main.1291" + "@improbable-eng/grpc-web" "0.14.0" + google-protobuf "^3.17.0" + +"@gitpod/supervisor-api-grpc@main": + version "0.1.5-main.1291" + resolved "https://registry.yarnpkg.com/@gitpod/supervisor-api-grpc/-/supervisor-api-grpc-0.1.5-main.1291.tgz#4b30571d6e5934fefceec8bc9c34506904d05e6c" + integrity sha512-+N6kFrpzB+Ljk2CO/2XZB7btgBdnx5LiiyjSnwJShn9XHju+eao9rzH/ZrChUbDVb/POFnwl1zfsBpISQChV3Q== + dependencies: + "@grpc/grpc-js" "^1.3.6" + google-protobuf "^3.17.3" + +"@gitpod/supervisor-api-grpcweb@0.1.5-main.1291": + version "0.1.5-main.1291" + resolved "https://registry.yarnpkg.com/@gitpod/supervisor-api-grpcweb/-/supervisor-api-grpcweb-0.1.5-main.1291.tgz#5c149cff213b2d515821a2950b5d1f7fe8b0fbc8" + integrity sha512-A7Qyt1KKdZhwHYTWL/7HHkbCQ3Ezd3wnQ0yMRNvhxjtCDvGF+MhAxOVl2lo+OUBPiY8nrt3DgrTbO1Gp+zCfLA== + dependencies: + "@improbable-eng/grpc-web" "^0.14.0" + +"@grpc/grpc-js@^1.3.6": + version "1.3.7" + resolved "https://registry.yarnpkg.com/@grpc/grpc-js/-/grpc-js-1.3.7.tgz#58b687aff93b743aafde237fd2ee9a3259d7f2d8" + integrity sha512-CKQVuwuSPh40tgOkR7c0ZisxYRiN05PcKPW72mQL5y++qd7CwBRoaJZvU5xfXnCJDFBmS3qZGQ71Frx6Ofo2XA== + dependencies: + "@types/node" ">=12.12.47" + +"@improbable-eng/grpc-web-node-http-transport@^0.14.0": + version "0.14.1" + resolved "https://registry.yarnpkg.com/@improbable-eng/grpc-web-node-http-transport/-/grpc-web-node-http-transport-0.14.1.tgz#16c078db2e10aca9a8f7fb235a80b2fa447273a3" + integrity sha512-ZsCTzI1iKUbmQjB5DNZSI5/hvdliuaPpS2h8mVj1QzynL3IFb5NrNnHVHbfcH1wbm26Ka6Z1CrKFGvKLrmbFIg== + +"@improbable-eng/grpc-web@0.14.0": + version "0.14.0" + resolved "https://registry.yarnpkg.com/@improbable-eng/grpc-web/-/grpc-web-0.14.0.tgz#a71c5af471dcef6a2810798f71f93ed8d6ac3817" + integrity sha512-ag1PTMWpBZKGi6GrEcZ4lkU5Qag23Xjo10BmnK9qyx4TMmSVcWmQ3rECirfQzm2uogrM9n1M6xfOpFsJP62ivA== + dependencies: + browser-headers "^0.4.1" + +"@improbable-eng/grpc-web@^0.14.0": + version "0.14.1" + resolved "https://registry.yarnpkg.com/@improbable-eng/grpc-web/-/grpc-web-0.14.1.tgz#f4662f64dc89c0f956a94bb8a3b576556c74589c" + integrity sha512-XaIYuunepPxoiGVLLHmlnVminUGzBTnXr8Wv7khzmLWbNw4TCwJKX09GSMJlKhu/TRk6gms0ySFxewaETSBqgw== + dependencies: + browser-headers "^0.4.1" + +"@segment/loosely-validate-event@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@segment/loosely-validate-event/-/loosely-validate-event-2.0.0.tgz#87dfc979e5b4e7b82c5f1d8b722dfd5d77644681" + integrity sha512-ZMCSfztDBqwotkl848ODgVcAmN4OItEWDCkshcKz0/W6gGSQayuuCtWV/MlodFivAZD793d6UgANd6wCXUfrIw== + dependencies: + component-type "^1.2.1" + join-component "^1.1.0" + +"@types/node-fetch@^2.5.12", "@types/node-fetch@^2.5.8": + version "2.5.12" + resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.5.12.tgz#8a6f779b1d4e60b7a57fb6fd48d84fb545b9cc66" + integrity sha512-MKgC4dlq4kKNa/mYrwpKfzQMB5X3ee5U6fSprkKpToBqBmX4nFZL9cW5jl6sWn+xpRJ7ypWh2yyqqr8UUCstSw== + dependencies: + "@types/node" "*" + form-data "^3.0.0" + +"@types/node@*", "@types/node@>=12.12.47": + version "16.7.1" + resolved "https://registry.yarnpkg.com/@types/node/-/node-16.7.1.tgz#c6b9198178da504dfca1fd0be9b2e1002f1586f0" + integrity sha512-ncRdc45SoYJ2H4eWU9ReDfp3vtFqDYhjOsKlFFUDEn8V1Bgr2RjYal8YT5byfadWIRluhPFU6JiDOl0H6Sl87A== + +"@types/node@^10.12.21": + version "10.17.60" + resolved "https://registry.yarnpkg.com/@types/node/-/node-10.17.60.tgz#35f3d6213daed95da7f0f73e75bcc6980e90597b" + integrity sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw== + +"@types/tmp@^0.2.1": + version "0.2.1" + resolved "https://registry.yarnpkg.com/@types/tmp/-/tmp-0.2.1.tgz#83ecf4ec22a8c218c71db25f316619fe5b986011" + integrity sha512-7cTXwKP/HLOPVgjg+YhBdQ7bMiobGMuoBmrGmqwIWJv8elC6t1DfVc/mn4fD9UE1IjhwmhaQ5pGVXkmXbH0rhg== + +"@types/ws@^7.2.6": + version "7.4.7" + resolved "https://registry.yarnpkg.com/@types/ws/-/ws-7.4.7.tgz#f7c390a36f7a0679aa69de2d501319f4f8d9b702" + integrity sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww== + dependencies: + "@types/node" "*" + +ajv@^6.5.4: + version "6.12.6" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +analytics-node@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/analytics-node/-/analytics-node-4.0.1.tgz#f3d20738d4da1e4aa7236d654d9f580e254a7437" + integrity sha512-+zXOOTB+eTRW6R9+pfvPfk1dHraFJzhNnAyZiYJIDGOjHQgfk9qfqgoJX9MfR4qY0J/E1YJ3FBncrLGadTDW1A== + dependencies: + "@segment/loosely-validate-event" "^2.0.0" + axios "^0.21.1" + axios-retry "^3.0.2" + lodash.isstring "^4.0.1" + md5 "^2.2.1" + ms "^2.0.0" + remove-trailing-slash "^0.1.0" + uuid "^3.2.1" + +ansi-color@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/ansi-color/-/ansi-color-0.2.1.tgz#3e75c037475217544ed763a8db5709fa9ae5bf9a" + integrity sha1-PnXAN0dSF1RO12Oo21cJ+prlv5o= + +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + dependencies: + sprintf-js "~1.0.2" + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= + +axios-retry@^3.0.2: + version "3.1.9" + resolved "https://registry.yarnpkg.com/axios-retry/-/axios-retry-3.1.9.tgz#6c30fc9aeb4519aebaec758b90ef56fa03fe72e8" + integrity sha512-NFCoNIHq8lYkJa6ku4m+V1837TP6lCa7n79Iuf8/AqATAHYB0ISaAS1eyIenDOfHOLtym34W65Sjke2xjg2fsA== + dependencies: + is-retry-allowed "^1.1.0" + +axios@^0.21.1: + version "0.21.1" + resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.1.tgz#22563481962f4d6bde9a76d516ef0e5d3c09b2b8" + integrity sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA== + dependencies: + follow-redirects "^1.10.0" + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +bintrees@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/bintrees/-/bintrees-1.0.1.tgz#0e655c9b9c2435eaab68bf4027226d2b55a34524" + integrity sha1-DmVcm5wkNeqraL9AJyJtK1WjRSQ= + +bluebird@^3.3.3: + version "3.7.2" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" + integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +browser-headers@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/browser-headers/-/browser-headers-0.4.1.tgz#4308a7ad3b240f4203dbb45acedb38dc2d65dd02" + integrity sha512-CA9hsySZVo9371qEHjHZtYxV2cFtVj5Wj/ZHi8ooEsrtm4vOnl9Y9HmyYWk9q+05d7K3rdoAE0j3MVEFVvtQtg== + +bufferutil@^4.0.1: + version "4.0.3" + resolved "https://registry.yarnpkg.com/bufferutil/-/bufferutil-4.0.3.tgz#66724b756bed23cd7c28c4d306d7994f9943cc6b" + integrity sha512-yEYTwGndELGvfXsImMBLop58eaGW+YdONi1fNjTINSY98tmMmFijBG6WXgdkfuLNt4imzQNtIE+eBp1PVpMCSw== + dependencies: + node-gyp-build "^4.2.0" + +bufrw@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/bufrw/-/bufrw-1.3.0.tgz#28d6cfdaf34300376836310f5c31d57eeb40c8fa" + integrity sha512-jzQnSbdJqhIltU9O5KUiTtljP9ccw2u5ix59McQy4pV2xGhVLhRZIndY8GIrgh5HjXa6+QJ9AQhOd2QWQizJFQ== + dependencies: + ansi-color "^0.2.1" + error "^7.0.0" + hexer "^1.5.0" + xtend "^4.0.0" + +charenc@0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667" + integrity sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc= + coffee-script@^1.10.0: version "1.12.7" resolved "https://registry.yarnpkg.com/coffee-script/-/coffee-script-1.12.7.tgz#c05dae0cb79591d05b3070a8433a98c9a89ccc53" integrity sha512-fLeEhqwymYat/MpTPUjSKHVYYl0ec2mOyALEMLmzr5i1isuG+6jfI2j2d5oBO3VIzgUXgBVIcOT9uH1TFxBckw== +combined-stream@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + +component-type@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/component-type/-/component-type-1.2.1.tgz#8a47901700238e4fc32269771230226f24b415a9" + integrity sha1-ikeQFwAjjk/DIml3EjAibyS0Fak= + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + +create-error@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/create-error/-/create-error-0.3.1.tgz#69810245a629e654432bf04377360003a5351a23" + integrity sha1-aYECRaYp5lRDK/BDdzYAA6U1GiM= + +crypt@0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b" + integrity sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs= + cson-parser@^1.3.3: version "1.3.5" resolved "https://registry.yarnpkg.com/cson-parser/-/cson-parser-1.3.5.tgz#7ec675e039145533bf2a6a856073f1599d9c2d24" @@ -14,21 +254,348 @@ cson-parser@^1.3.3: dependencies: coffee-script "^1.10.0" +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= + +error@7.0.2: + version "7.0.2" + resolved "https://registry.yarnpkg.com/error/-/error-7.0.2.tgz#a5f75fff4d9926126ddac0ea5dc38e689153cb02" + integrity sha1-pfdf/02ZJhJt2sDqXcOOaJFTywI= + dependencies: + string-template "~0.2.1" + xtend "~4.0.0" + +error@^7.0.0: + version "7.2.1" + resolved "https://registry.yarnpkg.com/error/-/error-7.2.1.tgz#eab21a4689b5f684fc83da84a0e390de82d94894" + integrity sha512-fo9HBvWnx3NGUKMvMwB/CBCMMrfEJgbDTVDEkPygA3Bdd3lM1OyCd+rbQ8BwnpF6GdVeOLDNmyL4N5Bg80ZvdA== + dependencies: + string-template "~0.2.1" + esbuild@^0.11.12: - version "0.11.12" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.11.12.tgz#8cbe15bcb44212624c3e77c896a835f74dc71c3c" - integrity sha512-c8cso/1RwVj+fbDvLtUgSG4ZJQ0y9Zdrl6Ot/GAjyy4pdMCHaFnDMts5gqFnWRPLajWtEnI+3hlET4R9fVoZng== + version "0.11.23" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.11.23.tgz#c42534f632e165120671d64db67883634333b4b8" + integrity sha512-iaiZZ9vUF5wJV8ob1tl+5aJTrwDczlvGP0JoMmnpC2B0ppiMCu8n8gmy5ZTGl5bcG081XBVn+U+jP+mPFm5T5Q== + +esprima@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + +fast-deep-equal@^3.1.1: + version "3.1.3" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-json-stable-stringify@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== fast-plist@0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/fast-plist/-/fast-plist-0.1.2.tgz#a45aff345196006d406ca6cdcd05f69051ef35b8" integrity sha1-pFr/NFGWAG1AbKbNzQX2kFHvNbg= +follow-redirects@^1.10.0: + version "1.14.2" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.2.tgz#cecb825047c00f5e66b142f90fed4f515dec789b" + integrity sha512-yLR6WaE2lbF0x4K2qE2p9PEXKLDjUjnR/xmjS3wHAYxtlsI9MLLBJUZirAHKzUZDGLxje7w/cXR49WOUo4rbsA== + +form-data@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.1.tgz#ebd53791b78356a99af9a300d4282c4d5eb9755f" + integrity sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= + +glob@^7.1.3: + version "7.1.7" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90" + integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +google-protobuf@^3.17.0, google-protobuf@^3.17.3: + version "3.17.3" + resolved "https://registry.yarnpkg.com/google-protobuf/-/google-protobuf-3.17.3.tgz#f87595073545a77946c8f0b67c302c5f7646d700" + integrity sha512-OVPzcSWIAJ+d5yiHyeaLrdufQtrvaBrF4JQg+z8ynTkbO3uFcujqXszTumqg1cGsAsjkWnI+M5B1xZ19yR4Wyg== + +hexer@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/hexer/-/hexer-1.5.0.tgz#b86ce808598e8a9d1892c571f3cedd86fc9f0653" + integrity sha1-uGzoCFmOip0YksVx887dhvyfBlM= + dependencies: + ansi-color "^0.2.1" + minimist "^1.1.0" + process "^0.10.0" + xtend "^4.0.0" + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +inversify@^5.0.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/inversify/-/inversify-5.1.1.tgz#6fbd668c591337404e005a1946bfe0d802c08730" + integrity sha512-j8grHGDzv1v+8T1sAQ+3boTCntFPfvxLCkNcxB1J8qA0lUN+fAlSyYd+RXKvaPRL4AGyPxViutBEJHNXOyUdFQ== + +is-buffer@~1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" + integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== + +is-retry-allowed@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz#d778488bd0a4666a3be8a1482b9f2baafedea8b4" + integrity sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg== + +jaeger-client@3.17.2: + version "3.17.2" + resolved "https://registry.yarnpkg.com/jaeger-client/-/jaeger-client-3.17.2.tgz#92cf26752c5c66f3e66adf595cdde2f548cc0804" + integrity sha512-19YloSidmKbrXHgecLWod8eXo7rm2ieUnsfg0ripTFGRCW5v2OWE96Gte4/tOQG/8N+T39VoLU2nMBdjbdMUJg== + dependencies: + node-int64 "^0.4.0" + opentracing "^0.13.0" + thriftrw "^3.5.0" + uuid "^3.2.1" + xorshift "^0.2.0" + +join-component@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/join-component/-/join-component-1.1.0.tgz#b8417b750661a392bee2c2537c68b2a9d4977cd5" + integrity sha1-uEF7dQZho5K+4sJTfGiyqdSXfNU= + +js-yaml@^3.10.0: + version "3.14.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" + integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +lodash.isstring@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/lodash.isstring/-/lodash.isstring-4.0.1.tgz#d527dfb5456eca7cc9bb95d5daeaf88ba54a5451" + integrity sha1-1SfftUVuynzJu5XV2ur4i6VKVFE= + +long@^2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/long/-/long-2.4.0.tgz#9fa180bb1d9500cdc29c4156766a1995e1f4524f" + integrity sha1-n6GAux2VAM3CnEFWdmoZleH0Uk8= + +md5@^2.2.1: + version "2.3.0" + resolved "https://registry.yarnpkg.com/md5/-/md5-2.3.0.tgz#c3da9a6aae3a30b46b7b0c349b87b110dc3bda4f" + integrity sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g== + dependencies: + charenc "0.0.2" + crypt "0.0.2" + is-buffer "~1.1.6" + +mime-db@1.49.0: + version "1.49.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.49.0.tgz#f3dfde60c99e9cf3bc9701d687778f537001cbed" + integrity sha512-CIc8j9URtOVApSFCQIF+VBkX1RwXp/oMMOrqdyXSBXq5RWNEsRfyj1kiRnQgmNXmHxPoFIxOroKA3zcU9P+nAA== + +mime-types@^2.1.12: + version "2.1.32" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.32.tgz#1d00e89e7de7fe02008db61001d9e02852670fd5" + integrity sha512-hJGaVS4G4c9TSMYh2n6SQAGrC4RnfU+daP8G7cSCmaqNjiOoUY0VHCMS42pxnQmVF1GWwFhbHWn3RIxCqTmZ9A== + dependencies: + mime-db "1.49.0" + +minimatch@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== + dependencies: + brace-expansion "^1.1.7" + +minimist@^1.1.0: + version "1.2.5" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" + integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== + +ms@^2.0.0: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +node-fetch@^2.6.1: + version "2.6.1" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052" + integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw== + +node-gyp-build@^4.2.0: + version "4.2.3" + resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.2.3.tgz#ce6277f853835f718829efb47db20f3e4d9c4739" + integrity sha512-MN6ZpzmfNCRM+3t57PTJHgHyw/h4OWnZ6mR8P5j/uZtqQr46RRuDE/P+g3n0YR/AiYXeWixZZzaip77gdICfRg== + +node-int64@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" + integrity sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs= + +once@^1.3.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + dependencies: + wrappy "1" + +opentracing@^0.13.0: + version "0.13.0" + resolved "https://registry.yarnpkg.com/opentracing/-/opentracing-0.13.0.tgz#6a341442f09d7d866bc11ed03de1e3828e3d6aab" + integrity sha1-ajQUQvCdfYZrwR7QPeHjgo49aqs= + +opentracing@^0.14.4: + version "0.14.5" + resolved "https://registry.yarnpkg.com/opentracing/-/opentracing-0.14.5.tgz#891fa92cd90a24e64f99bc964370227310926c85" + integrity sha512-XLKtEfHxqrWyF1fzxznsv78w3csW41ucHnjiKnfzZLD5FN8UBDZZL1i4q0FR29zjxXhm+2Hop+5Vr/b8tKIvEg== + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= + +process@^0.10.0: + version "0.10.1" + resolved "https://registry.yarnpkg.com/process/-/process-0.10.1.tgz#842457cc51cfed72dc775afeeafb8c6034372725" + integrity sha1-hCRXzFHP7XLcd1r+6vuMYDQ3JyU= + +prom-client@^10.2.0: + version "10.2.3" + resolved "https://registry.yarnpkg.com/prom-client/-/prom-client-10.2.3.tgz#a51bf21c239c954a6c5be4b1361fdd380218bb41" + integrity sha512-Xboq5+TdUwuQtSSDRZRNnb5NprINlgQN999VqUjZxnLKydUNLeIPx6Eiahg6oJua3XBg2TGnh5Cth1s4I6+r7g== + dependencies: + tdigest "^0.1.1" + +punycode@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== + +random-number-csprng@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/random-number-csprng/-/random-number-csprng-1.0.2.tgz#fcd120e62dffc2c07674c7c3fe01e16b25f73a26" + integrity sha1-/NEg5i3/wsB2dMfD/gHhayX3OiY= + dependencies: + bluebird "^3.3.3" + create-error "^0.3.1" + +reconnecting-websocket@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/reconnecting-websocket/-/reconnecting-websocket-4.4.0.tgz#3b0e5b96ef119e78a03135865b8bb0af1b948783" + integrity sha512-D2E33ceRPga0NvTDhJmphEgJ7FUYF0v4lr1ki0csq06OdlxKfugGzN0dSkxM/NfqCxYELK4KcaTOUOjTV6Dcng== + +reflect-metadata@^0.1.10: + version "0.1.13" + resolved "https://registry.yarnpkg.com/reflect-metadata/-/reflect-metadata-0.1.13.tgz#67ae3ca57c972a2aa1642b10fe363fe32d49dc08" + integrity sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg== + +remove-trailing-slash@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/remove-trailing-slash/-/remove-trailing-slash-0.1.1.tgz#be2285a59f39c74d1bce4f825950061915e3780d" + integrity sha512-o4S4Qh6L2jpnCy83ysZDau+VORNvnFw07CKSAymkd6ICNVEPisMyzlc00KlvvicsxKck94SEwhDnMNdICzO+tA== + +rimraf@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= + +string-template@~0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/string-template/-/string-template-0.2.1.tgz#42932e598a352d01fc22ec3367d9d84eec6c9add" + integrity sha1-QpMuWYo1LQH8IuwzZ9nYTuxsmt0= + +tdigest@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/tdigest/-/tdigest-0.1.1.tgz#2e3cb2c39ea449e55d1e6cd91117accca4588021" + integrity sha1-Ljyyw56kSeVdHmzZEReszKRYgCE= + dependencies: + bintrees "1.0.1" + +thriftrw@^3.5.0: + version "3.12.0" + resolved "https://registry.yarnpkg.com/thriftrw/-/thriftrw-3.12.0.tgz#30857847755e7f036b2e0a79d11c9f55075539d9" + integrity sha512-4YZvR4DPEI41n4Opwr4jmrLGG4hndxr7387kzRFIIzxHQjarPusH4lGXrugvgb7TtPrfZVTpZCVe44/xUxowEw== + dependencies: + bufrw "^1.3.0" + error "7.0.2" + long "^2.4.0" + +tmp@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.1.tgz#8457fc3037dcf4719c251367a1af6500ee1ccf14" + integrity sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ== + dependencies: + rimraf "^3.0.0" + typescript@4.4.3: version "4.4.3" resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.4.3.tgz#bdc5407caa2b109efd4f82fe130656f977a29324" integrity sha512-4xfscpisVgqqDfPaJo5vkd+Qd/ItkoagnHpufr+i2QCHBsNYp+G7UAoyFl8aPtx879u38wPV65rZ8qbGZijalA== +uri-js@^4.2.2: + version "4.4.1" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== + dependencies: + punycode "^2.1.0" + +utf-8-validate@^5.0.2: + version "5.0.5" + resolved "https://registry.yarnpkg.com/utf-8-validate/-/utf-8-validate-5.0.5.tgz#dd32c2e82c72002dc9f02eb67ba6761f43456ca1" + integrity sha512-+pnxRYsS/axEpkrrEpzYfNZGXp0IjC/9RIxwM5gntY4Koi8SHmUGSfxfWqxZdRxrtaoVstuOzUp/rbs3JSPELQ== + dependencies: + node-gyp-build "^4.2.0" + +uuid@^3.2.1, uuid@^3.3.3: + version "3.4.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" + integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== + +uuid@^8.3.1: + version "8.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" + integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== + vscode-grammar-updater@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/vscode-grammar-updater/-/vscode-grammar-updater-1.0.3.tgz#695ccaf0567c6a000005a969cd87ecc3b5c25018" @@ -36,3 +603,50 @@ vscode-grammar-updater@^1.0.3: dependencies: cson-parser "^1.3.3" fast-plist "0.1.2" + +vscode-jsonrpc@^5.0.0, vscode-jsonrpc@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/vscode-jsonrpc/-/vscode-jsonrpc-5.0.1.tgz#9bab9c330d89f43fc8c1e8702b5c36e058a01794" + integrity sha512-JvONPptw3GAQGXlVV2utDcHx0BiY34FupW/kI6mZ5x06ER5DdPG/tXWMVHjTNULF5uKPOUUD0SaXg5QaubJL0A== + +vscode-nls@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/vscode-nls/-/vscode-nls-5.0.0.tgz#99f0da0bd9ea7cda44e565a74c54b1f2bc257840" + integrity sha512-u0Lw+IYlgbEJFF6/qAqG2d1jQmJl0eyAGJHoAJqr2HT4M2BNuQYSEiSE75f52pXHSJm8AlTjnLLbBFPrdz2hpA== + +vscode-uri@^1.0.1: + version "1.0.8" + resolved "https://registry.yarnpkg.com/vscode-uri/-/vscode-uri-1.0.8.tgz#9769aaececae4026fb6e22359cb38946580ded59" + integrity sha512-obtSWTlbJ+a+TFRYGaUumtVwb+InIUVI0Lu0VBUAPmj2cU5JutEXg3xUE0c2J5Tcy7h2DEKVJBFi+Y9ZSFzzPQ== + +vscode-ws-jsonrpc@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/vscode-ws-jsonrpc/-/vscode-ws-jsonrpc-0.2.0.tgz#5e9c26e10da54a1a235da7d59e74508bbcb8edd9" + integrity sha512-NE9HNRgPjCaPyTJvIudcpyIWPImxwRDtuTX16yks7SAiZgSXigxAiZOvSvVBGmD1G/OMfrFo6BblOtjVR9DdVA== + dependencies: + vscode-jsonrpc "^5.0.0" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= + +ws@^7.3.1, ws@^7.4.6: + version "7.5.3" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.3.tgz#160835b63c7d97bfab418fc1b8a9fced2ac01a74" + integrity sha512-kQ/dHIzuLrS6Je9+uv81ueZomEwH0qVYstcAQ4/Z93K8zeko9gtAbttJWzoC5ukqXY1PpoouV3+VSOqEAFt5wg== + +xorshift@^0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/xorshift/-/xorshift-0.2.1.tgz#fcd82267e9351c13f0fb9c73307f25331d29c63a" + integrity sha1-/NgiZ+k1HBPw+5xzMH8lMx0pxjo= + +xtend@^4.0.0, xtend@~4.0.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" + integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== + +yaml@^1.10.0: + version "1.10.2" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" + integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== diff --git a/src/vs/gitpod/node/server.ts b/src/vs/gitpod/node/server.ts index bc43467e1294a..d1e6b35d5ac41 100644 --- a/src/vs/gitpod/node/server.ts +++ b/src/vs/gitpod/node/server.ts @@ -75,7 +75,7 @@ main({ port, main: path.join(APP_ROOT, 'out', 'vs', 'gitpod', 'browser', 'workbench', 'workbench.html'), mainDev: path.join(APP_ROOT, 'out', 'vs', 'gitpod', 'browser', 'workbench', 'workbench-dev.html'), - skipExtensions: new Set(['vscode.github-authentication', 'gitpod.gitpod-remote-ssh', 'gitpod.gitpod-desktop']), + skipExtensions: new Set(['vscode.github-authentication', 'gitpod.gitpod-shared', 'gitpod.gitpod-remote-ssh', 'gitpod.gitpod-desktop']), configure: services => { services.set(IExtensionManagementCLIService, new SyncDescriptor(ExtensionManagementCLIService)); },