@gitpod/gitpod-protocol 0.1.5-sje-installation-admin-dashboard.22 → 0.1.5-sje-installer-fun.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 (313) hide show
  1. package/data/gitpod-schema.json +181 -4
  2. package/lib/accounting-protocol.d.ts +17 -10
  3. package/lib/accounting-protocol.d.ts.map +1 -1
  4. package/lib/accounting-protocol.js +30 -32
  5. package/lib/accounting-protocol.js.map +1 -1
  6. package/lib/admin-protocol.d.ts +9 -0
  7. package/lib/admin-protocol.d.ts.map +1 -1
  8. package/lib/admin-protocol.js.map +1 -1
  9. package/lib/analytics.d.ts +4 -5
  10. package/lib/analytics.d.ts.map +1 -1
  11. package/lib/analytics.js.map +1 -1
  12. package/lib/auth.d.ts.map +1 -1
  13. package/lib/blocked-repositories-protocol.d.ts +13 -0
  14. package/lib/blocked-repositories-protocol.d.ts.map +1 -0
  15. package/lib/blocked-repositories-protocol.js +8 -0
  16. package/lib/blocked-repositories-protocol.js.map +1 -0
  17. package/lib/context-url.d.ts +17 -5
  18. package/lib/context-url.d.ts.map +1 -1
  19. package/lib/context-url.js +57 -6
  20. package/lib/context-url.js.map +1 -1
  21. package/lib/context-url.spec.d.ts +2 -0
  22. package/lib/context-url.spec.d.ts.map +1 -1
  23. package/lib/context-url.spec.js +40 -4
  24. package/lib/context-url.spec.js.map +1 -1
  25. package/lib/email-protocol.d.ts +1 -1
  26. package/lib/email-protocol.d.ts.map +1 -1
  27. package/lib/email-protocol.js.map +1 -1
  28. package/lib/encryption/container-module.d.ts.map +1 -1
  29. package/lib/encryption/container-module.js +1 -1
  30. package/lib/encryption/container-module.js.map +1 -1
  31. package/lib/encryption/encryption-engine.d.ts.map +1 -1
  32. package/lib/encryption/encryption-engine.js +7 -7
  33. package/lib/encryption/encryption-engine.js.map +1 -1
  34. package/lib/encryption/encryption-engine.spec.d.ts.map +1 -1
  35. package/lib/encryption/encryption-engine.spec.js +2 -3
  36. package/lib/encryption/encryption-engine.spec.js.map +1 -1
  37. package/lib/encryption/encryption-service.d.ts.map +1 -1
  38. package/lib/encryption/encryption-service.js +1 -1
  39. package/lib/encryption/encryption-service.js.map +1 -1
  40. package/lib/encryption/key-provider.d.ts.map +1 -1
  41. package/lib/encryption/key-provider.js +7 -9
  42. package/lib/encryption/key-provider.js.map +1 -1
  43. package/lib/env.d.ts +0 -5
  44. package/lib/env.d.ts.map +1 -1
  45. package/lib/env.js +1 -20
  46. package/lib/env.js.map +1 -1
  47. package/lib/experiments/always-default.d.ts +8 -0
  48. package/lib/experiments/always-default.d.ts.map +1 -0
  49. package/lib/experiments/always-default.js +20 -0
  50. package/lib/experiments/always-default.js.map +1 -0
  51. package/lib/experiments/configcat-server.d.ts +8 -0
  52. package/lib/experiments/configcat-server.d.ts.map +1 -0
  53. package/lib/experiments/configcat-server.js +34 -0
  54. package/lib/experiments/configcat-server.js.map +1 -0
  55. package/lib/experiments/configcat.d.ts +21 -0
  56. package/lib/experiments/configcat.d.ts.map +1 -0
  57. package/lib/experiments/configcat.js +47 -0
  58. package/lib/experiments/configcat.js.map +1 -0
  59. package/lib/experiments/types.d.ts +19 -0
  60. package/lib/experiments/types.d.ts.map +1 -0
  61. package/lib/{theia-plugins.js → experiments/types.js} +2 -2
  62. package/lib/experiments/types.js.map +1 -0
  63. package/lib/gitpod-file-parser.d.ts.map +1 -1
  64. package/lib/gitpod-file-parser.js +6 -6
  65. package/lib/gitpod-file-parser.js.map +1 -1
  66. package/lib/gitpod-file-parser.spec.js +42 -39
  67. package/lib/gitpod-file-parser.spec.js.map +1 -1
  68. package/lib/gitpod-service.d.ts +45 -26
  69. package/lib/gitpod-service.d.ts.map +1 -1
  70. package/lib/gitpod-service.js +39 -32
  71. package/lib/gitpod-service.js.map +1 -1
  72. package/lib/headless-workspace-log.d.ts +1 -0
  73. package/lib/headless-workspace-log.d.ts.map +1 -1
  74. package/lib/headless-workspace-log.js +2 -1
  75. package/lib/headless-workspace-log.js.map +1 -1
  76. package/lib/ide-frontend-service.d.ts +1 -1
  77. package/lib/ide-protocol.d.ts +10 -6
  78. package/lib/ide-protocol.d.ts.map +1 -1
  79. package/lib/index.d.ts +16 -16
  80. package/lib/installation-admin-protocol.d.ts +9 -0
  81. package/lib/installation-admin-protocol.d.ts.map +1 -1
  82. package/lib/installation-admin-protocol.js +3 -2
  83. package/lib/installation-admin-protocol.js.map +1 -1
  84. package/lib/license-protocol.d.ts +7 -0
  85. package/lib/license-protocol.d.ts.map +1 -1
  86. package/lib/license-protocol.js.map +1 -1
  87. package/lib/messaging/browser/connection.d.ts +1 -1
  88. package/lib/messaging/browser/connection.d.ts.map +1 -1
  89. package/lib/messaging/browser/connection.js +19 -19
  90. package/lib/messaging/browser/connection.js.map +1 -1
  91. package/lib/messaging/browser/window-connection.d.ts +4 -4
  92. package/lib/messaging/browser/window-connection.d.ts.map +1 -1
  93. package/lib/messaging/browser/window-connection.js +9 -6
  94. package/lib/messaging/browser/window-connection.js.map +1 -1
  95. package/lib/messaging/client-call-metrics.d.ts +2 -2
  96. package/lib/messaging/client-call-metrics.d.ts.map +1 -1
  97. package/lib/messaging/client-call-metrics.js +20 -20
  98. package/lib/messaging/client-call-metrics.js.map +1 -1
  99. package/lib/messaging/error.d.ts +3 -0
  100. package/lib/messaging/error.d.ts.map +1 -1
  101. package/lib/messaging/error.js +6 -0
  102. package/lib/messaging/error.js.map +1 -1
  103. package/lib/messaging/handler.d.ts.map +1 -1
  104. package/lib/messaging/handler.js +1 -1
  105. package/lib/messaging/node/connection.js +8 -8
  106. package/lib/messaging/node/connection.js.map +1 -1
  107. package/lib/messaging/proxy-factory.d.ts +1 -1
  108. package/lib/messaging/proxy-factory.d.ts.map +1 -1
  109. package/lib/messaging/proxy-factory.js +7 -9
  110. package/lib/messaging/proxy-factory.js.map +1 -1
  111. package/lib/payment-protocol.d.ts.map +1 -1
  112. package/lib/payment-protocol.js +1 -1
  113. package/lib/payment-protocol.js.map +1 -1
  114. package/lib/permission.d.ts +9 -3
  115. package/lib/permission.d.ts.map +1 -1
  116. package/lib/permission.js +34 -25
  117. package/lib/permission.js.map +1 -1
  118. package/lib/plans.d.ts +3 -3
  119. package/lib/plans.d.ts.map +1 -1
  120. package/lib/plans.js +206 -171
  121. package/lib/plans.js.map +1 -1
  122. package/lib/protocol.d.ts +88 -38
  123. package/lib/protocol.d.ts.map +1 -1
  124. package/lib/protocol.js +166 -88
  125. package/lib/protocol.js.map +1 -1
  126. package/lib/snapshot-url.spec.js.map +1 -1
  127. package/lib/team-subscription-protocol.d.ts +21 -3
  128. package/lib/team-subscription-protocol.d.ts.map +1 -1
  129. package/lib/team-subscription-protocol.js +16 -5
  130. package/lib/team-subscription-protocol.js.map +1 -1
  131. package/lib/teams-projects-protocol.d.ts +12 -3
  132. package/lib/teams-projects-protocol.d.ts.map +1 -1
  133. package/lib/teams-projects-protocol.js +8 -1
  134. package/lib/teams-projects-protocol.js.map +1 -1
  135. package/lib/typings/globals.d.ts +2 -2
  136. package/lib/typings/globals.d.ts.map +1 -1
  137. package/lib/util/analytics.d.ts.map +1 -1
  138. package/lib/util/analytics.js +12 -3
  139. package/lib/util/analytics.js.map +1 -1
  140. package/lib/util/async-iterator.d.ts.map +1 -1
  141. package/lib/util/async-iterator.js +3 -3
  142. package/lib/util/async-iterator.js.map +1 -1
  143. package/lib/util/cancelable.js.map +1 -1
  144. package/lib/util/date-time.js +6 -6
  145. package/lib/util/date-time.js.map +1 -1
  146. package/lib/util/debug-app.d.ts +25 -0
  147. package/lib/util/debug-app.d.ts.map +1 -0
  148. package/lib/util/debug-app.js +100 -0
  149. package/lib/util/debug-app.js.map +1 -0
  150. package/lib/util/deferred.js.map +1 -1
  151. package/lib/util/disposable.d.ts.map +1 -1
  152. package/lib/util/disposable.js +2 -2
  153. package/lib/util/disposable.js.map +1 -1
  154. package/lib/util/event.d.ts.map +1 -1
  155. package/lib/util/event.js +5 -3
  156. package/lib/util/event.js.map +1 -1
  157. package/lib/util/garbage-collected-cache.d.ts.map +1 -1
  158. package/lib/util/garbage-collected-cache.js +1 -1
  159. package/lib/util/garbage-collected-cache.js.map +1 -1
  160. package/lib/util/generate-workspace-id.d.ts +5 -0
  161. package/lib/util/generate-workspace-id.d.ts.map +1 -1
  162. package/lib/util/generate-workspace-id.js +446 -442
  163. package/lib/util/generate-workspace-id.js.map +1 -1
  164. package/lib/util/generate-workspace-id.spec.js +18 -7
  165. package/lib/util/generate-workspace-id.spec.js.map +1 -1
  166. package/lib/util/gitpod-cookie.d.ts +1 -1
  167. package/lib/util/gitpod-cookie.d.ts.map +1 -1
  168. package/lib/util/gitpod-cookie.js +0 -3
  169. package/lib/util/gitpod-cookie.js.map +1 -1
  170. package/lib/util/gitpod-host-url.d.ts.map +1 -1
  171. package/lib/util/gitpod-host-url.js +31 -29
  172. package/lib/util/gitpod-host-url.js.map +1 -1
  173. package/lib/util/gitpod-host-url.spec.d.ts.map +1 -1
  174. package/lib/util/gitpod-host-url.spec.js +15 -5
  175. package/lib/util/gitpod-host-url.spec.js.map +1 -1
  176. package/lib/util/grpc.d.ts.map +1 -1
  177. package/lib/util/grpc.js.map +1 -1
  178. package/lib/util/jaeger-client-types.d.ts.map +1 -1
  179. package/lib/util/logging.d.ts +1 -1
  180. package/lib/util/logging.d.ts.map +1 -1
  181. package/lib/util/logging.js +31 -25
  182. package/lib/util/logging.js.map +1 -1
  183. package/lib/util/make-link.js +5 -5
  184. package/lib/util/make-link.js.map +1 -1
  185. package/lib/util/parse-workspace-id.d.ts.map +1 -1
  186. package/lib/util/parse-workspace-id.js +1 -2
  187. package/lib/util/parse-workspace-id.js.map +1 -1
  188. package/lib/util/parse-workspace-id.spec.d.ts.map +1 -1
  189. package/lib/util/parse-workspace-id.spec.js.map +1 -1
  190. package/lib/util/queue.spec.js +9 -6
  191. package/lib/util/queue.spec.js.map +1 -1
  192. package/lib/util/semaphore.d.ts.map +1 -1
  193. package/lib/util/semaphore.js.map +1 -1
  194. package/lib/util/skip-if.d.ts.map +1 -1
  195. package/lib/util/skip-if.js.map +1 -1
  196. package/lib/util/timeutil.d.ts +1 -0
  197. package/lib/util/timeutil.d.ts.map +1 -1
  198. package/lib/util/timeutil.js +9 -3
  199. package/lib/util/timeutil.js.map +1 -1
  200. package/lib/util/timeutil.spec.d.ts.map +1 -1
  201. package/lib/util/timeutil.spec.js.map +1 -1
  202. package/lib/util/tracing.d.ts +8 -8
  203. package/lib/util/tracing.d.ts.map +1 -1
  204. package/lib/util/tracing.js +19 -20
  205. package/lib/util/tracing.js.map +1 -1
  206. package/lib/util/tracing.spec.js +3 -3
  207. package/lib/util/tracing.spec.js.map +1 -1
  208. package/lib/util/workspace-port-authentication.d.ts +7 -7
  209. package/lib/util/workspace-port-authentication.d.ts.map +1 -1
  210. package/lib/util/workspace-port-authentication.js +8 -11
  211. package/lib/util/workspace-port-authentication.js.map +1 -1
  212. package/lib/workspace-cluster.d.ts +10 -8
  213. package/lib/workspace-cluster.d.ts.map +1 -1
  214. package/lib/workspace-cluster.js +16 -1
  215. package/lib/workspace-cluster.js.map +1 -1
  216. package/lib/workspace-instance.d.ts +37 -3
  217. package/lib/workspace-instance.d.ts.map +1 -1
  218. package/lib/wsready.d.ts +1 -1
  219. package/lib/wsready.d.ts.map +1 -1
  220. package/lib/wsready.js +2 -2
  221. package/package.json +10 -7
  222. package/pkg-yarn.lock +8 -6
  223. package/provenance-bundle.jsonl +1 -1
  224. package/src/accounting-protocol.ts +63 -51
  225. package/src/admin-protocol.ts +33 -20
  226. package/src/analytics.ts +26 -28
  227. package/src/auth.ts +2 -2
  228. package/src/blocked-repositories-protocol.ts +13 -0
  229. package/src/context-url.spec.ts +37 -9
  230. package/src/context-url.ts +96 -40
  231. package/src/email-protocol.ts +5 -6
  232. package/src/encryption/container-module.ts +2 -3
  233. package/src/encryption/encryption-engine.spec.ts +9 -8
  234. package/src/encryption/encryption-engine.ts +14 -14
  235. package/src/encryption/encryption-service.ts +4 -5
  236. package/src/encryption/key-provider.ts +16 -19
  237. package/src/env.ts +0 -22
  238. package/src/experiments/always-default.ts +24 -0
  239. package/src/experiments/configcat-server.ts +37 -0
  240. package/src/experiments/configcat.ts +53 -0
  241. package/src/experiments/types.ts +32 -0
  242. package/src/gitpod-file-parser.spec.ts +55 -61
  243. package/src/gitpod-file-parser.ts +16 -17
  244. package/src/gitpod-service.ts +166 -108
  245. package/src/headless-workspace-log.ts +6 -4
  246. package/src/ide-frontend-service.ts +2 -2
  247. package/src/ide-protocol.ts +13 -8
  248. package/src/index.ts +16 -16
  249. package/src/installation-admin-protocol.ts +14 -4
  250. package/src/license-protocol.ts +12 -6
  251. package/src/messaging/browser/connection.ts +45 -47
  252. package/src/messaging/browser/window-connection.ts +39 -29
  253. package/src/messaging/client-call-metrics.ts +70 -71
  254. package/src/messaging/error.ts +10 -3
  255. package/src/messaging/handler.ts +6 -6
  256. package/src/messaging/node/connection.ts +8 -8
  257. package/src/messaging/proxy-factory.ts +23 -30
  258. package/src/oss-allowlist.ts +3 -3
  259. package/src/payment-protocol.ts +2 -2
  260. package/src/permission.ts +40 -32
  261. package/src/plans.ts +236 -189
  262. package/src/protocol.ts +352 -242
  263. package/src/snapshot-url.spec.ts +9 -7
  264. package/src/team-subscription-protocol.ts +57 -23
  265. package/src/teams-projects-protocol.ts +22 -9
  266. package/src/typings/globals.ts +4 -4
  267. package/src/util/analytics.ts +46 -24
  268. package/src/util/async-iterator.ts +4 -5
  269. package/src/util/cancelable.ts +3 -3
  270. package/src/util/date-time.ts +8 -8
  271. package/src/util/debug-app.ts +81 -0
  272. package/src/util/deferred.ts +6 -6
  273. package/src/util/disposable.ts +3 -6
  274. package/src/util/event.ts +9 -11
  275. package/src/util/garbage-collected-cache.ts +3 -6
  276. package/src/util/generate-workspace-id.spec.ts +26 -16
  277. package/src/util/generate-workspace-id.ts +460 -454
  278. package/src/util/gitpod-cookie.ts +8 -9
  279. package/src/util/gitpod-host-url.spec.ts +40 -13
  280. package/src/util/gitpod-host-url.ts +37 -34
  281. package/src/util/grpc.ts +1 -1
  282. package/src/util/jaeger-client-types.ts +2 -2
  283. package/src/util/logging.ts +60 -42
  284. package/src/util/make-link.ts +6 -7
  285. package/src/util/parse-workspace-id.spec.ts +17 -8
  286. package/src/util/parse-workspace-id.ts +5 -6
  287. package/src/util/queue.spec.ts +27 -25
  288. package/src/util/repeat.ts +1 -1
  289. package/src/util/semaphore.ts +4 -6
  290. package/src/util/skip-if.ts +9 -6
  291. package/src/util/timeutil.spec.ts +14 -15
  292. package/src/util/timeutil.ts +21 -11
  293. package/src/util/tracing.spec.ts +28 -23
  294. package/src/util/tracing.ts +58 -54
  295. package/src/util/workspace-port-authentication.ts +10 -13
  296. package/src/workspace-cluster.ts +26 -15
  297. package/src/workspace-instance.ts +68 -20
  298. package/src/wsready.ts +3 -3
  299. package/data/builtin-theia-plugins.json +0 -372
  300. package/lib/messaging/connection-error-handler.d.ts +0 -27
  301. package/lib/messaging/connection-error-handler.d.ts.map +0 -1
  302. package/lib/messaging/connection-error-handler.js +0 -34
  303. package/lib/messaging/connection-error-handler.js.map +0 -1
  304. package/lib/theia-plugins.d.ts +0 -11
  305. package/lib/theia-plugins.d.ts.map +0 -1
  306. package/lib/theia-plugins.js.map +0 -1
  307. package/lib/util/safe-promise.d.ts +0 -11
  308. package/lib/util/safe-promise.d.ts.map +0 -1
  309. package/lib/util/safe-promise.js +0 -31
  310. package/lib/util/safe-promise.js.map +0 -1
  311. package/src/messaging/connection-error-handler.ts +0 -62
  312. package/src/theia-plugins.ts +0 -11
  313. package/src/util/safe-promise.ts +0 -26
