@gitpod/gitpod-protocol 0.1.5-sje-installer-proxy-config-backup.0 → 0.1.5-sje-licensor-deprecation.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 (298) hide show
  1. package/data/gitpod-schema.json +35 -0
  2. package/lib/accounting-protocol.d.ts +1 -1
  3. package/lib/accounting-protocol.js +1 -1
  4. package/lib/admin-protocol.d.ts +11 -2
  5. package/lib/admin-protocol.d.ts.map +1 -1
  6. package/lib/admin-protocol.js +1 -1
  7. package/lib/admin-protocol.js.map +1 -1
  8. package/lib/analytics.d.ts +1 -1
  9. package/lib/analytics.js +1 -1
  10. package/lib/attribution.d.ts +5 -1
  11. package/lib/attribution.d.ts.map +1 -1
  12. package/lib/attribution.js +15 -1
  13. package/lib/attribution.js.map +1 -1
  14. package/lib/auth.d.ts +1 -1
  15. package/lib/auth.js +1 -1
  16. package/lib/billing-mode.d.ts +7 -2
  17. package/lib/billing-mode.d.ts.map +1 -1
  18. package/lib/billing-mode.js +9 -1
  19. package/lib/billing-mode.js.map +1 -1
  20. package/lib/blocked-repositories-protocol.d.ts +1 -1
  21. package/lib/blocked-repositories-protocol.js +1 -1
  22. package/lib/context-url.d.ts +1 -2
  23. package/lib/context-url.d.ts.map +1 -1
  24. package/lib/context-url.js +1 -3
  25. package/lib/context-url.js.map +1 -1
  26. package/lib/context-url.spec.d.ts +1 -3
  27. package/lib/context-url.spec.d.ts.map +1 -1
  28. package/lib/context-url.spec.js +1 -29
  29. package/lib/context-url.spec.js.map +1 -1
  30. package/lib/encryption/container-module.d.ts +1 -1
  31. package/lib/encryption/container-module.js +1 -1
  32. package/lib/encryption/encryption-engine.d.ts +1 -1
  33. package/lib/encryption/encryption-engine.d.ts.map +1 -1
  34. package/lib/encryption/encryption-engine.js +4 -4
  35. package/lib/encryption/encryption-engine.js.map +1 -1
  36. package/lib/encryption/encryption-engine.spec.d.ts +1 -1
  37. package/lib/encryption/encryption-engine.spec.js +2 -2
  38. package/lib/encryption/encryption-engine.spec.js.map +1 -1
  39. package/lib/encryption/encryption-service.d.ts +1 -1
  40. package/lib/encryption/encryption-service.js +1 -1
  41. package/lib/encryption/key-provider.d.ts +1 -1
  42. package/lib/encryption/key-provider.js +2 -2
  43. package/lib/encryption/key-provider.js.map +1 -1
  44. package/lib/env.d.ts +1 -1
  45. package/lib/env.d.ts.map +1 -1
  46. package/lib/env.js +1 -1
  47. package/lib/env.js.map +1 -1
  48. package/lib/experiments/always-default.d.ts +1 -1
  49. package/lib/experiments/configcat-server.d.ts +1 -1
  50. package/lib/experiments/configcat-server.d.ts.map +1 -1
  51. package/lib/experiments/configcat-server.js +2 -1
  52. package/lib/experiments/configcat-server.js.map +1 -1
  53. package/lib/experiments/configcat.d.ts +2 -3
  54. package/lib/experiments/configcat.d.ts.map +1 -1
  55. package/lib/experiments/configcat.js +5 -7
  56. package/lib/experiments/configcat.js.map +1 -1
  57. package/lib/experiments/types.d.ts +3 -4
  58. package/lib/experiments/types.d.ts.map +1 -1
  59. package/lib/experiments/types.js +1 -1
  60. package/lib/experiments/types.js.map +1 -1
  61. package/lib/gitpod-file-parser.d.ts +1 -1
  62. package/lib/gitpod-file-parser.js +1 -1
  63. package/lib/gitpod-file-parser.spec.d.ts +1 -1
  64. package/lib/gitpod-file-parser.spec.js +1 -1
  65. package/lib/gitpod-service.d.ts +23 -36
  66. package/lib/gitpod-service.d.ts.map +1 -1
  67. package/lib/gitpod-service.js +13 -1
  68. package/lib/gitpod-service.js.map +1 -1
  69. package/lib/headless-workspace-log.d.ts +1 -1
  70. package/lib/headless-workspace-log.js +1 -1
  71. package/lib/ide-frontend-service.d.ts +1 -1
  72. package/lib/ide-frontend-service.js +1 -1
  73. package/lib/ide-protocol.d.ts +15 -2
  74. package/lib/ide-protocol.d.ts.map +1 -1
  75. package/lib/ide-protocol.js +11 -1
  76. package/lib/ide-protocol.js.map +1 -1
  77. package/lib/index.d.ts +1 -2
  78. package/lib/index.d.ts.map +1 -1
  79. package/lib/index.js +1 -2
  80. package/lib/index.js.map +1 -1
  81. package/lib/installation-admin-protocol.d.ts +1 -1
  82. package/lib/installation-admin-protocol.js +1 -1
  83. package/lib/license-protocol.d.ts +1 -1
  84. package/lib/license-protocol.js +1 -1
  85. package/lib/messaging/browser/window-connection.d.ts +1 -1
  86. package/lib/messaging/browser/window-connection.js +1 -1
  87. package/lib/messaging/client-call-metrics.d.ts +3 -1
  88. package/lib/messaging/client-call-metrics.d.ts.map +1 -1
  89. package/lib/messaging/client-call-metrics.js +14 -1
  90. package/lib/messaging/client-call-metrics.js.map +1 -1
  91. package/lib/messaging/error.d.ts +4 -1
  92. package/lib/messaging/error.d.ts.map +1 -1
  93. package/lib/messaging/error.js +7 -1
  94. package/lib/messaging/error.js.map +1 -1
  95. package/lib/oss-allowlist.d.ts +1 -1
  96. package/lib/oss-allowlist.js +1 -1
  97. package/lib/payment-protocol.d.ts +1 -1
  98. package/lib/payment-protocol.js +1 -1
  99. package/lib/permission.d.ts +1 -1
  100. package/lib/permission.js +1 -1
  101. package/lib/plans.d.ts +1 -1
  102. package/lib/plans.js +3 -3
  103. package/lib/plans.js.map +1 -1
  104. package/lib/protocol.d.ts +42 -46
  105. package/lib/protocol.d.ts.map +1 -1
  106. package/lib/protocol.js +19 -22
  107. package/lib/protocol.js.map +1 -1
  108. package/lib/protocol.spec.d.ts +1 -1
  109. package/lib/protocol.spec.js +1 -1
  110. package/lib/snapshot-url.d.ts +1 -1
  111. package/lib/snapshot-url.js +1 -1
  112. package/lib/snapshot-url.spec.d.ts +1 -1
  113. package/lib/snapshot-url.spec.js +1 -1
  114. package/lib/team-subscription-protocol.d.ts +1 -1
  115. package/lib/team-subscription-protocol.js +1 -1
  116. package/lib/teams-projects-protocol.d.ts +6 -4
  117. package/lib/teams-projects-protocol.d.ts.map +1 -1
  118. package/lib/teams-projects-protocol.js +1 -1
  119. package/lib/teams-projects-protocol.js.map +1 -1
  120. package/lib/typings/globals.d.ts +1 -1
  121. package/lib/typings/globals.js +1 -1
  122. package/lib/usage.d.ts +14 -3
  123. package/lib/usage.d.ts.map +1 -1
  124. package/lib/usage.js +8 -2
  125. package/lib/usage.js.map +1 -1
  126. package/lib/util/analytics.d.ts +1 -1
  127. package/lib/util/analytics.js +1 -1
  128. package/lib/util/async-iterator.d.ts +1 -1
  129. package/lib/util/async-iterator.js +1 -1
  130. package/lib/util/cancelable.d.ts +1 -1
  131. package/lib/util/cancelable.js +1 -1
  132. package/lib/util/date-time.d.ts +1 -1
  133. package/lib/util/date-time.js +1 -1
  134. package/lib/util/debug-app.d.ts +1 -1
  135. package/lib/util/debug-app.js +1 -1
  136. package/lib/util/deep-partial.d.ts +1 -1
  137. package/lib/util/deep-partial.js +1 -1
  138. package/lib/util/deferred.d.ts +1 -1
  139. package/lib/util/deferred.js +1 -1
  140. package/lib/util/garbage-collected-cache.d.ts +1 -1
  141. package/lib/util/garbage-collected-cache.js +1 -1
  142. package/lib/util/generate-workspace-id.d.ts +1 -1
  143. package/lib/util/generate-workspace-id.js +1 -1
  144. package/lib/util/generate-workspace-id.spec.d.ts +1 -1
  145. package/lib/util/generate-workspace-id.spec.js +1 -1
  146. package/lib/util/gitpod-cookie.d.ts +1 -1
  147. package/lib/util/gitpod-cookie.js +1 -1
  148. package/lib/util/gitpod-host-url.d.ts +3 -1
  149. package/lib/util/gitpod-host-url.d.ts.map +1 -1
  150. package/lib/util/gitpod-host-url.js +11 -4
  151. package/lib/util/gitpod-host-url.js.map +1 -1
  152. package/lib/util/gitpod-host-url.spec.d.ts +1 -1
  153. package/lib/util/gitpod-host-url.spec.js +1 -1
  154. package/lib/util/grpc.d.ts +2 -1
  155. package/lib/util/grpc.d.ts.map +1 -1
  156. package/lib/util/grpc.js +1 -1
  157. package/lib/util/grpc.js.map +1 -1
  158. package/lib/util/jaeger-client-types.d.ts +1 -1
  159. package/lib/util/jaeger-client-types.js +1 -1
  160. package/lib/util/logging.d.ts +1 -1
  161. package/lib/util/logging.js +1 -1
  162. package/lib/util/logging.spec.d.ts +1 -1
  163. package/lib/util/logging.spec.js +1 -1
  164. package/lib/util/make-link.d.ts +1 -1
  165. package/lib/util/make-link.js +1 -1
  166. package/lib/util/nice-grpc.d.ts +9 -0
  167. package/lib/util/nice-grpc.d.ts.map +1 -0
  168. package/lib/util/nice-grpc.js +121 -0
  169. package/lib/util/nice-grpc.js.map +1 -0
  170. package/lib/util/parse-workspace-id.d.ts +1 -1
  171. package/lib/util/parse-workspace-id.js +1 -1
  172. package/lib/util/parse-workspace-id.spec.d.ts +1 -1
  173. package/lib/util/parse-workspace-id.spec.js +1 -1
  174. package/lib/util/queue.d.ts +1 -1
  175. package/lib/util/queue.js +1 -1
  176. package/lib/util/queue.spec.d.ts +1 -1
  177. package/lib/util/queue.spec.js +1 -1
  178. package/lib/util/repeat.d.ts +1 -1
  179. package/lib/util/repeat.js +1 -1
  180. package/lib/util/semaphore.d.ts +1 -1
  181. package/lib/util/semaphore.js +1 -1
  182. package/lib/util/skip-if.d.ts +1 -1
  183. package/lib/util/skip-if.js +1 -1
  184. package/lib/util/timeutil.d.ts +1 -1
  185. package/lib/util/timeutil.js +1 -1
  186. package/lib/util/timeutil.spec.d.ts +2 -1
  187. package/lib/util/timeutil.spec.d.ts.map +1 -1
  188. package/lib/util/timeutil.spec.js +25 -1
  189. package/lib/util/timeutil.spec.js.map +1 -1
  190. package/lib/util/tracing.d.ts +1 -1
  191. package/lib/util/tracing.js +1 -1
  192. package/lib/util/tracing.spec.d.ts +1 -1
  193. package/lib/util/tracing.spec.js +1 -1
  194. package/lib/util/workspace-port-authentication.d.ts +1 -1
  195. package/lib/util/workspace-port-authentication.js +1 -1
  196. package/lib/webhook-event.d.ts +1 -1
  197. package/lib/webhook-event.js +1 -1
  198. package/lib/workspace-class.d.ts +2 -2
  199. package/lib/workspace-class.d.ts.map +1 -1
  200. package/lib/workspace-class.js +1 -1
  201. package/lib/workspace-cluster.d.ts +7 -6
  202. package/lib/workspace-cluster.d.ts.map +1 -1
  203. package/lib/workspace-cluster.js +1 -1
  204. package/lib/workspace-cluster.js.map +1 -1
  205. package/lib/workspace-instance.d.ts +2 -1
  206. package/lib/workspace-instance.d.ts.map +1 -1
  207. package/lib/workspace-instance.js +1 -1
  208. package/lib/wsready.d.ts +10 -4
  209. package/lib/wsready.d.ts.map +1 -1
  210. package/lib/wsready.js +3 -1
  211. package/lib/wsready.js.map +1 -1
  212. package/package.json +3 -1
  213. package/pkg-yarn.lock +3 -1
  214. package/provenance-bundle.jsonl +1 -1
  215. package/src/accounting-protocol.ts +1 -1
  216. package/src/admin-protocol.ts +15 -2
  217. package/src/analytics.ts +1 -1
  218. package/src/attribution.ts +16 -1
  219. package/src/auth.ts +1 -1
  220. package/src/billing-mode.ts +19 -2
  221. package/src/blocked-repositories-protocol.ts +1 -1
  222. package/src/context-url.spec.ts +1 -19
  223. package/src/context-url.ts +1 -3
  224. package/src/encryption/container-module.ts +1 -1
  225. package/src/encryption/encryption-engine.spec.ts +2 -2
  226. package/src/encryption/encryption-engine.ts +8 -4
  227. package/src/encryption/encryption-service.ts +1 -1
  228. package/src/encryption/key-provider.ts +2 -2
  229. package/src/env.ts +2 -3
  230. package/src/experiments/always-default.ts +1 -1
  231. package/src/experiments/configcat-server.ts +2 -1
  232. package/src/experiments/configcat.ts +4 -6
  233. package/src/experiments/types.ts +5 -6
  234. package/src/gitpod-file-parser.spec.ts +1 -1
  235. package/src/gitpod-file-parser.ts +1 -1
  236. package/src/gitpod-service.ts +38 -40
  237. package/src/headless-workspace-log.ts +1 -1
  238. package/src/ide-frontend-service.ts +1 -1
  239. package/src/ide-protocol.ts +20 -2
  240. package/src/index.ts +1 -2
  241. package/src/installation-admin-protocol.ts +1 -1
  242. package/src/license-protocol.ts +1 -1
  243. package/src/messaging/browser/window-connection.ts +1 -1
  244. package/src/messaging/client-call-metrics.ts +18 -1
  245. package/src/messaging/error.ts +10 -1
  246. package/src/oss-allowlist.ts +1 -1
  247. package/src/payment-protocol.ts +1 -1
  248. package/src/permission.ts +1 -1
  249. package/src/plans.ts +3 -3
  250. package/src/protocol.spec.ts +1 -1
  251. package/src/protocol.ts +47 -57
  252. package/src/snapshot-url.spec.ts +1 -1
  253. package/src/snapshot-url.ts +1 -1
  254. package/src/team-subscription-protocol.ts +1 -1
  255. package/src/teams-projects-protocol.ts +9 -5
  256. package/src/typings/globals.ts +1 -1
  257. package/src/usage.ts +16 -3
  258. package/src/util/analytics.ts +1 -1
  259. package/src/util/async-iterator.ts +1 -1
  260. package/src/util/cancelable.ts +1 -1
  261. package/src/util/date-time.ts +1 -1
  262. package/src/util/debug-app.ts +1 -1
  263. package/src/util/deep-partial.ts +1 -1
  264. package/src/util/deferred.ts +1 -1
  265. package/src/util/garbage-collected-cache.ts +1 -1
  266. package/src/util/generate-workspace-id.spec.ts +1 -1
  267. package/src/util/generate-workspace-id.ts +1 -1
  268. package/src/util/gitpod-cookie.ts +1 -1
  269. package/src/util/gitpod-host-url.spec.ts +1 -1
  270. package/src/util/gitpod-host-url.ts +12 -4
  271. package/src/util/grpc.ts +4 -1
  272. package/src/util/jaeger-client-types.ts +1 -1
  273. package/src/util/logging.spec.ts +1 -1
  274. package/src/util/logging.ts +1 -1
  275. package/src/util/make-link.ts +1 -1
  276. package/src/util/nice-grpc.ts +96 -0
  277. package/src/util/parse-workspace-id.spec.ts +1 -1
  278. package/src/util/parse-workspace-id.ts +1 -1
  279. package/src/util/queue.spec.ts +1 -1
  280. package/src/util/queue.ts +1 -1
  281. package/src/util/repeat.ts +1 -1
  282. package/src/util/semaphore.ts +1 -1
  283. package/src/util/skip-if.ts +1 -1
  284. package/src/util/timeutil.spec.ts +22 -1
  285. package/src/util/timeutil.ts +1 -1
  286. package/src/util/tracing.spec.ts +1 -1
  287. package/src/util/tracing.ts +1 -1
  288. package/src/util/workspace-port-authentication.ts +1 -1
  289. package/src/webhook-event.ts +1 -1
  290. package/src/workspace-class.ts +2 -2
  291. package/src/workspace-cluster.ts +12 -7
  292. package/src/workspace-instance.ts +7 -1
  293. package/src/wsready.ts +12 -6
  294. package/lib/email-protocol.d.ts +0 -49
  295. package/lib/email-protocol.d.ts.map +0 -1
  296. package/lib/email-protocol.js +0 -28
  297. package/lib/email-protocol.js.map +0 -1
  298. package/src/email-protocol.ts +0 -65
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Copyright (c) 2022 Gitpod GmbH. All rights reserved.
3
3
  * Licensed under the GNU Affero General Public License (AGPL).
