@gitpod/gitpod-protocol 0.1.5-se-workspace-for-teams.18 → 0.1.5-se-init.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (230) hide show
  1. package/data/gitpod-schema.json +9 -2
  2. package/lib/accounting-protocol.d.ts +0 -1
  3. package/lib/accounting-protocol.d.ts.map +1 -1
  4. package/lib/accounting-protocol.js +10 -11
  5. package/lib/accounting-protocol.js.map +1 -1
  6. package/lib/admin-protocol.d.ts +8 -2
  7. package/lib/admin-protocol.d.ts.map +1 -1
  8. package/lib/admin-protocol.js +2 -13
  9. package/lib/admin-protocol.js.map +1 -1
  10. package/lib/analytics.d.ts +1 -0
  11. package/lib/analytics.d.ts.map +1 -1
  12. package/lib/context-url.js +4 -4
  13. package/lib/context-url.js.map +1 -1
  14. package/lib/context-url.spec.js +45 -48
  15. package/lib/context-url.spec.js.map +1 -1
  16. package/lib/email-protocol.js +4 -4
  17. package/lib/email-protocol.js.map +1 -1
  18. package/lib/encryption/container-module.js +4 -4
  19. package/lib/encryption/container-module.js.map +1 -1
  20. package/lib/encryption/encryption-engine.js +19 -20
  21. package/lib/encryption/encryption-engine.js.map +1 -1
  22. package/lib/encryption/encryption-engine.spec.js +29 -36
  23. package/lib/encryption/encryption-engine.spec.js.map +1 -1
  24. package/lib/encryption/encryption-service.js +29 -43
  25. package/lib/encryption/encryption-service.js.map +1 -1
  26. package/lib/encryption/key-provider.js +25 -30
  27. package/lib/encryption/key-provider.js.map +1 -1
  28. package/lib/env.d.ts +0 -1
  29. package/lib/env.d.ts.map +1 -1
  30. package/lib/env.js +12 -14
  31. package/lib/env.js.map +1 -1
  32. package/lib/gitpod-file-parser.js +25 -41
  33. package/lib/gitpod-file-parser.js.map +1 -1
  34. package/lib/gitpod-file-parser.spec.js +116 -116
  35. package/lib/gitpod-file-parser.spec.js.map +1 -1
  36. package/lib/gitpod-service.d.ts +24 -9
  37. package/lib/gitpod-service.d.ts.map +1 -1
  38. package/lib/gitpod-service.js +149 -295
  39. package/lib/gitpod-service.js.map +1 -1
  40. package/lib/ide-protocol.d.ts +81 -0
  41. package/lib/ide-protocol.d.ts.map +1 -0
  42. package/lib/ide-protocol.js +8 -0
  43. package/lib/ide-protocol.js.map +1 -0
  44. package/lib/index.d.ts +2 -0
  45. package/lib/index.d.ts.map +1 -1
  46. package/lib/index.js +2 -0
  47. package/lib/index.js.map +1 -1
  48. package/lib/messaging/browser/connection.d.ts +3 -3
  49. package/lib/messaging/browser/connection.d.ts.map +1 -1
  50. package/lib/messaging/browser/connection.js +172 -35
  51. package/lib/messaging/browser/connection.js.map +1 -1
  52. package/lib/messaging/browser/window-connection.js +35 -55
  53. package/lib/messaging/browser/window-connection.js.map +1 -1
  54. package/lib/messaging/client-call-metrics.js +17 -18
  55. package/lib/messaging/client-call-metrics.js.map +1 -1
  56. package/lib/messaging/connection-error-handler.js +11 -23
  57. package/lib/messaging/connection-error-handler.js.map +1 -1
  58. package/lib/messaging/error.d.ts +1 -1
  59. package/lib/messaging/error.d.ts.map +1 -1
  60. package/lib/messaging/error.js +2 -2
  61. package/lib/messaging/error.js.map +1 -1
  62. package/lib/messaging/handler.d.ts +10 -0
  63. package/lib/messaging/handler.d.ts.map +1 -1
  64. package/lib/messaging/node/connection.d.ts +0 -10
  65. package/lib/messaging/node/connection.d.ts.map +1 -1
  66. package/lib/messaging/node/connection.js +11 -49
  67. package/lib/messaging/node/connection.js.map +1 -1
  68. package/lib/messaging/proxy-factory.d.ts +2 -0
  69. package/lib/messaging/proxy-factory.d.ts.map +1 -1
  70. package/lib/messaging/proxy-factory.js +73 -160
  71. package/lib/messaging/proxy-factory.js.map +1 -1
  72. package/lib/oss-allowlist.d.ts +14 -0
  73. package/lib/oss-allowlist.d.ts.map +1 -0
  74. package/lib/oss-allowlist.js +8 -0
  75. package/lib/oss-allowlist.js.map +1 -0
  76. package/lib/permission.d.ts +1 -2
  77. package/lib/permission.d.ts.map +1 -1
  78. package/lib/permission.js +12 -13
  79. package/lib/permission.js.map +1 -1
  80. package/lib/plans.d.ts +1 -1
  81. package/lib/plans.d.ts.map +1 -1
  82. package/lib/plans.js +38 -57
  83. package/lib/plans.js.map +1 -1
  84. package/lib/protocol.d.ts +11 -7
  85. package/lib/protocol.d.ts.map +1 -1
  86. package/lib/protocol.js +44 -114
  87. package/lib/protocol.js.map +1 -1
  88. package/lib/snapshot-url.d.ts +14 -0
  89. package/lib/snapshot-url.d.ts.map +1 -0
  90. package/lib/snapshot-url.js +26 -0
  91. package/lib/snapshot-url.js.map +1 -0
  92. package/lib/snapshot-url.spec.d.ts +7 -0
  93. package/lib/snapshot-url.spec.d.ts.map +1 -0
  94. package/lib/snapshot-url.spec.js +41 -0
  95. package/lib/snapshot-url.spec.js.map +1 -0
  96. package/lib/team-subscription-protocol.js +13 -13
  97. package/lib/team-subscription-protocol.js.map +1 -1
  98. package/lib/teams-projects-protocol.d.ts +11 -1
  99. package/lib/teams-projects-protocol.d.ts.map +1 -1
  100. package/lib/teams-projects-protocol.js +4 -15
  101. package/lib/teams-projects-protocol.js.map +1 -1
  102. package/lib/util/analytics.js +25 -32
  103. package/lib/util/analytics.js.map +1 -1
  104. package/lib/util/async-iterator.js +55 -133
  105. package/lib/util/async-iterator.js.map +1 -1
  106. package/lib/util/cancelable.js +17 -59
  107. package/lib/util/cancelable.js.map +1 -1
  108. package/lib/util/date-time.js +8 -8
  109. package/lib/util/date-time.js.map +1 -1
  110. package/lib/util/deferred.js +10 -12
  111. package/lib/util/deferred.js.map +1 -1
  112. package/lib/util/disposable.js +26 -39
  113. package/lib/util/disposable.js.map +1 -1
  114. package/lib/util/event.js +58 -74
  115. package/lib/util/event.js.map +1 -1
  116. package/lib/util/garbage-collected-cache.d.ts +1 -0
  117. package/lib/util/garbage-collected-cache.d.ts.map +1 -1
  118. package/lib/util/garbage-collected-cache.js +26 -46
  119. package/lib/util/garbage-collected-cache.js.map +1 -1
  120. package/lib/util/generate-workspace-id.js +11 -67
  121. package/lib/util/generate-workspace-id.js.map +1 -1
  122. package/lib/util/generate-workspace-id.spec.js +34 -79
  123. package/lib/util/generate-workspace-id.spec.js.map +1 -1
  124. package/lib/util/gitpod-cookie.d.ts +20 -0
  125. package/lib/util/gitpod-cookie.d.ts.map +1 -0
  126. package/lib/util/gitpod-cookie.js +44 -0
  127. package/lib/util/gitpod-cookie.js.map +1 -0
  128. package/lib/util/gitpod-host-url.d.ts +1 -0
  129. package/lib/util/gitpod-host-url.d.ts.map +1 -1
  130. package/lib/util/gitpod-host-url.js +96 -103
  131. package/lib/util/gitpod-host-url.js.map +1 -1
  132. package/lib/util/gitpod-host-url.spec.js +87 -135
  133. package/lib/util/gitpod-host-url.spec.js.map +1 -1
  134. package/lib/util/grpc.js +3 -3
  135. package/lib/util/grpc.js.map +1 -1
  136. package/lib/util/jaeger-client-types.d.ts +68 -0
  137. package/lib/util/jaeger-client-types.d.ts.map +1 -0
  138. package/lib/util/jaeger-client-types.js +8 -0
  139. package/lib/util/jaeger-client-types.js.map +1 -0
  140. package/lib/util/logging.d.ts +32 -32
  141. package/lib/util/logging.d.ts.map +1 -1
  142. package/lib/util/logging.js +51 -125
  143. package/lib/util/logging.js.map +1 -1
  144. package/lib/util/make-link.js +2 -2
  145. package/lib/util/make-link.js.map +1 -1
  146. package/lib/util/parse-workspace-id.d.ts +10 -0
  147. package/lib/util/parse-workspace-id.d.ts.map +1 -1
  148. package/lib/util/parse-workspace-id.js +31 -7
  149. package/lib/util/parse-workspace-id.js.map +1 -1
  150. package/lib/util/parse-workspace-id.spec.d.ts +4 -0
  151. package/lib/util/parse-workspace-id.spec.d.ts.map +1 -1
  152. package/lib/util/parse-workspace-id.spec.js +123 -84
  153. package/lib/util/parse-workspace-id.spec.js.map +1 -1
  154. package/lib/util/queue.js +16 -55
  155. package/lib/util/queue.js.map +1 -1
  156. package/lib/util/queue.spec.js +144 -288
  157. package/lib/util/queue.spec.js.map +1 -1
  158. package/lib/util/repeat.d.ts +15 -0
  159. package/lib/util/repeat.d.ts.map +1 -0
  160. package/lib/util/repeat.js +55 -0
  161. package/lib/util/repeat.js.map +1 -0
  162. package/lib/util/safe-promise.js +9 -12
  163. package/lib/util/safe-promise.js.map +1 -1
  164. package/lib/util/semaphore.js +15 -46
  165. package/lib/util/semaphore.js.map +1 -1
  166. package/lib/util/skip-if.js +6 -6
  167. package/lib/util/skip-if.js.map +1 -1
  168. package/lib/util/timeutil.js +16 -16
  169. package/lib/util/timeutil.js.map +1 -1
  170. package/lib/util/timeutil.spec.js +21 -24
  171. package/lib/util/timeutil.spec.js.map +1 -1
  172. package/lib/util/tracing.d.ts +50 -5
  173. package/lib/util/tracing.d.ts.map +1 -1
  174. package/lib/util/tracing.js +171 -63
  175. package/lib/util/tracing.js.map +1 -1
  176. package/lib/util/tracing.spec.d.ts +7 -0
  177. package/lib/util/tracing.spec.d.ts.map +1 -0
  178. package/lib/util/tracing.spec.js +121 -0
  179. package/lib/util/tracing.spec.js.map +1 -0
  180. package/lib/util/workspace-port-authentication.js +2 -2
  181. package/lib/util/workspace-port-authentication.js.map +1 -1
  182. package/lib/workspace-cluster.d.ts +11 -1
  183. package/lib/workspace-cluster.d.ts.map +1 -1
  184. package/lib/workspace-cluster.js +3 -3
  185. package/lib/workspace-cluster.js.map +1 -1
  186. package/lib/workspace-instance.d.ts +4 -2
  187. package/lib/workspace-instance.d.ts.map +1 -1
  188. package/lib/wsready.js +1 -1
  189. package/package.json +20 -12
  190. package/pkg-yarn.lock +12 -7
  191. package/src/accounting-protocol.ts +1 -3
  192. package/src/admin-protocol.ts +9 -3
  193. package/src/analytics.ts +2 -0
  194. package/src/email-protocol.ts +1 -1
  195. package/src/env.ts +0 -1
  196. package/src/gitpod-service.ts +27 -14
  197. package/src/ide-protocol.ts +92 -0
  198. package/src/index.ts +2 -0
  199. package/src/messaging/browser/connection.ts +176 -10
  200. package/src/messaging/error.ts +2 -2
  201. package/src/messaging/handler.ts +12 -0
  202. package/src/messaging/node/connection.ts +1 -45
  203. package/src/messaging/proxy-factory.ts +10 -4
  204. package/src/oss-allowlist.ts +15 -0
  205. package/src/permission.ts +0 -1
  206. package/src/protocol.ts +13 -8
  207. package/src/snapshot-url.spec.ts +25 -0
  208. package/src/snapshot-url.ts +27 -0
  209. package/src/team-subscription-protocol.ts +1 -1
  210. package/src/teams-projects-protocol.ts +14 -2
  211. package/src/util/garbage-collected-cache.ts +7 -1
  212. package/src/util/gitpod-cookie.ts +39 -0
  213. package/src/util/gitpod-host-url.ts +9 -5
  214. package/src/util/grpc.ts +3 -3
  215. package/src/util/jaeger-client-types.ts +102 -0
  216. package/src/util/logging.ts +36 -41
  217. package/src/util/parse-workspace-id.spec.ts +21 -1
  218. package/src/util/parse-workspace-id.ts +32 -6
  219. package/src/util/repeat.ts +45 -0
  220. package/src/util/tracing.spec.ts +83 -0
  221. package/src/util/tracing.ts +157 -18
  222. package/src/workspace-cluster.ts +8 -1
  223. package/src/workspace-instance.ts +12 -6
  224. package/src/wsready.ts +1 -1
  225. package/lib/util/repeater.d.ts +0 -22
  226. package/lib/util/repeater.d.ts.map +0 -1
  227. package/lib/util/repeater.js +0 -118
  228. package/lib/util/repeater.js.map +0 -1
  229. package/src/util/jaeger-client.d.ts +0 -105
  230. package/src/util/repeater.ts +0 -49