@@ -5,32 +5,59 @@
5
5
  */
6
6
 
7
7
  import {
8
- User, WorkspaceInfo, WorkspaceCreationResult, WorkspaceInstanceUser,
9
- WhitelistedRepository, WorkspaceImageBuild, AuthProviderInfo, CreateWorkspaceMode,
10
- Token, UserEnvVarValue, ResolvePluginsParams, PreparePluginUploadParams, Terms,
11
- ResolvedPlugins, Configuration, InstallPluginsParams, UninstallPluginParams, UserInfo, GitpodTokenType,
12
- GitpodToken, AuthProviderEntry, GuessGitTokenScopesParams, GuessedGitTokenScopes, ProjectEnvVar
13
- } from './protocol';
8
+ User,
9
+ WorkspaceInfo,
10
+ WorkspaceCreationResult,
11
+ WorkspaceInstanceUser,
12
+ WhitelistedRepository,
13
+ WorkspaceImageBuild,
14
+ AuthProviderInfo,
15
+ CreateWorkspaceMode,
16
+ Token,
17
+ UserEnvVarValue,
18
+ Terms,
19
+ Configuration,
20
+ UserInfo,
21
+ GitpodTokenType,
22
+ GitpodToken,
23
+ AuthProviderEntry,
24
+ GuessGitTokenScopesParams,
25
+ GuessedGitTokenScopes,
26
+ ProjectEnvVar,
27
+ PrebuiltWorkspace,
28
+ } from "./protocol";
14
29
  import {
15
- Team, TeamMemberInfo,
16
- TeamMembershipInvite, Project, TeamMemberRole, PrebuildWithStatus, StartPrebuildResult, PartialProject
17
- } from './teams-projects-protocol';
18
- import { JsonRpcProxy, JsonRpcServer } from './messaging/proxy-factory';
19
- import { Disposable, CancellationTokenSource } from 'vscode-jsonrpc';
20
- import { HeadlessLogUrls } from './headless-workspace-log';
21
- import { WorkspaceInstance, WorkspaceInstancePort, WorkspaceInstancePhase } from './workspace-instance';
22
- import { AdminServer } from './admin-protocol';
23
- import { GitpodHostUrl } from './util/gitpod-host-url';
24
- import { WebSocketConnectionProvider } from './messaging/browser/connection';
25
- import { PermissionName } from './permission';
26
- import { LicenseService } from './license-protocol';
27
- import { Emitter } from './util/event';
28
- import { AccountStatement, CreditAlert } from './accounting-protocol';
29
- import { GithubUpgradeURL, PlanCoupon } from './payment-protocol';
30
- import { TeamSubscription, TeamSubscriptionSlot, TeamSubscriptionSlotResolved } from './team-subscription-protocol';
31
- import { RemotePageMessage, RemoteTrackMessage, RemoteIdentifyMessage } from './analytics';
32
- import { IDEServer } from './ide-protocol';
33
- import { InstallationAdminSettings } from './installation-admin-protocol';
30
+ Team,
31
+ TeamMemberInfo,
32
+ TeamMembershipInvite,
33
+ Project,
34
+ TeamMemberRole,
35
+ PrebuildWithStatus,
36
+ StartPrebuildResult,
37
+ PartialProject,
38
+ } from "./teams-projects-protocol";
39
+ import { JsonRpcProxy, JsonRpcServer } from "./messaging/proxy-factory";
40
+ import { Disposable, CancellationTokenSource } from "vscode-jsonrpc";
41
+ import { HeadlessLogUrls } from "./headless-workspace-log";
42
+ import { WorkspaceInstance, WorkspaceInstancePort, WorkspaceInstancePhase } from "./workspace-instance";
43
+ import { AdminServer } from "./admin-protocol";
44
+ import { GitpodHostUrl } from "./util/gitpod-host-url";
45
+ import { WebSocketConnectionProvider } from "./messaging/browser/connection";
46
+ import { PermissionName } from "./permission";
47
+ import { LicenseService } from "./license-protocol";
48
+ import { Emitter } from "./util/event";
49
+ import { AccountStatement, CreditAlert } from "./accounting-protocol";
50
+ import { GithubUpgradeURL, PlanCoupon } from "./payment-protocol";
51
+ import {
52
+ TeamSubscription,
53
+ TeamSubscription2,
54
+ TeamSubscriptionSlot,
55
+ TeamSubscriptionSlotResolved,
56
+ } from "./team-subscription-protocol";
57
+ import { RemotePageMessage, RemoteTrackMessage, RemoteIdentifyMessage } from "./analytics";
58
+ import { IDEServer } from "./ide-protocol";
59
+ import { InstallationAdminSettings, TelemetryData } from "./installation-admin-protocol";
60
+ import { Currency } from "./plans";
34
61
 