4
- * See License-AGPL.txt in the project root for license information.
4
+ * See License.AGPL.txt in the project root for license information.
5
5
  */
6
6
 
7
7
  /**
@@ -26,6 +26,16 @@ export namespace BillingMode {
26
26
  );
27
27
  }
28
28
 
29
+ export function showTeamSubscriptionUI(billingMode?: BillingMode): boolean {
30
+ if (!billingMode) {
31
+ return false;
32
+ }
33
+ return (
34
+ billingMode.mode === "chargebee" ||
35
+ (billingMode.mode === "usage-based" && !!billingMode.hasChargebeeTeamSubscription)
36
+ );
37
+ }
38
+
29
39
  export function canSetWorkspaceClass(billingMode?: BillingMode): boolean {
30
40
  if (!billingMode) {
31
41
  return false;
@@ -49,7 +59,14 @@ interface None {
49
59
  /** Sessions is handled with old subscription logic based on Chargebee */
50
60
  interface Chargebee {
51
61
  mode: "chargebee";
62
+
63
+ /** True iff this is a team, and is based on a paid plan. Currently only set for teams! */
64
+ paid?: boolean;
65
+
52
66
  canUpgradeToUBB?: boolean;
67
+
68
+ /** Name of team(s) that block switching to usage-based */
69
+ teamNames?: string[];
53
70
  }