@@ -7,58 +7,14 @@
7
7
 
8
8
  import * as ws from "ws";
9
9
  import * as http from "http";
10
- import * as https from "https";
11
- import * as url from "url";
12
10
  import * as net from "net";
13
- import { MessageConnection } from "vscode-jsonrpc";
14
- import { createWebSocketConnection, IWebSocket } from "vscode-ws-jsonrpc";
11
+ import { IWebSocket } from "vscode-ws-jsonrpc";
15
12
  import { log } from '../../util/logging';
16
13
 
17
- export interface IServerOptions {
18
- readonly server: http.Server | https.Server;
19
- readonly path?: string;
20
- matches?(request: http.IncomingMessage): boolean;
21
- }
22
-
23
- export function createServerWebSocketConnection(options: IServerOptions, onConnect: (connection: MessageConnection) => void): void {
24
- openJsonRpcSocket(options, socket => {
25
- onConnect(createWebSocketConnection(socket, console));
26
- });
27
- }
28
-
29
- export function openJsonRpcSocket(options: IServerOptions, onOpen: (socket: IWebSocket) => void): void {
30
- openSocket(options, socket => {
31
- const webSocket = toIWebSocket(socket);
32
- onOpen(webSocket);
33
- });
34
- }
35
-
36
14
  export interface OnOpen {
37
15
  (webSocket: ws, request: http.IncomingMessage, socket: net.Socket, head: Buffer): void;
38
16
  }