35
62
  export interface GitpodClient {
36
63
  onInstanceUpdate(instance: WorkspaceInstance): void;
@@ -46,7 +73,7 @@ export interface GitpodClient {
46
73
  //#endregion
47
74
  }
48
75
 
49
- export const GitpodServer = Symbol('GitpodServer');
76
+ export const GitpodServer = Symbol("GitpodServer");
50
77
  export interface GitpodServer extends JsonRpcServer<GitpodClient>, AdminServer, LicenseService, IDEServer {
51
78
  // User related API
52
79
  getLoggedInUser(): Promise<User>;
@@ -72,6 +99,7 @@ export interface GitpodServer extends JsonRpcServer<GitpodClient>, AdminServer,
72
99
  getWorkspaceOwner(workspaceId: string): Promise<UserInfo | undefined>;
73
100
  getWorkspaceUsers(workspaceId: string): Promise<WorkspaceInstanceUser[]>;
74
101
  getFeaturedRepositories(): Promise<WhitelistedRepository[]>;
102
+ getSuggestedContextURLs(): Promise<string[]>;
75
103
  /**
76
104
  * **Security:**
77
105
  * Sensitive information like an owner token is erased, since it allows access for all team members.
@@ -135,6 +163,7 @@ export interface GitpodServer extends JsonRpcServer<GitpodClient>, AdminServer,
135
163
  // Admin Settings
136
164
  adminGetSettings(): Promise<InstallationAdminSettings>;
137
165
  adminUpdateSettings(settings: InstallationAdminSettings): Promise<void>;
166
+ adminGetTelemetryData(): Promise<TelemetryData>;
138
167
 
139
168
  // Projects
140
169
  getProviderRepositoriesForUser(params: GetProviderRepositoriesParams): Promise<ProviderRepository[]>;
@@ -144,6 +173,8 @@ export interface GitpodServer extends JsonRpcServer<GitpodClient>, AdminServer,
144
173
  getUserProjects(): Promise<Project[]>;
145
174
  getProjectOverview(projectId: string): Promise<Project.Overview | undefined>;
146
175
  findPrebuilds(params: FindPrebuildsParams): Promise<PrebuildWithStatus[]>;
176
+ findPrebuildByWorkspaceID(workspaceId: string): Promise<PrebuiltWorkspace | undefined>;
177
+ getPrebuild(prebuildId: string): Promise<PrebuildWithStatus | undefined>;
147
178
  triggerPrebuild(projectId: string, branchName: string | null): Promise<StartPrebuildResult>;
148
179
  cancelPrebuild(projectId: string, prebuildId: string): Promise<void>;
149
180
  fetchProjectRepositoryConfiguration(projectId: string): Promise<string | undefined>;
@@ -157,8 +188,8 @@ export interface GitpodServer extends JsonRpcServer<GitpodClient>, AdminServer,
157
188
  deleteProjectEnvironmentVariable(variableId: string): Promise<void>;
158
189
 
159
190
  // content service
160
- getContentBlobUploadUrl(name: string): Promise<string>
161
- getContentBlobDownloadUrl(name: string): Promise<string>
191
+ getContentBlobUploadUrl(name: string): Promise<string>;
192
+ getContentBlobDownloadUrl(name: string): Promise<string>;
162
193
 
163
194
  // Gitpod token
164
195
  getGitpodTokens(): Promise<GitpodToken[]>;
@@ -167,6 +198,7 @@ export interface GitpodServer extends JsonRpcServer<GitpodClient>, AdminServer,
167
198
 
168
199
  // misc
169
200
  sendFeedback(feedback: string): Promise<string | undefined>;
201
+ isGitHubAppEnabled(): Promise<boolean>;
170
202
  registerGithubApp(installationId: string): Promise<void>;
171
203
 
172
204
  /**
@@ -195,15 +227,6 @@ export interface GitpodServer extends JsonRpcServer<GitpodClient>, AdminServer,
195
227
  */
196
228
  getLayout(workspaceId: string): Promise<string | undefined>;
197
229
 
198
- /**
199
- * @param params
200
- * @returns promise resolves to an URL to be used for the upload
201
- */
202
- preparePluginUpload(params: PreparePluginUploadParams): Promise<string>
203
- resolvePlugins(workspaceId: string, params: ResolvePluginsParams): Promise<ResolvedPlugins>;
204
- installUserPlugins(params: InstallPluginsParams): Promise<boolean>;
205
- uninstallUserPlugin(params: UninstallPluginParams): Promise<boolean>;
206
-
207
230
  guessGitTokenScopes(params: GuessGitTokenScopesParams): Promise<GuessedGitTokenScopes>;
208
231
 
209
232
  /**
@@ -221,7 +244,9 @@ export interface GitpodServer extends JsonRpcServer<GitpodClient>, AdminServer,
221
244
  */
222
245
  getChargebeeSiteId(): Promise<string>;
223
246
  createPortalSession(): Promise<{}>;
247
+ createTeamPortalSession(teamId: string): Promise<{}>;
224
248
  checkout(planId: string, planQuantity?: number): Promise<{}>;
249
+ teamCheckout(teamId: string, planId: string): Promise<{}>;
225
250
  getAvailableCoupons(): Promise<PlanCoupon[]>;
226
251
  getAppliedCoupons(): Promise<PlanCoupon[]>;
227
252
 
@@ -233,17 +258,28 @@ export interface GitpodServer extends JsonRpcServer<GitpodClient>, AdminServer,
233
258
  subscriptionCancel(subscriptionId: string): Promise<void>;
234
259
  subscriptionCancelDowngrade(subscriptionId: string): Promise<void>;
235
260
 
261
+ getTeamSubscription(teamId: string): Promise<TeamSubscription2 | undefined>;
236
262
  tsGet(): Promise<TeamSubscription[]>;
237
263
  tsGetSlots(): Promise<TeamSubscriptionSlotResolved[]>;
238
- tsGetUnassignedSlot(teamSubscriptionId: string): Promise<TeamSubscriptionSlot | undefined>
264
+ tsGetUnassignedSlot(teamSubscriptionId: string): Promise<TeamSubscriptionSlot | undefined>;
239
265
  tsAddSlots(teamSubscriptionId: string, quantity: number): Promise<void>;
240
- tsAssignSlot(teamSubscriptionId: string, teamSubscriptionSlotId: string, identityStr: string | undefined): Promise<void>
266
+ tsAssignSlot(
267
+ teamSubscriptionId: string,
268
+ teamSubscriptionSlotId: string,
269
+ identityStr: string | undefined,
270
+ ): Promise<void>;
241
271
  tsReassignSlot(teamSubscriptionId: string, teamSubscriptionSlotId: string, newIdentityStr: string): Promise<void>;
242
272
  tsDeactivateSlot(teamSubscriptionId: string, teamSubscriptionSlotId: string): Promise<void>;
243
273
  tsReactivateSlot(teamSubscriptionId: string, teamSubscriptionSlotId: string): Promise<void>;
244
274
 
245
275
  getGithubUpgradeUrls(): Promise<GithubUpgradeURL[]>;
246
276
 
277
+ getStripePublishableKey(): Promise<string>;
278
+ getStripeSetupIntentClientSecret(): Promise<string>;
279
+ findStripeSubscriptionIdForTeam(teamId: string): Promise<string | undefined>;
280
+ subscribeTeamToStripe(teamId: string, setupIntentId: string, currency: Currency): Promise<void>;
281
+ getStripePortalUrlForTeam(teamId: string): Promise<string>;
282
+
247
283
  /**
248
284
  * Analytics
249
285
  */
@@ -252,6 +288,16 @@ export interface GitpodServer extends JsonRpcServer<GitpodClient>, AdminServer,
252
288
  identifyUser(event: RemoteIdentifyMessage): Promise<void>;
253
289
  }
254
290
 
291
+ export interface RateLimiterError {
292
+ method?: string;
293
+
294
+ /**
295
+ * Retry after this many seconds, earliest.
296
+ * cmp.: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Retry-After
297
+ */
298
+ retryAfter: number;
299
+ }
300
+
255
301
  export interface CreateProjectParams {
256
302
  name: string;
257
303
  slug?: string;
@@ -280,7 +326,7 @@ export interface ProviderRepository {
280
326
  account: string;
281
327
  accountAvatarUrl: string;
282
328
  cloneUrl: string;
283
- updatedAt: string;
329
+ updatedAt?: string;
284
330
  installationId?: number;
285
331
  installationUpdatedAt?: string;
286
332
 
@@ -294,15 +340,28 @@ export interface ClientHeaderFields {
294
340
  clientRegion?: string;
295
341
  }
296
342
 
297
- export const WorkspaceTimeoutValues = ["30m", "60m", "180m"] as const;
298
-
299
- export const createServiceMock = function <C extends GitpodClient, S extends GitpodServer>(methods: Partial<JsonRpcProxy<S>>): GitpodServiceImpl<C, S> {
343
+ export const WORKSPACE_TIMEOUT_DEFAULT_SHORT = "short";
344
+ export const WORKSPACE_TIMEOUT_DEFAULT_LONG = "long";
345
+ export const WORKSPACE_TIMEOUT_EXTENDED = "extended";
346
+ export const WORKSPACE_TIMEOUT_EXTENDED_ALT = "180m"; // for backwards compatibility since the IDE uses this
347
+ export const WorkspaceTimeoutValues = [
348
+ WORKSPACE_TIMEOUT_DEFAULT_SHORT,
349
+ WORKSPACE_TIMEOUT_DEFAULT_LONG,
350
+ WORKSPACE_TIMEOUT_EXTENDED,
351
+ WORKSPACE_TIMEOUT_EXTENDED_ALT,
352
+ ] as const;
353
+
354
+ export const createServiceMock = function <C extends GitpodClient, S extends GitpodServer>(
355
+ methods: Partial<JsonRpcProxy<S>>,
356
+ ): GitpodServiceImpl<C, S> {
300
357
  return new GitpodServiceImpl<C, S>(createServerMock(methods));
301
- }
358
+ };
302
359
 
303
- export const createServerMock = function <C extends GitpodClient, S extends GitpodServer>(methods: Partial<JsonRpcProxy<S>>): JsonRpcProxy<S> {
304
- methods.setClient = methods.setClient || (() => { });
305
- methods.dispose = methods.dispose || (() => { });
360
+ export const createServerMock = function <C extends GitpodClient, S extends GitpodServer>(
361
+ methods: Partial<JsonRpcProxy<S>>,
362
+ ): JsonRpcProxy<S> {
363
+ methods.setClient = methods.setClient || (() => {});
364
+ methods.dispose = methods.dispose || (() => {});
306
365
  return new Proxy<JsonRpcProxy<S>>(methods as any as JsonRpcProxy<S>, {
307
366
  // @ts-ignore
308
367
  get: (target: S, property: keyof S) => {
@@ -311,25 +370,26 @@ export const createServerMock = function <C extends GitpodClient, S extends Gitp
311
370
  throw new Error(`Method ${property} not implemented`);
312
371
  }
313
372
  return result;
314
- }
373
+ },
315
374
  });
316
- }
375
+ };
317
376
 
318
377
  type WorkspaceTimeoutDurationTuple = typeof WorkspaceTimeoutValues;
319
378
  export type WorkspaceTimeoutDuration = WorkspaceTimeoutDurationTuple[number];
320
379
 
321
380
  export interface SetWorkspaceTimeoutResult {
322
- resetTimeoutOnWorkspaces: string[]
381
+ resetTimeoutOnWorkspaces: string[];
323
382
  }
324
383
 
325
384
  export interface GetWorkspaceTimeoutResult {
326
- duration: WorkspaceTimeoutDuration
327
- canChange: boolean
385
+ duration: WorkspaceTimeoutDuration;
386
+ durationRaw: string;
387
+ canChange: boolean;
328
388
  }
329
389
 
330
390
  export interface StartWorkspaceResult {
331
- instanceID: string
332
- workspaceURL?: string
391
+ instanceID: string;
392
+ workspaceURL?: string;
333
393
  }
334
394
 
335
395
  export namespace GitpodServer {
@@ -373,23 +433,23 @@ export namespace GitpodServer {
373
433
  readonly roundTripTime?: number;
374
434
  }
375
435
  export interface UpdateOwnAuthProviderParams {
376
- readonly entry: AuthProviderEntry.UpdateEntry | AuthProviderEntry.NewEntry
436
+ readonly entry: AuthProviderEntry.UpdateEntry | AuthProviderEntry.NewEntry;
377
437
  }
378
438
  export interface DeleteOwnAuthProviderParams {
379
- readonly id: string
439
+ readonly id: string;
380
440
  }
381
441
  export type AdmissionLevel = "owner" | "everyone";
382
442
  export type PinAction = "pin" | "unpin" | "toggle";
383
443
  export interface GenerateNewGitpodTokenOptions {
384
- name?: string
385
- type: GitpodTokenType
386
- scopes?: string[]
444
+ name?: string;
445
+ type: GitpodTokenType;
446
+ scopes?: string[];
387
447
  }
388
448
  }
389
449
 
390
- export const GitpodServerPath = '/gitpod';
450
+ export const GitpodServerPath = "/gitpod";
391
451
 
392
- export const GitpodServerProxy = Symbol('GitpodServerProxy');
452
+ export const GitpodServerProxy = Symbol("GitpodServerProxy");
393
453
  export type GitpodServerProxy<S extends GitpodServer> = JsonRpcProxy<S>;
394
454
 
395
455
  export class GitpodCompositeClient<Client extends GitpodClient> implements GitpodClient {
@@ -403,8 +463,8 @@ export class GitpodCompositeClient<Client extends GitpodClient> implements Gitpo
403
463
  if (index > -1) {
404
464
  this.clients.splice(index, 1);
405
465
  }
406
- }
407
- }
466
+ },
467
+ };
408
468
  }