54
71
 
55
72
  /** Session is handld with new usage-based logic */
@@ -62,6 +79,6 @@ interface UsageBased {
62
79
  /** User is already converted, but is member with at least one Chargebee-based "Team Plan" */
63
80
  hasChargebeeTeamPlan?: boolean;
64
81
 
65
- /** User is already converted, but is member in at least one Chargebee-based "Team Subscription" */
82
+ /** User is already converted, but is member or owner in at least one Chargebee-based "Team Subscription" */
66
83
  hasChargebeeTeamSubscription?: boolean;
67
84
  }
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Copyright (c) 2022 Gitpod GmbH. All rights reserved.
3
3
  * Licensed under the GNU Affero General Public License (AGPL).
4
- * See License-AGPL.txt in the project root for license information.
4
+ * See License.AGPL.txt in the project root for license information.
5
5
  */
6
6
 
7
7
  export interface BlockedRepository {
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Copyright (c) 2020 Gitpod GmbH. All rights reserved.
3
3
  * Licensed under the GNU Affero General Public License (AGPL).
4
- * See License-AGPL.txt in the project root for license information.
4
+ * See License.AGPL.txt in the project root for license information.
5
5
  */
6
6
 
7
7
  import * as chai from "chai";
@@ -41,24 +41,6 @@ export class ContextUrlTest {
41
41
  expect(actual?.pathname).to.equal("/gitpod-io/gitpod-test-repo.git");
42
42
  }
43
43
 
44
- @test public parseContextUrl_withPrebuild() {
45
- const actual = ContextURL.getNormalizedURL({
46
- contextURL: "prebuild/https://github.com/gitpod-io/gitpod-test-repo",
47
- context: {},
48
- } as WsContextUrl);
49
- expect(actual?.host).to.equal("github.com");
50
- expect(actual?.pathname).to.equal("/gitpod-io/gitpod-test-repo");
51
- }
52
-
53
- @test public parseContextUrl_withPrebuild_withoutSchema() {
54
- const actual = ContextURL.getNormalizedURL({
55
- contextURL: "prebuild/github.com/gitpod-io/gitpod-test-repo",
56
- context: {},
57
- } as WsContextUrl);
58
- expect(actual?.host).to.equal("github.com");
59
- expect(actual?.pathname).to.equal("/gitpod-io/gitpod-test-repo");
60
- }
61
-
62
44
  @test public parseContextUrl_badUrl() {
63
45
  const actual = ContextURL.getNormalizedURL({ contextURL: "[Object object]", context: {} } as WsContextUrl);
64
46
  expect(actual).to.be.undefined;
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Copyright (c) 2020 Gitpod GmbH. All rights reserved.
3
3
  * Licensed under the GNU Affero General Public License (AGPL).
4
- * See License-AGPL.txt in the project root for license information.
4
+ * See License.AGPL.txt in the project root for license information.
5
5
  */
6
6
 
7
7
  import { Workspace } from ".";
@@ -15,7 +15,6 @@ import { Workspace } from ".";
15
15
  * TODO(gpl) See if we can get this into `server` code to remove the burden from clients
16
16
  */
17
17
  export namespace ContextURL {
18
- export const INCREMENTAL_PREBUILD_PREFIX = "incremental-prebuild";
19
18
  export const PREBUILD_PREFIX = "prebuild";
20
19
  export const IMAGEBUILD_PREFIX = "imagebuild";
21
20
  export const SNAPSHOT_PREFIX = "snapshot";
@@ -91,7 +90,6 @@ export namespace ContextURL {
91
90
  const firstSegment = segments[0];
92
91
  if (
93
92
  firstSegment === PREBUILD_PREFIX ||
94
- firstSegment === INCREMENTAL_PREBUILD_PREFIX ||
95
93
  firstSegment === IMAGEBUILD_PREFIX ||
96
94
  firstSegment === SNAPSHOT_PREFIX ||
97
95
  firstSegment.startsWith(REFERRER_PREFIX)
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Copyright (c) 2020 Gitpod GmbH. All rights reserved.
3
3
  * Licensed under the GNU Affero General Public License (AGPL).
4
- * See License-AGPL.txt in the project root for license information.
4
+ * See License.AGPL.txt in the project root for license information.
5
5
  */
6
6
 
7
7
  import { interfaces } from "inversify";
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Copyright (c) 2020 Gitpod GmbH. All rights reserved.
3
3
  * Licensed under the GNU Affero General Public License (AGPL).
4
- * See License-AGPL.txt in the project root for license information.
4
+ * See License.AGPL.txt in the project root for license information.
5
5
  */
6
6
 
7
7
  import { suite, test } from "mocha-typescript";
@@ -24,7 +24,7 @@ class TestEncryptionEngineImpl {
24
24
 
25
25
  @test basicSymmetry() {
26
26
  const plaintext = "12345678901234567890";
27
- const key = new Buffer(this.testkey, "base64");
27
+ const key = Buffer.from(this.testkey, "base64");
28
28
 
29
29
  const cut = new EncryptionEngineImpl();
30
30
  const encryptedData = cut.encrypt(plaintext, key);
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Copyright (c) 2020 Gitpod GmbH. All rights reserved.
3
3
  * Licensed under the GNU Affero General Public License (AGPL).
4
- * See License-AGPL.txt in the project root for license information.
4
+ * See License.AGPL.txt in the project root for license information.
5
5
  */
6
6
 
7
7
  import * as crypto from "crypto";
@@ -40,7 +40,7 @@ export class EncryptionEngineImpl {
40
40
  encrypt(data: string, key: Buffer): EncryptedData {
41
41
  const iv = crypto.randomBytes(16);
42
42
  const cipher = crypto.createCipheriv(this.algorithm, key, iv);
43
- const encrypted = cipher.update(new Buffer(data, "utf8"));
43
+ const encrypted = cipher.update(Buffer.from(data, "utf8"));
44
44
  const finalEncrypted = Buffer.concat([encrypted, cipher.final()]);
45
45
  return {
46
46
  data: finalEncrypted.toString(this.enc),
@@ -51,8 +51,12 @@ export class EncryptionEngineImpl {
51
51
  }
52
52
 
53
53
  decrypt(encryptedData: EncryptedData, key: Buffer): string {
54
- const decipher = crypto.createDecipheriv(this.algorithm, key, new Buffer(encryptedData.keyParams.iv, this.enc));
55
- let decrypted = decipher.update(new Buffer(encryptedData.data, this.enc));
54
+ const decipher = crypto.createDecipheriv(
55
+ this.algorithm,
56
+ key,
57
+ Buffer.from(encryptedData.keyParams.iv, this.enc),
58
+ );
59
+ let decrypted = decipher.update(Buffer.from(encryptedData.data, this.enc));
56
60
  const finalDecrypted = Buffer.concat([decrypted, decipher.final()]);
57
61
  return finalDecrypted.toString("utf8");
58
62
  }
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Copyright (c) 2020 Gitpod GmbH. All rights reserved.
3
3
  * Licensed under the GNU Affero General Public License (AGPL).
4
- * See License-AGPL.txt in the project root for license information.
4
+ * See License.AGPL.txt in the project root for license information.
5
5
  */
6
6
 
7
7
  import { injectable, inject } from "inversify";
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Copyright (c) 2020 Gitpod GmbH. All rights reserved.
3
3
  * Licensed under the GNU Affero General Public License (AGPL).
4
- * See License-AGPL.txt in the project root for license information.
4
+ * See License.AGPL.txt in the project root for license information.
5
5
  */
6
6
 
7
7
  import { injectable, inject } from "inversify";
@@ -71,7 +71,7 @@ export class KeyProviderImpl implements KeyProvider {
71
71
  name: config.name,
72
72
  version: config.version,
73
73
  },
74
- material: new Buffer(config.material, "base64"),
74
+ material: Buffer.from(config.material, "base64"),
75
75
  };
76
76
  }
77
77
  }
package/src/env.ts CHANGED
@@ -1,14 +1,13 @@
1
1
  /**
2
2
  * Copyright (c) 2020 Gitpod GmbH. All rights reserved.
3
3
  * Licensed under the GNU Affero General Public License (AGPL).
4
- * See License-AGPL.txt in the project root for license information.
4
+ * See License.AGPL.txt in the project root for license information.
5
5
  */
6
6
 
7
7
  import { injectable } from "inversify";
8
8
 
9
9
  @injectable()
10
- export abstract class AbstractComponentEnv {
11
- }
10
+ export abstract class AbstractComponentEnv {}
12
11
 
13
12
  export function getEnvVar(name: string, defaultValue?: string): string {
14
13
  const value = process.env[name] || defaultValue;
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Copyright (c) 2022 Gitpod GmbH. All rights reserved.
3
3
  * Licensed under the GNU Affero General Public License (AGPL).
4
- * See License-AGPL.txt in the project root for license information.
4
+ * See License.AGPL.txt in the project root for license information.
5
5
  */
6
6
  import { Attributes, Client } from "./types";
7
7
 
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Copyright (c) 2022 Gitpod GmbH. All rights reserved.
3
3
  * Licensed under the GNU Affero General Public License (AGPL).
4
- * See License-AGPL.txt in the project root for license information.
4
+ * See License.AGPL.txt in the project root for license information.
5
5
  */
6
6
 
7
7
  import { Client } from "./types";
@@ -32,6 +32,7 @@ export function getExperimentsClientForBackend(): Client {
32
32
 
33
33
  const configCatClient = configcat.createClient(sdkKey, {
34
34
  pollIntervalSeconds: 3 * 60, // 3 minutes
35
+ requestTimeoutMs: 2000,
35
36
  logger: configcat.createConsoleLogger(LogLevel.Error),
36
37
  maxInitWaitTimeSeconds: 0,
37
38
  });
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Copyright (c) 2022 Gitpod GmbH. All rights reserved.
3
3
  * Licensed under the GNU Affero General Public License (AGPL).
4
- * See License-AGPL.txt in the project root for license information.
4
+ * See License.AGPL.txt in the project root for license information.
5
5
  */
6
6
 
7
7
  import { Attributes, Client } from "./types";
@@ -12,9 +12,8 @@ import { User } from "../protocol";
12
12
  export const USER_ID_ATTRIBUTE = "user_id";
13
13
  export const PROJECT_ID_ATTRIBUTE = "project_id";
14
14
  export const TEAM_ID_ATTRIBUTE = "team_id";
15
- export const TEAM_IDS_ATTRIBUTE = "team_ids";
16
15
  export const TEAM_NAME_ATTRIBUTE = "team_name";
17
- export const TEAM_NAMES_ATTRIBUTE = "team_names";
16
+ export const BILLING_TIER_ATTRIBUTE = "billing_tier";
18
17
 
19
18
  export class ConfigCatClient implements Client {
20
19
  private client: IConfigCatClient;
@@ -49,9 +48,8 @@ export function attributesToUser(attributes: Attributes): ConfigCatUser {
49
48
  if (attributes.teamName) {
50
49
  custom[TEAM_NAME_ATTRIBUTE] = attributes.teamName;
51
50
  }
52
- if (attributes.teams) {
53
- custom[TEAM_NAMES_ATTRIBUTE] = attributes.teams.map((t) => t.name).join(",");
54
- custom[TEAM_IDS_ATTRIBUTE] = attributes.teams.map((t) => t.id).join(",");
51
+ if (attributes.billingTier) {
52
+ custom[BILLING_TIER_ATTRIBUTE] = attributes.billingTier;
55
53
  }
56
54
 
57
55
  return new ConfigCatUser(userId, email, "", custom);
@@ -1,11 +1,10 @@
1
1
  /**
2
2
  * Copyright (c) 2022 Gitpod GmbH. All rights reserved.
3
3
  * Licensed under the GNU Affero General Public License (AGPL).
4
- * See License-AGPL.txt in the project root for license information.
4
+ * See License.AGPL.txt in the project root for license information.
5
5
  */
6
6
 
7
- import { User } from "../protocol";
8
- import { Team } from "../teams-projects-protocol";
7
+ import { BillingTier, User } from "../protocol";
9
8
 
10
9
  export const Client = Symbol("Client");
11
10
 
@@ -15,6 +14,9 @@ export interface Attributes {
15
14
  // user.id is mapped to ConfigCat's "identifier" + "custom.user_id"
16
15
  user?: User | { id: string; email?: string };
17
16
 
17
+ // The BillingTier of this particular user
18
+ billingTier?: BillingTier;
19
+
18
20
  // Currently selected Gitpod Project ID (mapped to "custom.project_id")
19
21
  projectId?: string;
20
22
 
@@ -22,9 +24,6 @@ export interface Attributes {
22
24
  teamId?: string;
23
25
  // Currently selected Gitpod Team Name (mapped to "custom.team_name")
24
26
  teamName?: string;
25
-
26
- // All the Gitpod Teams that the user is a member (or owner) of (mapped to "custom.team_names" and "custom.team_ids")
27
- teams?: Team[];
28
27
  }
29
28
 
30
29
  export interface Client {
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Copyright (c) 2020 Gitpod GmbH. All rights reserved.
3
3
  * Licensed under the GNU Affero General Public License (AGPL).
4
- * See License-AGPL.txt in the project root for license information.
4
+ * See License.AGPL.txt in the project root for license information.
5
5
  */
6
6
 
7
7
  import { suite, test } from "mocha-typescript";
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Copyright (c) 2020 Gitpod GmbH. All rights reserved.
3
3
  * Licensed under the GNU Affero General Public License (AGPL).
4
- * See License-AGPL.txt in the project root for license information.
4
+ * See License.AGPL.txt in the project root for license information.
5
5
  */
6
6
 
7
7
  import { injectable } from "inversify";
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Copyright (c) 2020 Gitpod GmbH. All rights reserved.
3
3
  * Licensed under the GNU Affero General Public License (AGPL).
4
- * See License-AGPL.txt in the project root for license information.
4
+ * See License.AGPL.txt in the project root for license information.
5
5
  */
6
6
 
7
7
  import {
@@ -12,7 +12,6 @@ import {
12
12
  WhitelistedRepository,
13
13
  WorkspaceImageBuild,
14
14
  AuthProviderInfo,
15
- CreateWorkspaceMode,
16
15
  Token,
17
16
  UserEnvVarValue,
18
17
  Terms,
@@ -27,6 +26,7 @@ import {
27
26
  PrebuiltWorkspace,
28
27
  UserSSHPublicKeyValue,
29
28
  SSHPublicKeyValue,
29
+ IDESettings,
30
30
  } from "./protocol";
31
31
  import {
32
32
  Team,
@@ -59,8 +59,7 @@ import {
59
59
  } from "./team-subscription-protocol";
60
60
  import { RemotePageMessage, RemoteTrackMessage, RemoteIdentifyMessage } from "./analytics";
61
61
  import { IDEServer } from "./ide-protocol";
62
- import { InstallationAdminSettings, TelemetryData } from "./installation-admin-protocol";
63
- import { ListUsageRequest, ListUsageResponse } from "./usage";
62
+ import { ListUsageRequest, ListUsageResponse, CostCenterJSON } from "./usage";
64
63
  import { SupportedWorkspaceClass } from "./workspace-class";
65
64
  import { BillingMode } from "./billing-mode";
66
65
 
@@ -70,6 +69,8 @@ export interface GitpodClient {
70
69
 
71
70
  onPrebuildUpdate(update: PrebuildWithStatus): void;
72
71
 
72
+ onNotificationUpdated(): void;
73
+
73
74
  onCreditAlert(creditAlert: CreditAlert): void;
74
75
 
75
76
  //#region propagating reconnection to iframe
@@ -163,6 +164,7 @@ export interface GitpodServer extends JsonRpcServer<GitpodClient>, AdminServer,
163
164
  deleteSSHPublicKey(id: string): Promise<void>;
164
165
 
165
166
  // Teams
167
+ getTeam(teamId: string): Promise<Team>;
166
168
  getTeams(): Promise<Team[]>;
167
169
  getTeamMembers(teamId: string): Promise<TeamMemberInfo[]>;
168
170
  createTeam(name: string): Promise<Team>;
@@ -171,12 +173,7 @@ export interface GitpodServer extends JsonRpcServer<GitpodClient>, AdminServer,
171
173
  removeTeamMember(teamId: string, userId: string): Promise<void>;
172
174
  getGenericInvite(teamId: string): Promise<TeamMembershipInvite>;
173
175
  resetGenericInvite(inviteId: string): Promise<TeamMembershipInvite>;
174
- deleteTeam(teamId: string, userId: string): Promise<void>;
175
-
176
- // Admin Settings
177
- adminGetSettings(): Promise<InstallationAdminSettings>;
178
- adminUpdateSettings(settings: InstallationAdminSettings): Promise<void>;
179
- adminGetTelemetryData(): Promise<TelemetryData>;
176
+ deleteTeam(teamId: string): Promise<void>;
180
177
 
181
178
  // Projects
182
179
  getProviderRepositoriesForUser(params: GetProviderRepositoriesParams): Promise<ProviderRepository[]>;
@@ -191,11 +188,6 @@ export interface GitpodServer extends JsonRpcServer<GitpodClient>, AdminServer,
191
188
  getPrebuild(prebuildId: string): Promise<PrebuildWithStatus | undefined>;
192
189
  triggerPrebuild(projectId: string, branchName: string | null): Promise<StartPrebuildResult>;
193
190
  cancelPrebuild(projectId: string, prebuildId: string): Promise<void>;
194
- fetchProjectRepositoryConfiguration(projectId: string): Promise<string | undefined>;
195
- guessProjectConfiguration(projectId: string): Promise<string | undefined>;
196
- fetchRepositoryConfiguration(cloneUrl: string): Promise<string | undefined>;
197
- guessRepositoryConfiguration(cloneUrl: string): Promise<string | undefined>;
198
- setProjectConfiguration(projectId: string, configString: string): Promise<void>;
199
191
  updateProjectPartial(partialProject: PartialProject): Promise<void>;
200
192
  setProjectEnvironmentVariable(projectId: string, name: string, value: string, censored: boolean): Promise<void>;
201
193
  getProjectEnvironmentVariables(projectId: string): Promise<ProjectEnvVar[]>;
@@ -211,7 +203,6 @@ export interface GitpodServer extends JsonRpcServer<GitpodClient>, AdminServer,
211
203
  deleteGitpodToken(tokenHash: string): Promise<void>;
212
204
 
213
205
  // misc
214
- sendFeedback(feedback: string): Promise<string | undefined>;
215
206
  isGitHubAppEnabled(): Promise<boolean>;
216
207
  registerGithubApp(installationId: string): Promise<void>;
217
208
 
@@ -231,16 +222,6 @@ export interface GitpodServer extends JsonRpcServer<GitpodClient>, AdminServer,
231
222
  */
232
223
  getSnapshots(workspaceID: string): Promise<string[]>;
233
224
 
234
- /**
235
- * stores/updates layout information for the given workspace
236
- */
237
- storeLayout(workspaceId: string, layoutData: string): Promise<void>;
238
-
239
- /**
240
- * retrieves layout information for the given workspace
241
- */
242
- getLayout(workspaceId: string): Promise<string | undefined>;
243
-
244
225
  guessGitTokenScopes(params: GuessGitTokenScopesParams): Promise<GuessedGitTokenScopes>;
245
226
 
246
227
  /**
@@ -290,17 +271,18 @@ export interface GitpodServer extends JsonRpcServer<GitpodClient>, AdminServer,
290
271
 
291
272
  getStripePublishableKey(): Promise<string>;
292
273
  getStripeSetupIntentClientSecret(): Promise<string>;
293
- findStripeSubscriptionIdForTeam(teamId: string): Promise<string | undefined>;
294
- createOrUpdateStripeCustomerForTeam(teamId: string, currency: string): Promise<void>;
295
- createOrUpdateStripeCustomerForUser(currency: string): Promise<void>;
296
- subscribeTeamToStripe(teamId: string, setupIntentId: string): Promise<void>;
297
- getStripePortalUrlForTeam(teamId: string): Promise<string>;
298
- getUsageLimitForTeam(teamId: string): Promise<number | undefined>;
299
- setUsageLimitForTeam(teamId: string, spendingLimit: number): Promise<void>;
274
+ findStripeSubscriptionId(attributionId: string): Promise<string | undefined>;
275
+ createStripeCustomerIfNeeded(attributionId: string, currency: string): Promise<void>;
276
+ subscribeToStripe(attributionId: string, setupIntentId: string, usageLimit: number): Promise<number | undefined>;
277
+ getStripePortalUrl(attributionId: string): Promise<string>;
278
+ getCostCenter(attributionId: string): Promise<CostCenterJSON | undefined>;
279
+ setUsageLimit(attributionId: string, usageLimit: number): Promise<void>;
280
+ getUsageBalance(attributionId: string): Promise<number>;
300
281
 
301
282
  listUsage(req: ListUsageRequest): Promise<ListUsageResponse>;
302
283
 
303
284
  setUsageAttribution(usageAttribution: string): Promise<void>;
285
+ listAvailableUsageAttributionIds(): Promise<string[]>;
304
286
 
305
287
  getBillingModeForUser(): Promise<BillingMode>;
306
288
  getBillingModeForTeam(teamId: string): Promise<BillingMode>;
@@ -332,9 +314,7 @@ export interface RateLimiterError {
332
314
 
333
315
  export interface CreateProjectParams {
334
316
  name: string;
335
- slug?: string;
336
- account: string;
337
- provider: string;
317
+ slug: string;
338
318
  cloneUrl: string;
339
319
  teamId?: string;
340
320
  userId?: string;
@@ -435,17 +415,23 @@ export namespace GitpodServer {
435
415
  export interface GetAccountStatementOptions {
436
416
  date?: string;
437
417
  }
438
- export interface CreateWorkspaceOptions {
418
+ export interface CreateWorkspaceOptions extends StartWorkspaceOptions {
439
419
  contextUrl: string;
440
- mode?: CreateWorkspaceMode;
420
+
421
+ // whether running workspaces on the same context should be ignored. If false (default) users will be asked.
422
+ ignoreRunningWorkspaceOnSameCommit?: boolean;
423
+ ignoreRunningPrebuild?: boolean;
424
+ allowUsingPreviousPrebuilds?: boolean;
441
425
  forceDefaultConfig?: boolean;
442
426
  }
427
+
443
428
  export interface StartWorkspaceOptions {
444
- forceDefaultImage: boolean;
429
+ forceDefaultImage?: boolean;
430
+ workspaceClass?: string;
431
+ ideSettings?: IDESettings;
445
432
  }
446
433
  export interface TakeSnapshotOptions {
447
434
  workspaceId: string;
448
- layoutData?: string;
449
435
  /* this is here to enable backwards-compatibility and untangling rollout between workspace, IDE and meta */
450
436
  dontWait?: boolean;
451
437
  }
@@ -573,6 +559,18 @@ export class GitpodCompositeClient<Client extends GitpodClient> implements Gitpo
573
559
  }
574
560
  }
575
561
  }
562
+
563
+ onNotificationUpdated(): void {
564
+ for (const client of this.clients) {
565
+ if (client.onNotificationUpdated) {
566
+ try {
567
+ client.onNotificationUpdated();
568
+ } catch (error) {
569
+ console.error(error);
570
+ }
571
+ }
572
+ }
573
+ }
576
574
  }
577
575
 
578
576
  export type GitpodService = GitpodServiceImpl<GitpodClient, GitpodServer>;
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Copyright (c) 2020 Gitpod GmbH. All rights reserved.
3
3
  * Licensed under the GNU Affero General Public License (AGPL).
4
- * See License-AGPL.txt in the project root for license information.
4
+ * See License.AGPL.txt in the project root for license information.
5
5
  */
6
6
 
7
7
  export enum HeadlessWorkspaceEventType {
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Copyright (c) 2020 Gitpod GmbH. All rights reserved.
3
3
  * Licensed under the GNU Affero General Public License (AGPL).
4
- * See License-AGPL.txt in the project root for license information.
4
+ * See License.AGPL.txt in the project root for license information.
5
5
  */
6
6
 
7
7
  import { Event } from "./util/event";
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Copyright (c) 2021 Gitpod GmbH. All rights reserved.
3
3
  * Licensed under the GNU Affero General Public License (AGPL).
4
- * See License-AGPL.txt in the project root for license information.
4
+ * See License.AGPL.txt in the project root for license information.
5
5
  */
6
6
 
7
7
  /**
@@ -36,6 +36,14 @@ export interface IDEOptions {
36
36
  clients?: { [id: string]: IDEClient };
37
37
  }
38
38
 
39
+ export namespace IDEOptions {
40
+ export function asArray(options: IDEOptions): (IDEOption & { id: string })[] {
41
+ return Object.keys(options.options)
42
+ .map((id) => ({ ...options.options[id], id }))
43
+ .sort((a, b) => (a.orderKey || "").localeCompare(b.orderKey || ""));
44
+ }
45
+ }
46
+
39
47
  export interface IDEClient {
40
48
  /**
41
49
  * The default desktop IDE when the user has not specified one.
@@ -87,7 +95,7 @@ export interface IDEOption {
87
95
  label?: string;
88
96
 
89
97
  /**
90
- * Notes to the IDE option that are renderd in the preferences when a user
98
+ * Notes to the IDE option that are rendered in the preferences when a user
91
99
  * chooses this IDE.
92
100
  */
93
101
  notes?: string[];
@@ -126,4 +134,14 @@ export interface IDEOption {
126
134
  * The latest plugin image ref for the latest IDE image, this image ref always resolve to digest.
127
135
  */
128
136
  pluginLatestImage?: string;
137
+
138
+ /**
139
+ * ImageVersion the semantic version of the IDE image.
140
+ */
141
+ imageVersion?: string;
142
+
143
+ /**
144
+ * LatestImageVersion the semantic version of the latest IDE image.
145
+ */
146
+ latestImageVersion?: string;
129
147
  }
package/src/index.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Copyright (c) 2020 Gitpod GmbH. All rights reserved.
3
3
  * Licensed under the GNU Affero General Public License (AGPL).
4
- * See License-AGPL.txt in the project root for license information.
4
+ * See License.AGPL.txt in the project root for license information.
5
5
  */
6
6
 
7
7
  export * from "./protocol";
@@ -13,7 +13,6 @@ export * from "./license-protocol";
13
13
  export * from "./workspace-instance";
14
14
  export * from "./permission";
15
15
  export * from "./admin-protocol";
16
- export * from "./email-protocol";
17
16
  export * from "./headless-workspace-log";
18
17
  export * from "./context-url";
19
18
  export * from "./teams-projects-protocol";
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Copyright (c) 2022 Gitpod GmbH. All rights reserved.
3
3
  * Licensed under the GNU Affero General Public License (AGPL).
4
- * See License-AGPL.txt in the project root for license information.
4
+ * See License.AGPL.txt in the project root for license information.
5
5
  */
6
6
 
7
7
  import { v4 as uuidv4 } from "uuid";
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Copyright (c) 2020 Gitpod GmbH. All rights reserved.
3
3
  * Licensed under the GNU Affero General Public License (AGPL).
4
- * See License-AGPL.txt in the project root for license information.
4
+ * See License.AGPL.txt in the project root for license information.
5
5
  */
6
6
 
7
7
  export interface LicenseValidationResult {
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Copyright (c) 2020 Gitpod GmbH. All rights reserved.
3
3
  * Licensed under the GNU Affero General Public License (AGPL).
4
- * See License-AGPL.txt in the project root for license information.
4
+ * See License.AGPL.txt in the project root for license information.
5
5
  */
6
6
 
7
7
  import { Message } from "vscode-jsonrpc/lib/messages";