39
17
 
40
- export function openSocket(options: IServerOptions, onOpen: OnOpen): void {
41
- const wss = new ws.Server({
42
- noServer: true,
43
- perMessageDeflate: {
44
- // don't compress if a message is less than 256kb
45
- threshold: 256 * 1024
46
- }
47
- });
48
- options.server.on('upgrade', (request: http.IncomingMessage, socket: net.Socket, head: Buffer) => {
49
- const pathname = request.url ? url.parse(request.url).pathname : undefined;
50
- if (options.path && pathname === options.path || options.matches && options.matches(request)) {
51
- wss.handleUpgrade(request, socket, head, webSocket => {
52
- if (webSocket.readyState === webSocket.OPEN) {
53
- onOpen(webSocket, request, socket, head);
54
- } else {
55
- webSocket.on('open', () => onOpen(webSocket, request, socket, head));
56
- }
57
- });
58
- }
59
- });
60
- }
61
-
62
18
  export function toIWebSocket(webSocket: ws) {
63
19
  let sendsAfterOpen = 0;
64
20
  return <IWebSocket>{
@@ -105,13 +105,19 @@ export class JsonRpcProxyFactory<T extends object> implements ProxyHandler<T> {
105
105
  this.connectionPromiseResolve = resolve
106
106
  );
107
107
  this.connectionPromise.then(connection => {
108
- connection.onClose(() =>
109
- this.onDidCloseConnectionEmitter.fire(undefined)
110
- );
111
- this.onDidOpenConnectionEmitter.fire(undefined);
108
+ connection.onClose(() => this.fireConnectionClosed());
109
+ this.fireConnectionOpened();
112
110
  });
113
111
  }
114
112
 
113
+ fireConnectionClosed() {
114
+ this.onDidCloseConnectionEmitter.fire(undefined)
115
+ }
116
+
117
+ fireConnectionOpened() {
118
+ this.onDidOpenConnectionEmitter.fire(undefined);
119
+ }
120
+
115
121
  /**
116
122
  * Connect a MessageConnection to the factory.
117
123
  *
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Copyright (c) 2021 Gitpod GmbH. All rights reserved.
3
+ * Licensed under the GNU Affero General Public License (AGPL).
4
+ * See License-AGPL.txt in the project root for license information.
5
+ */
6
+
7
+ export interface OssAllowList {
8
+ /**
9
+ * A string that identifies a GitHub/GitLab/Bitbucket identity of the form "<host>/<profilename>"
10
+ * E.g., "github.com/geropl"
11
+ */
12
+ identity: string,
13
+
14
+ deleted?: boolean,
15
+ }
package/src/permission.ts CHANGED
@@ -16,7 +16,6 @@ export const Permissions = {
16
16
  "admin-api": undefined,
17
17
  "ide-settings": undefined,
18
18
  "new-workspace-cluster": undefined,
19
- "teams-and-projects": undefined,
20
19
  };
21
20
  export type PermissionName = keyof (typeof Permissions);
22
21
  export const Roles = {"devops": undefined, "viewer": undefined, "admin": undefined };
package/src/protocol.ts CHANGED
@@ -114,6 +114,8 @@ export interface EmailNotificationSettings {
114
114
 
115
115
  export type IDESettings = {
116
116
  defaultIde?: string
117
+ useDesktopIde?: boolean
118
+ defaultDesktopIde?: string
117
119
  }
118
120
 
119
121
  export interface UserPlatform {
@@ -135,14 +137,6 @@ export interface UserPlatform {
135
137
  }
136
138
 
137
139
  export interface UserFeatureSettings {
138
- /**
139
- * This field is used as marker to grant users a free trial for using private repositories,
140
- * independent of any subscription or Chargebee.
141
- * - it is set when the user uses their first private repo
142
- * - whether the trial is expired or not is juged by the UserService
143
- */
144
- privateRepoTrialStartDate?: string;
145
-
146
140
  /**
147
141
  * Permanent feature flags are added to each and every workspace instance
148
142
  * this user starts.
@@ -378,11 +372,16 @@ export interface PendingGithubEvent {
378
372
  export interface Snapshot {
379
373
  id: string;
380
374
  creationTime: string;
375
+ availableTime?: string;
381
376
  originalWorkspaceId: string;
382
377
  bucketId: string;
383
378
  layoutData?: string;
379
+ state: SnapshotState;
380
+ message?: string;
384
381
  }
385
382
 
383
+ export type SnapshotState = 'pending' | 'available' | 'error';
384
+
386
385
  export interface LayoutData {
387
386
  workspaceId: string;
388
387
  lastUpdatedTime: string;
@@ -559,6 +558,9 @@ export interface WorkspaceConfig {
559
558
  github?: GithubAppConfig;
560
559
  vscode?: VSCodeConfig;
561
560
 
561
+ /** deprecated. Enabled by default **/
562
+ experimentalNetwork?: boolean;
563
+
562
564
  /**
563
565
  * Where the config object originates from.
564
566
  *
@@ -682,6 +684,8 @@ export interface PortConfig {
682
684
  port: number;
683
685
  onOpen?: PortOnOpen;
684
686
  visibility?: PortVisibility;
687
+ description?: string;
688
+ name?: string;
685
689
  }
686
690
  export namespace PortConfig {
687
691
  export function is(config: any): config is PortConfig {
@@ -769,6 +773,7 @@ export namespace ExternalImageConfigFile {
769
773
 
770
774
  export interface WorkspaceContext {
771
775
  title: string;
776
+ /** This contains the URL portion of the contextURL (which might contain other modifiers as well). It's optional because it's not set for older workspaces. */
772
777
  normalizedContextURL?: string;
773
778
  forceCreateNewWorkspace?: boolean;
774
779
  forceImageBuild?: boolean;
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Copyright (c) 2020 Gitpod GmbH. All rights reserved.
3
+ * Licensed under the GNU Affero General Public License (AGPL).
4
+ * See License-AGPL.txt in the project root for license information.
5
+ */
6
+
7
+ import { suite, test } from "mocha-typescript"
8
+ import * as chai from "chai"
9
+ import { SnapshotUrl } from ".";
10
+
11
+ const expect = chai.expect
12
+
13
+ @suite class TestSnapshotUrlParser {
14
+
15
+ @test public testPositive() {
16
+ const actual = SnapshotUrl.parse("workspaces/c362d434-6faa-4ce0-9ad4-91b4a87c4abe/3f0556f7-4afa-11e9-98d5-52f8983b9279.tar@gitpod-prodcopy-user-e1e28f18-0354-4a5d-b6b4-8879a2ff73fd");
17
+
18
+ expect(actual).to.deep.equal(<SnapshotUrl>{
19
+ bucketId: "gitpod-prodcopy-user-e1e28f18-0354-4a5d-b6b4-8879a2ff73fd",
20
+ filename: "3f0556f7-4afa-11e9-98d5-52f8983b9279.tar",
21
+ fullPath: "workspaces/c362d434-6faa-4ce0-9ad4-91b4a87c4abe/3f0556f7-4afa-11e9-98d5-52f8983b9279.tar",
22
+ });
23
+ }
24
+ }
25
+ module.exports = new TestSnapshotUrlParser() // Only to circumvent no usage warning :-/
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Copyright (c) 2021 Gitpod GmbH. All rights reserved.
3
+ * Licensed under the GNU Affero General Public License (AGPL).
4
+ * See License-AGPL.txt in the project root for license information.
5
+ */
6
+
7
+ export interface SnapshotUrl {
8
+ bucketId: string;
9
+ fullPath: string;
10
+ filename: string;
11
+ }
12
+ export namespace SnapshotUrl {
13
+ export function parse(url: string): SnapshotUrl {
14
+ const parts = url.split("@");
15
+ if (parts.length !== 2) {
16
+ throw new Error(`cannot parse snapshot URL: ${url}`);
17
+ }
18
+ const [fullPath, bucketId] = parts;
19
+
20
+ const pathParts = fullPath.split("/");
21
+ if (pathParts.length < 1) {
22
+ throw new Error(`cannot parse snapshot URL: ${url}`);
23
+ }
24
+ const filename = pathParts[pathParts.length - 1];
25
+ return { bucketId, fullPath, filename };
26
+ }
27
+ }
@@ -4,7 +4,7 @@
4
4
  * See License-AGPL.txt in the project root for license information.
5
5
  */
6
6
 
7
- import uuidv4 = require("uuid/v4");
7
+ import { v4 as uuidv4 } from 'uuid';
8
8
  import { Subscription } from "./accounting-protocol";
9
9
 
10
10
  export interface TeamSubscription {
@@ -5,20 +5,27 @@
5
5
  */
6
6
 
7
7
  import { PrebuiltWorkspaceState } from "./protocol";
8
- import uuidv4 = require("uuid/v4");
8
+ import { v4 as uuidv4 } from 'uuid';
9
+ import { DeepPartial } from "./util/deep-partial";
9
10
 
10
11
  export interface ProjectConfig {
11
12
  '.gitpod.yml': string;
12
13
  }
13
14
 
15
+ export interface ProjectSettings {
16
+ useIncrementalPrebuilds?: boolean;
17
+ }
18
+
14
19
  export interface Project {
15
20
  id: string;
16
21
  name: string;
22
+ slug?: string;
17
23
  cloneUrl: string;
18
24
  teamId?: string;
19
25
  userId?: string;
20
26
  appInstallationId: string;
21
27
  config?: ProjectConfig;
28
+ settings?: ProjectSettings;
22
29
  creationTime: string;
23
30
  /** This is a flag that triggers the HARD DELETION of this entity */
24
31
  deleted?: boolean;
@@ -54,14 +61,18 @@ export namespace Project {
54
61
  }
55
62
  }
56
63
 
64
+ export type PartialProject = DeepPartial<Project> & Pick<Project, 'id'>;
65
+
57
66
  export interface PrebuildWithStatus {
58
67
  info: PrebuildInfo;
59
68
  status: PrebuiltWorkspaceState;
69
+ error?: string;
60
70
  }
61
71
 
62
72
  export interface PrebuildInfo {
63
73
  id: string;
64
74
  buildWorkspaceId: string;
75
+ basedOnPrebuildId?: string;
65
76
 
66
77
  teamId?: string;
67
78
  userId?: string;
@@ -91,9 +102,9 @@ export namespace PrebuildInfo {
91
102
  }
92
103
 
93
104
  export interface StartPrebuildResult {
105
+ prebuildId: string;
94
106
  wsid: string;
95
107
  done: boolean;
96
- didFinish?: boolean;
97
108
  }
98
109
 
99
110
  export interface Team {
@@ -101,6 +112,7 @@ export interface Team {
101
112
  name: string;
102
113
  slug: string;
103
114
  creationTime: string;
115
+ markedDeleted?: boolean;
104
116
  /** This is a flag that triggers the HARD DELETION of this entity */
105
117
  deleted?: boolean;
106
118
  }
@@ -4,6 +4,8 @@
4
4
  * See License-AGPL.txt in the project root for license information.
5
5
  */
6
6
 
7
+ import { repeat } from "./repeat";
8
+
7
9
 
8
10
  interface CacheEntry<T> {
9
11
  key: string;
@@ -41,8 +43,12 @@ export class GarbageCollectedCache<T> {
41
43
  return entry.value;
42
44
  }
43
45
 
46
+ public delete(key: string) {
47
+ this.store.delete(key);
48
+ }
49
+
44
50
  protected regularlyCollectGarbage() {
45
- setInterval(() => this.collectGarbage(), this.gcIntervalSeconds * 1000);
51
+ repeat(() => this.collectGarbage(), this.gcIntervalSeconds * 1000);
46
52
  }
47
53
 
48
54
  protected collectGarbage() {
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Copyright (c) 2021 Gitpod GmbH. All rights reserved.
3
+ * Licensed under the GNU Affero General Public License (AGPL).
4
+ * See License-AGPL.txt in the project root for license information.
5
+ */
6
+ import * as cookie from 'cookie';
7
+
8
+
9
+ /**
10
+ * This cookie indicates whether the connected client is a Gitpod user (= "has logged in within the last year") or not.
11
+ * This is used by "gitpod.io" and "www.gitpod.io" to display different content/buttons.
12
+ */
13
+ export const NAME = "gitpod-user";
14
+ export const VALUE = "true";
15
+
16
+ /**
17
+ * @param domain The domain the Gitpod installation is installed onto
18
+ * @returns
19
+ */
20
+ export function options(domain: string): cookie.CookieSerializeOptions {
21
+ // Reference: https://developer.mozilla.org/en-US/docs/Web/HTTP/Cookies
22
+ return {
23
+ path: "/", // make sure we send the cookie to all sub-pages
24
+ httpOnly: false,
25
+ secure: false,
26
+ maxAge: 60 * 60 * 24 * 365, // 1 year
27
+ sameSite: "lax", // default: true. "Lax" needed to ensure we see cookies from users that neavigate to gitpod.io from external sites
28
+ domain: `.${domain}`, // explicilty include subdomains to not only cover "gitpod.io", but also "www.gitpod.io" or workspaces
29
+ };
30
+ };
31
+
32
+ export function generateCookie(domain: string): string {
33
+ return cookie.serialize(NAME, VALUE, options(domain));
34
+ };
35
+
36
+ export function isPresent(cookies: string): boolean {
37
+ // needs to match the old (gitpod-user=loggedIn) and new (gitpod-user=true) values to ensure a smooth transition during rollout.
38
+ return !!cookies.match(`${NAME}=`);
39
+ };
@@ -85,23 +85,27 @@ export class GitpodHostUrl {
85
85
  }
86
86
 
87
87
  asDashboard(): GitpodHostUrl {
88
- return this.with(url => ({ pathname: '/workspaces/' }));
88
+ return this.with(url => ({ pathname: '/' }));
89
89
  }
90
90
 
91
91
  asLogin(): GitpodHostUrl {
92
- return this.with(url => ({ pathname: '/login/' }));
92
+ return this.with(url => ({ pathname: '/login' }));
93
93
  }
94
94
 
95
95
  asUpgradeSubscription(): GitpodHostUrl {
96
- return this.with(url => ({ pathname: '/plans/' }));
96
+ return this.with(url => ({ pathname: '/plans' }));
97
97
  }
98
98
 
99
99
  asAccessControl(): GitpodHostUrl {
100
- return this.with(url => ({ pathname: '/access-control/' }));
100
+ return this.with(url => ({ pathname: '/integrations' }));
101
101
  }
102
102
 
103
103
  asSettings(): GitpodHostUrl {
104
- return this.with(url => ({ pathname: '/settings/' }));
104
+ return this.with(url => ({ pathname: '/settings' }));
105
+ }
106
+
107
+ asPreferences(): GitpodHostUrl {
108
+ return this.with(url => ({ pathname: '/preferences' }));
105
109
  }
106
110
 
107
111
  asGraphQLApi(): GitpodHostUrl {
package/src/util/grpc.ts CHANGED
@@ -5,9 +5,9 @@
5
5
  */
6
6
 
7
7
  export const defaultGRPCOptions = {
8
- "grpc.keepalive_timeout_ms": 1000,
9
- "grpc.keepalive_time_ms": 5000,
10
- "grpc.http2.min_time_between_pings_ms": 1000,
8
+ "grpc.keepalive_timeout_ms": 10000,
9
+ "grpc.keepalive_time_ms": 60000,
10
+ "grpc.http2.min_time_between_pings_ms": 10000,
11
11
  "grpc.keepalive_permit_without_calls": 1,
12
12
  "grpc-node.max_session_memory": 50,
13
13
  "grpc.max_reconnect_backoff_ms": 5000,
@@ -0,0 +1,102 @@
1
+ /**
2
+ * Copyright (c) 2020 Gitpod GmbH. All rights reserved.
3
+ * Licensed under the GNU Affero General Public License (AGPL).
4
+ * See License-AGPL.txt in the project root for license information.
5
+ */
6
+
7
+ import { opentracing } from "jaeger-client";
8
+
9
+ // Type definitions for jaeger-client which are not exported by @types/jaeger-client
10
+ // Project: https://github.com/uber/jaeger-client-node
11
+ // Definitions by: Julian Steger <https://github.com/julianste>
12
+ // Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
13
+
14
+ export interface TracingConfig {
15
+ serviceName?: string;
16
+ disable?: boolean;
17
+ sampler?: SamplerConfig;
18
+ reporter?: ReporterConfig;
19
+ }
20
+
21
+ export interface TracingOptions {
22
+ reporter?: Reporter;
23
+ metrics?: MetricsFactory;
24
+ logger?: Logger;
25
+ tags?: any;
26
+ }
27
+
28
+ export interface ReporterConfig {
29
+ logSpans?: boolean;
30
+ agentHost?: string;
31
+ agentPort?: number;
32
+ flushIntervalMs?: number;
33
+ }
34
+
35
+ export interface SamplerConfig {
36
+ type: string;
37
+ param: number;
38
+ host?: string;
39
+ port?: number;
40
+ refreshIntervalMs?: number;
41
+ }
42
+
43
+ export interface Logger {
44
+ info(msg: string): void;
45
+ error(msg: string): void;
46
+ }
47
+
48
+ export interface Reporter {
49
+ report(span: opentracing.Span): void;
50
+ close(callback?: () => void): void;
51
+ setProcess(serviceName: string, tags: any): void;
52
+ }
53
+
54
+ export interface MetricsFactory {
55
+ createCounter(name: string, tags: any): Counter;
56
+ createTimer(name: string, tags: any): Timer;
57
+ createGauge(name: string, tags: any): Gauge;
58
+ }
59
+
60
+ // Counter tracks the number of times an event has occurred
61
+ export interface Counter {
62
+ // Adds the given value to the counter.
63
+ increment(delta: number): void;
64
+ }
65
+
66
+ // Timer tracks how long an operation took and also computes percentiles.
67
+ export interface Timer {
68
+ // Records the time passed in.
69
+ record(value: number): void;
70
+ }
71
+
72
+ // Gauge returns instantaneous measurements of something as an int64 value
73
+ export interface Gauge {
74
+ // Update the gauge to the value passed in.
75
+ update(value: number): void;
76
+ }
77
+
78
+ // export function initTracer(
79
+ // tracingConfig: TracingConfig,
80
+ // tracingOptions: TracingOptions,
81
+ // ): opentracing.Tracer;
82
+
83
+ // export function initTracerFromEnv(
84
+ // tracingConfig: TracingConfig,
85
+ // tracingOptions: TracingOptions,
86
+ // ): opentracing.Tracer;
87
+
88
+ export interface SamplingDecision {
89
+ sample: boolean;
90
+ retryable: boolean;
91
+ tags: any;
92
+ }
93
+
94
+ // added by TypeFox
95
+ export interface Sampler {
96
+ name(): string
97
+ isSampled(operation: string, tags: any): boolean;
98
+ onCreateSpan(span: opentracing.Span): SamplingDecision;
99
+ onSetOperationName(span: opentracing.Span, operationName: string): SamplingDecision;
100
+ onSetTag(span: opentracing.Span, key: string, value: any): SamplingDecision;
101
+ close(callback: () => void): void
102
+ }
@@ -30,66 +30,66 @@ export interface LogPayload {
30
30
  };
31
31
 
32
32
  export namespace log {
33
- export function error(context: LogContext, message: string, error: Error, payload: LogPayload): void;
34
- export function error(context: LogContext, message: string, error: Error): void;
33
+ export function error(context: LogContext, message: string, error: any, payload: LogPayload): void;
34
+ export function error(context: LogContext, message: string, error: any): void;
35
35
  export function error(context: LogContext, message: string, payload: LogPayload): void;
36
36
  export function error(context: LogContext, message: string): void;
37
- export function error(context: LogContext, error: Error, payload: LogPayload): void;
38
- export function error(context: LogContext, error: Error): void;
39
- export function error(message: string, error: Error, payload: LogPayload): void;
40
- export function error(message: string, error: Error): void;
37
+ export function error(context: LogContext, error: any, payload: LogPayload): void;
38
+ export function error(context: LogContext, error: any): void;
39
+ export function error(message: string, error: any, payload: LogPayload): void;
40
+ export function error(message: string, error: any): void;
41
41
  export function error(message: string, payload: LogPayload): void;
42
42
  export function error(message: string): void;
43
- export function error(error: Error, payload: LogPayload): void;
44
- export function error(error: Error): void;
43
+ export function error(error: any, payload: LogPayload): void;
44
+ export function error(error: any): void;
45
45
  export function error(...args: any[]): void {
46
46
  errorLog(false, args);
47
47
  }
48
48
 
49
- export function warn(context: LogContext, message: string, error: Error, payload: LogPayload): void;
50
- export function warn(context: LogContext, message: string, error: Error): void;
49
+ export function warn(context: LogContext, message: string, error: any, payload: LogPayload): void;
50
+ export function warn(context: LogContext, message: string, error: any): void;
51
51
  export function warn(context: LogContext, message: string, payload: LogPayload): void;
52
52
  export function warn(context: LogContext, message: string): void;
53
- export function warn(context: LogContext, error: Error, payload: LogPayload): void;
54
- export function warn(context: LogContext, error: Error): void;
55
- export function warn(message: string, error: Error, payload: LogPayload): void;
56
- export function warn(message: string, error: Error): void;
53
+ export function warn(context: LogContext, error: any, payload: LogPayload): void;
54
+ export function warn(context: LogContext, error: any): void;
55
+ export function warn(message: string, error: any, payload: LogPayload): void;
56
+ export function warn(message: string, error: any): void;
57
57
  export function warn(message: string, payload: LogPayload): void;
58
58
  export function warn(message: string): void;
59
- export function warn(error: Error, payload: LogPayload): void;
60
- export function warn(error: Error): void;
59
+ export function warn(error: any, payload: LogPayload): void;
60
+ export function warn(error: any): void;
61
61
  export function warn(...args: any[]): void {
62
62
  warnLog(false, args);
63
63
  }
64
64
 
65
- export function info(context: LogContext, message: string, error: Error, payload: LogPayload): void;
66
- export function info(context: LogContext, message: string, error: Error): void;
65
+ export function info(context: LogContext, message: string, error: any, payload: LogPayload): void;
66
+ export function info(context: LogContext, message: string, error: any): void;
67
67
  export function info(context: LogContext, message: string, payload: LogPayload): void;
68
68
  export function info(context: LogContext, message: string): void;
69
- export function info(context: LogContext, error: Error, payload: LogPayload): void;
70
- export function info(context: LogContext, error: Error): void;
71
- export function info(message: string, error: Error, payload: LogPayload): void;
72
- export function info(message: string, error: Error): void;
69
+ export function info(context: LogContext, error: any, payload: LogPayload): void;
70
+ export function info(context: LogContext, error: any): void;
71
+ export function info(message: string, error: any, payload: LogPayload): void;
72
+ export function info(message: string, error: any): void;
73
73
  export function info(message: string, payload: LogPayload): void;
74
74
  export function info(message: string): void;
75
- export function info(error: Error, payload: LogPayload): void;
76
- export function info(error: Error): void;
75
+ export function info(error: any, payload: LogPayload): void;
76
+ export function info(error: any): void;
77
77
  export function info(...args: any[]): void {
78
78
  infoLog(false, args);
79
79
  }
80
80
 
81
- export function debug(context: LogContext, message: string, error: Error, payload: LogPayload): void;
82
- export function debug(context: LogContext, message: string, error: Error): void;
81
+ export function debug(context: LogContext, message: string, error: any, payload: LogPayload): void;
82
+ export function debug(context: LogContext, message: string, error: any): void;
83
83
  export function debug(context: LogContext, message: string, payload: LogPayload): void;
84
84
  export function debug(context: LogContext, message: string): void;
85
- export function debug(context: LogContext, error: Error, payload: LogPayload): void;
86
- export function debug(context: LogContext, error: Error): void;
87
- export function debug(message: string, error: Error, payload: LogPayload): void;
88
- export function debug(message: string, error: Error): void;
85
+ export function debug(context: LogContext, error: any, payload: LogPayload): void;
86
+ export function debug(context: LogContext, error: any): void;
87
+ export function debug(message: string, error: any, payload: LogPayload): void;
88
+ export function debug(message: string, error: any): void;
89
89
  export function debug(message: string, payload: LogPayload): void;
90
90
  export function debug(message: string): void;
91
- export function debug(error: Error, payload: LogPayload): void;
92
- export function debug(error: Error): void;
91
+ export function debug(error: any, payload: LogPayload): void;
92
+ export function debug(error: any): void;
93
93
  export function debug(...args: any[]): void {
94
94
  debugLog(false, args);
95
95
  }
@@ -125,14 +125,8 @@ export namespace log {
125
125
 
126
126
  // set/unset log functions based on loglevel so we only have to evaluate once, not every call
127
127
  const noop = () => {};
128
- const setLog = (logFunc: (calleViaConsole: boolean, args: any[]) => void, funcLvl: LogrusLogLevel): (() => void) => {
129
- if (LogrusLogLevel.isGreatherOrEqual(funcLvl, logLevel)) {
130
- return function (...args: any[]): void {
131
- logFunc(true, args);
132
- };
133
- } else {
134
- return noop;
135
- }
128
+ const setLog = (logFunc: DoLogFunction, funcLevel: LogrusLogLevel): DoLogFunction => {
129
+ return LogrusLogLevel.isGreatherOrEqual(funcLevel, logLevel) ? logFunc : noop;
136
130
  };
137
131
 
138
132
  errorLog = setLog(doErrorLog, "error");
@@ -156,6 +150,8 @@ export namespace log {
156
150
  }
157
151
  }
158
152
 
153
+ type DoLogFunction = (calledViaConsole: boolean, args: any[]) => void;
154
+
159
155
  let errorLog = doErrorLog;
160
156
  function doErrorLog(calledViaConsole: boolean, args: any[]): void {
161
157
  doLog(calledViaConsole, errorConsoleLog, 'ERROR', args);
@@ -312,7 +308,6 @@ function makeLogItem(severity: GoogleLogSeverity, context: LogContext | undefine
312
308
  severity,
313
309
  time: new Date().toISOString(),
314
310
  environment: process.env.KUBE_STAGE,
315
- region: process.env.GITPOD_REGION,
316
311
  context,
317
312
  message,
318
313
  error,