409
469
 
410
470
  onInstanceUpdate(instance: WorkspaceInstance): void {
@@ -413,7 +473,7 @@ export class GitpodCompositeClient<Client extends GitpodClient> implements Gitpo
413
473
  try {
414
474
  client.onInstanceUpdate(instance);
415
475
  } catch (error) {
416
- console.error(error)
476
+ console.error(error);
417
477
  }
418
478
  }
419
479
  }
@@ -425,19 +485,22 @@ export class GitpodCompositeClient<Client extends GitpodClient> implements Gitpo
425
485
  try {
426
486
  client.onPrebuildUpdate(update);
427
487
  } catch (error) {
428
- console.error(error)
488
+ console.error(error);
429
489
  }
430
490
  }
431
491
  }
432
492
  }
433
493
 
434
- onWorkspaceImageBuildLogs(info: WorkspaceImageBuild.StateInfo, content: WorkspaceImageBuild.LogContent | undefined): void {
494
+ onWorkspaceImageBuildLogs(
495
+ info: WorkspaceImageBuild.StateInfo,
496
+ content: WorkspaceImageBuild.LogContent | undefined,
497
+ ): void {
435
498
  for (const client of this.clients) {
436
499
  if (client.onWorkspaceImageBuildLogs) {
437
500
  try {
438
501
  client.onWorkspaceImageBuildLogs(info, content);
439
502
  } catch (error) {
440
- console.error(error)
503
+ console.error(error);
441
504
  }
442
505
  }
443
506
  }
@@ -449,7 +512,7 @@ export class GitpodCompositeClient<Client extends GitpodClient> implements Gitpo
449
512
  try {
450
513
  client.notifyDidOpenConnection();
451
514
  } catch (error) {
452
- console.error(error)
515
+ console.error(error);
453
516
  }
454
517
  }
455
518
  }
@@ -461,7 +524,7 @@ export class GitpodCompositeClient<Client extends GitpodClient> implements Gitpo
461
524
  try {
462
525
  client.notifyDidCloseConnection();
463
526
  } catch (error) {
464
- console.error(error)
527
+ console.error(error);
465
528
  }
466
529
  }
467
530
  }
@@ -473,64 +536,61 @@ export class GitpodCompositeClient<Client extends GitpodClient> implements Gitpo
473
536
  try {
474
537
  client.onCreditAlert(creditAlert);
475
538
  } catch (error) {
476
- console.error(error)
539
+ console.error(error);
477
540
  }
478
541
  }
479
542
  }
480
543
  }
481
-
482
544
  }
483
545
 
484
546
  export type GitpodService = GitpodServiceImpl<GitpodClient, GitpodServer>;
485
547
 
486
- const hasWindow = (typeof window !== 'undefined');
548
+ const hasWindow = typeof window !== "undefined";
487
549
  const phasesOrder: Record<WorkspaceInstancePhase, number> = {
488
550
  unknown: 0,
489
551
  preparing: 1,
490
- pending: 2,
491
- creating: 3,
492
- initializing: 4,
493
- running: 5,
494
- interrupted: 6,
495
- stopping: 7,
496
- stopped: 8
552
+ building: 2,
553
+ pending: 3,
554
+ creating: 4,
555
+ initializing: 5,
556
+ running: 6,
557
+ interrupted: 7,
558
+ stopping: 8,
559
+ stopped: 9,
497
560
  };
498
561
  export class WorkspaceInstanceUpdateListener {
499
562
  private readonly onDidChangeEmitter = new Emitter<void>();
500
563
  readonly onDidChange = this.onDidChangeEmitter.event;
501
564
 
502
- private source: 'sync' | 'update' = 'sync';
565
+ private source: "sync" | "update" = "sync";
503
566
 
504
567
  get info(): WorkspaceInfo {
505
568
  return this._info;
506
569
  }
507
570
 
508
- constructor(
509
- private readonly service: GitpodService,
510
- private _info: WorkspaceInfo
511
- ) {
571
+ constructor(private readonly service: GitpodService, private _info: WorkspaceInfo) {
512
572
  service.registerClient({
513
- onInstanceUpdate: instance => {
573
+ onInstanceUpdate: (instance) => {
514
574
  if (this.isOutOfOrder(instance)) {
515
575
  return;
516
576
  }
517
577
  this.cancelSync();
518
578
  this._info.latestInstance = instance;
519
- this.source = 'update';
579
+ this.source = "update";
520
580
  this.onDidChangeEmitter.fire(undefined);
521
581
  },
522
582
  notifyDidOpenConnection: () => {
523
583
  this.sync();
524
- }
584
+ },
525
585
  });
526
586
  if (hasWindow) {
527
587
  // learn about page lifecycle here: https://developers.google.com/web/updates/2018/07/page-lifecycle-api
528
- window.document.addEventListener('visibilitychange', async () => {
529
- if (window.document.visibilityState === 'visible') {
588
+ window.document.addEventListener("visibilitychange", async () => {
589
+ if (window.document.visibilityState === "visible") {
530
590
  this.sync();
531
591
  }
532
592
  });
533
- window.addEventListener('pageshow', e => {
593
+ window.addEventListener("pageshow", (e) => {
534
594
  if (e.persisted) {
535
595
  this.sync();
536
596
  }
@@ -558,12 +618,12 @@ export class WorkspaceInstanceUpdateListener {
558
618
  return;
559
619
  }
560
620
  this._info = info;
561
- this.source = 'sync';
621
+ this.source = "sync";
562
622
  this.onDidChangeEmitter.fire(undefined);
563
623
  } catch (e) {
564
- console.error('failed to sync workspace instance:', e)
624
+ console.error("failed to sync workspace instance:", e);
565
625
  }
566
- })
626
+ });
567
627
  }
568
628
  private cancelSync(): void {
569
629
  if (this.syncTokenSource) {
@@ -580,7 +640,7 @@ export class WorkspaceInstanceUpdateListener {
580
640
  if (instance.workspaceId !== this._info.workspace.id) {
581
641
  return true;
582
642
  }
583
- if (this.source === 'update') {
643
+ if (this.source === "update") {
584
644
  return false;
585
645
  }
586
646
  if (instance.id !== this.info.latestInstance?.id) {
@@ -588,15 +648,13 @@ export class WorkspaceInstanceUpdateListener {
588
648
  }
589
649
  return phasesOrder[instance.status.phase] < phasesOrder[this.info.latestInstance.status.phase];
590
650
  }
591
-
592
651
  }
593
652
 
594
653
  export interface GitpodServiceOptions {
595
- onReconnect?: () => (void | Promise<void>)
654
+ onReconnect?: () => void | Promise<void>;
596
655
  }
597
656
 
598
657
  export class GitpodServiceImpl<Client extends GitpodClient, Server extends GitpodServer> {
599
-
600
658
  private readonly compositeClient = new GitpodCompositeClient<Client>();
601
659
 
602
660
  constructor(public readonly server: JsonRpcProxy<Server>, private options?: GitpodServiceOptions) {
@@ -611,7 +669,8 @@ export class GitpodServiceImpl<Client extends GitpodClient, Server extends Gitpo
611
669
 
612
670
  private readonly instanceListeners = new Map<string, Promise<WorkspaceInstanceUpdateListener>>();
613
671
  listenToInstance(workspaceId: string): Promise<WorkspaceInstanceUpdateListener> {
614
- const listener = this.instanceListeners.get(workspaceId) ||
672
+ const listener =
673
+ this.instanceListeners.get(workspaceId) ||
615
674
  (async () => {
616
675
  const info = await this.server.getWorkspace(workspaceId);
617
676
  return new WorkspaceInstanceUpdateListener(this, info);
@@ -627,26 +686,25 @@ export class GitpodServiceImpl<Client extends GitpodClient, Server extends Gitpo
627
686
  }
628
687
  }
629
688
 
630
- export function createGitpodService<C extends GitpodClient, S extends GitpodServer>(serverUrl: string | Promise<string>) {
689
+ export function createGitpodService<C extends GitpodClient, S extends GitpodServer>(
690
+ serverUrl: string | Promise<string>,
691
+ ) {
631
692
  const toWsUrl = (serverUrl: string) => {
632
- return new GitpodHostUrl(serverUrl)
633
- .asWebsocket()
634
- .withApi({ pathname: GitpodServerPath })
635
- .toString();
693
+ return new GitpodHostUrl(serverUrl).asWebsocket().withApi({ pathname: GitpodServerPath }).toString();
636
694
  };
637
695
  let url: string | Promise<string>;
638
696
  if (typeof serverUrl === "string") {
639
697
  url = toWsUrl(serverUrl);
640
698
  } else {
641
- url = serverUrl.then(url => toWsUrl(url));
699
+ url = serverUrl.then((url) => toWsUrl(url));
642
700
  }
643
701
 
644
702
  const connectionProvider = new WebSocketConnectionProvider();
645
- let onReconnect = () => { };
703
+ let onReconnect = () => {};
646
704
  const gitpodServer = connectionProvider.createProxy<S>(url, undefined, {
647
- onListening: socket => {
705
+ onListening: (socket) => {
648
706
  onReconnect = () => socket.reconnect();
649
- }
707
+ },
650
708
  });
651
709
  return new GitpodServiceImpl<C, S>(gitpodServer, { onReconnect });
652
- }
710
+ }
@@ -4,21 +4,23 @@
4
4
  * See License-AGPL.txt in the project root for license information.
5
5
  */
6
6
 
7
-
8
7
  export enum HeadlessWorkspaceEventType {
9
8
  LogOutput = "log-output",
10
9
  FinishedSuccessfully = "finish-success",
11
10
  FinishedButFailed = "finish-fail",
12
11
  AbortedTimedOut = "aborted-timeout",
13
12
  Aborted = "aborted",
14
- Started = "started"
13
+ Failed = "failed",
14
+ Started = "started",
15
15
  }
16
16
  export namespace HeadlessWorkspaceEventType {
17
17
  export function isRunning(t: HeadlessWorkspaceEventType) {
18
18
  return t === HeadlessWorkspaceEventType.LogOutput;
19
19
  }
20
20
  export function didFinish(t: HeadlessWorkspaceEventType) {
21
- return t === HeadlessWorkspaceEventType.FinishedButFailed || t === HeadlessWorkspaceEventType.FinishedSuccessfully;
21
+ return (
22
+ t === HeadlessWorkspaceEventType.FinishedButFailed || t === HeadlessWorkspaceEventType.FinishedSuccessfully
23
+ );
22
24
  }
23
25
  }
24
26
 
@@ -35,4 +37,4 @@ export interface HeadlessLogUrls {
35
37
 
36
38
  /** cmp. @const HEADLESS_LOG_STREAM_STATUS_CODE_REGEX */
37
39
  export const HEADLESS_LOG_STREAM_STATUS_CODE = "X-LogStream-StatusCode";
38
- export const HEADLESS_LOG_STREAM_STATUS_CODE_REGEX = /X-LogStream-StatusCode: ([0-9]{3})/;
40
+ export const HEADLESS_LOG_STREAM_STATUS_CODE_REGEX = /X-LogStream-StatusCode: ([0-9]{3})/;
@@ -7,7 +7,7 @@
7
7
  import { Event } from "./util/event";
8
8
  import { Disposable } from "./util/disposable";
9
9
 
10
- export type IDEFrontendState = 'init' | 'ready' | 'terminated';
10
+ export type IDEFrontendState = "init" | "ready" | "terminated";
11
11
 
12
12
  export interface IDEFrontendService {
13
13
  readonly state: IDEFrontendState;
@@ -25,4 +25,4 @@ export interface IDEFrontendService {
25
25
  * confirmation dialogs for stopped workspaces.
26
26
  */
27
27
  start(): Disposable;
28
- }
28
+ }
@@ -45,12 +45,12 @@ export interface IDEClient {
45
45
  /**
46
46
  * Desktop IDEs supported by the client.
47
47
  */
48
- desktopIDEs?: string[]
48
+ desktopIDEs?: string[];
49
49
 
50
50
  /**
51
51
  * Steps to install the client on user machine.
52
52
  */
53
- installationSteps?: string[]
53
+ installationSteps?: string[];
54
54
  }
55
55
 
56
56
  export interface IDEOption {
@@ -67,12 +67,12 @@ export interface IDEOption {
67
67
  /**
68
68
  * The type of the IDE, currently 'browser' or 'desktop'.
69
69
  */
70
- type: 'browser' | 'desktop';
70
+ type: "browser" | "desktop";
71
71
 
72
72
  /**
73
- * The logo for the IDE. That could be a key in (see
74
- * components/dashboard/src/images/ideLogos.ts) or a URL.
75
- */
73
+ * The logo for the IDE. That could be a key in (see
74
+ * components/dashboard/src/images/ideLogos.ts) or a URL.
75
+ */
76
76
  logo: string;
77
77
 
78
78
  /**
@@ -93,8 +93,8 @@ export interface IDEOption {
93
93
  notes?: string[];
94
94
 
95
95
  /**
96
- * If `true` this IDE option is not visible in the IDE preferences.
97
- */
96
+ * If `true` this IDE option is not visible in the IDE preferences.
97
+ */
98
98
  hidden?: boolean;
99
99
 
100
100
  /**
@@ -102,6 +102,11 @@ export interface IDEOption {
102
102
  */
103
103
  image: string;
104
104
 
105
+ /**
106
+ * The latest image ref to the IDE image, this image ref always resolve to digest.
107
+ */
108
+ latestImage?: string;
109
+
105
110
  /**
106
111
  * When this is `true`, the tag of this image is resolved to the latest
107
112
  * image digest regularly.