@gitpod/gitpod-protocol 0.1.5-private-repos-after-cancellation.0 → 0.1.5-protected-secrets.0

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 (407) hide show
  1. package/data/gitpod-schema.json +145 -7
  2. package/lib/accounting-protocol.d.ts +18 -12
  3. package/lib/accounting-protocol.d.ts.map +1 -1
  4. package/lib/accounting-protocol.js +43 -42
  5. package/lib/accounting-protocol.js.map +1 -1
  6. package/lib/admin-protocol.d.ts +28 -4
  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 +12 -2
  11. package/lib/analytics.d.ts.map +1 -1
  12. package/lib/analytics.js.map +1 -1
  13. package/lib/attribution.d.ts +23 -0
  14. package/lib/attribution.d.ts.map +1 -0
  15. package/lib/attribution.js +50 -0
  16. package/lib/attribution.js.map +1 -0
  17. package/lib/auth.d.ts.map +1 -1
  18. package/lib/billing-mode.d.ts +43 -0
  19. package/lib/billing-mode.d.ts.map +1 -0
  20. package/lib/billing-mode.js +44 -0
  21. package/lib/billing-mode.js.map +1 -0
  22. package/lib/blocked-repositories-protocol.d.ts +13 -0
  23. package/lib/blocked-repositories-protocol.d.ts.map +1 -0
  24. package/lib/blocked-repositories-protocol.js +8 -0
  25. package/lib/blocked-repositories-protocol.js.map +1 -0
  26. package/lib/context-url.d.ts +18 -5
  27. package/lib/context-url.d.ts.map +1 -1
  28. package/lib/context-url.js +63 -10
  29. package/lib/context-url.js.map +1 -1
  30. package/lib/context-url.spec.d.ts +2 -0
  31. package/lib/context-url.spec.d.ts.map +1 -1
  32. package/lib/context-url.spec.js +81 -48
  33. package/lib/context-url.spec.js.map +1 -1
  34. package/lib/encryption/container-module.d.ts.map +1 -1
  35. package/lib/encryption/container-module.js +4 -4
  36. package/lib/encryption/container-module.js.map +1 -1
  37. package/lib/encryption/encryption-engine.d.ts.map +1 -1
  38. package/lib/encryption/encryption-engine.js +25 -26
  39. package/lib/encryption/encryption-engine.js.map +1 -1
  40. package/lib/encryption/encryption-engine.spec.d.ts.map +1 -1
  41. package/lib/encryption/encryption-engine.spec.js +29 -37
  42. package/lib/encryption/encryption-engine.spec.js.map +1 -1
  43. package/lib/encryption/encryption-service.d.ts.map +1 -1
  44. package/lib/encryption/encryption-service.js +30 -44
  45. package/lib/encryption/encryption-service.js.map +1 -1
  46. package/lib/encryption/key-provider.d.ts.map +1 -1
  47. package/lib/encryption/key-provider.js +31 -38
  48. package/lib/encryption/key-provider.js.map +1 -1
  49. package/lib/env.d.ts +0 -6
  50. package/lib/env.d.ts.map +1 -1
  51. package/lib/env.js +7 -27
  52. package/lib/env.js.map +1 -1
  53. package/lib/experiments/always-default.d.ts +8 -0
  54. package/lib/experiments/always-default.d.ts.map +1 -0
  55. package/lib/experiments/always-default.js +20 -0
  56. package/lib/experiments/always-default.js.map +1 -0
  57. package/lib/experiments/configcat-server.d.ts +10 -0
  58. package/lib/experiments/configcat-server.d.ts.map +1 -0
  59. package/lib/experiments/configcat-server.js +36 -0
  60. package/lib/experiments/configcat-server.js.map +1 -0
  61. package/lib/experiments/configcat.d.ts +21 -0
  62. package/lib/experiments/configcat.d.ts.map +1 -0
  63. package/lib/experiments/configcat.js +51 -0
  64. package/lib/experiments/configcat.js.map +1 -0
  65. package/lib/experiments/types.d.ts +22 -0
  66. package/lib/experiments/types.d.ts.map +1 -0
  67. package/lib/experiments/types.js +10 -0
  68. package/lib/experiments/types.js.map +1 -0
  69. package/lib/gitpod-file-parser.d.ts.map +1 -1
  70. package/lib/gitpod-file-parser.js +26 -42
  71. package/lib/gitpod-file-parser.js.map +1 -1
  72. package/lib/gitpod-file-parser.spec.js +145 -142
  73. package/lib/gitpod-file-parser.spec.js.map +1 -1
  74. package/lib/gitpod-service.d.ts +127 -52
  75. package/lib/gitpod-service.d.ts.map +1 -1
  76. package/lib/gitpod-service.js +190 -315
  77. package/lib/gitpod-service.js.map +1 -1
  78. package/lib/headless-workspace-log.d.ts +3 -13
  79. package/lib/headless-workspace-log.d.ts.map +1 -1
  80. package/lib/headless-workspace-log.js +3 -8
  81. package/lib/headless-workspace-log.js.map +1 -1
  82. package/lib/ide-frontend-service.d.ts +1 -1
  83. package/lib/ide-protocol.d.ts +113 -0
  84. package/lib/ide-protocol.d.ts.map +1 -0
  85. package/lib/{util/without.js → ide-protocol.js} +2 -2
  86. package/lib/ide-protocol.js.map +1 -0
  87. package/lib/index.d.ts +16 -12
  88. package/lib/index.d.ts.map +1 -1
  89. package/lib/index.js +5 -1
  90. package/lib/index.js.map +1 -1
  91. package/lib/installation-admin-protocol.d.ts +30 -0
  92. package/lib/installation-admin-protocol.d.ts.map +1 -0
  93. package/lib/installation-admin-protocol.js +31 -0
  94. package/lib/installation-admin-protocol.js.map +1 -0
  95. package/lib/license-protocol.d.ts +7 -0
  96. package/lib/license-protocol.d.ts.map +1 -1
  97. package/lib/license-protocol.js.map +1 -1
  98. package/lib/messaging/browser/connection.d.ts +3 -3
  99. package/lib/messaging/browser/connection.d.ts.map +1 -1
  100. package/lib/messaging/browser/connection.js +173 -36
  101. package/lib/messaging/browser/connection.js.map +1 -1
  102. package/lib/messaging/browser/window-connection.d.ts +4 -4
  103. package/lib/messaging/browser/window-connection.d.ts.map +1 -1
  104. package/lib/messaging/browser/window-connection.js +42 -59
  105. package/lib/messaging/browser/window-connection.js.map +1 -1
  106. package/lib/messaging/client-call-metrics.d.ts +19 -0
  107. package/lib/messaging/client-call-metrics.d.ts.map +1 -0
  108. package/lib/messaging/client-call-metrics.js +82 -0
  109. package/lib/messaging/client-call-metrics.js.map +1 -0
  110. package/lib/messaging/error.d.ts +10 -2
  111. package/lib/messaging/error.d.ts.map +1 -1
  112. package/lib/messaging/error.js +20 -4
  113. package/lib/messaging/error.js.map +1 -1
  114. package/lib/messaging/handler.d.ts +10 -0
  115. package/lib/messaging/handler.d.ts.map +1 -1
  116. package/lib/messaging/handler.js +1 -1
  117. package/lib/messaging/node/connection.d.ts +1 -17
  118. package/lib/messaging/node/connection.d.ts.map +1 -1
  119. package/lib/messaging/node/connection.js +24 -60
  120. package/lib/messaging/node/connection.js.map +1 -1
  121. package/lib/messaging/proxy-factory.d.ts +3 -1
  122. package/lib/messaging/proxy-factory.d.ts.map +1 -1
  123. package/lib/messaging/proxy-factory.js +75 -162
  124. package/lib/messaging/proxy-factory.js.map +1 -1
  125. package/lib/oss-allowlist.d.ts +14 -0
  126. package/lib/oss-allowlist.d.ts.map +1 -0
  127. package/lib/oss-allowlist.js +8 -0
  128. package/lib/oss-allowlist.js.map +1 -0
  129. package/lib/payment-protocol.d.ts.map +1 -1
  130. package/lib/payment-protocol.js +1 -1
  131. package/lib/payment-protocol.js.map +1 -1
  132. package/lib/permission.d.ts +9 -4
  133. package/lib/permission.d.ts.map +1 -1
  134. package/lib/permission.js +39 -31
  135. package/lib/permission.js.map +1 -1
  136. package/lib/plans.d.ts +5 -4
  137. package/lib/plans.d.ts.map +1 -1
  138. package/lib/plans.js +229 -209
  139. package/lib/plans.js.map +1 -1
  140. package/lib/protocol.d.ts +234 -143
  141. package/lib/protocol.d.ts.map +1 -1
  142. package/lib/protocol.js +339 -193
  143. package/lib/protocol.js.map +1 -1
  144. package/{src/util/without.ts → lib/protocol.spec.d.ts} +2 -3
  145. package/lib/protocol.spec.d.ts.map +1 -0
  146. package/lib/protocol.spec.js +127 -0
  147. package/lib/protocol.spec.js.map +1 -0
  148. package/lib/snapshot-url.d.ts +14 -0
  149. package/lib/snapshot-url.d.ts.map +1 -0
  150. package/lib/snapshot-url.js +26 -0
  151. package/lib/snapshot-url.js.map +1 -0
  152. package/{src/theia-plugins.ts → lib/snapshot-url.spec.d.ts} +2 -6
  153. package/lib/snapshot-url.spec.d.ts.map +1 -0
  154. package/lib/snapshot-url.spec.js +41 -0
  155. package/lib/snapshot-url.spec.js.map +1 -0
  156. package/lib/team-subscription-protocol.d.ts +22 -4
  157. package/lib/team-subscription-protocol.d.ts.map +1 -1
  158. package/lib/team-subscription-protocol.js +33 -18
  159. package/lib/team-subscription-protocol.js.map +1 -1
  160. package/lib/teams-projects-protocol.d.ts +130 -0
  161. package/lib/teams-projects-protocol.d.ts.map +1 -0
  162. package/lib/teams-projects-protocol.js +30 -0
  163. package/lib/teams-projects-protocol.js.map +1 -0
  164. package/lib/typings/globals.d.ts +2 -2
  165. package/lib/typings/globals.d.ts.map +1 -1
  166. package/lib/usage.d.ts +61 -0
  167. package/lib/usage.d.ts.map +1 -0
  168. package/lib/usage.js +14 -0
  169. package/lib/usage.js.map +1 -0
  170. package/lib/util/analytics.d.ts.map +1 -1
  171. package/lib/util/analytics.js +44 -26
  172. package/lib/util/analytics.js.map +1 -1
  173. package/lib/util/async-iterator.d.ts.map +1 -1
  174. package/lib/util/async-iterator.js +57 -135
  175. package/lib/util/async-iterator.js.map +1 -1
  176. package/lib/util/cancelable.js +17 -59
  177. package/lib/util/cancelable.js.map +1 -1
  178. package/lib/util/date-time.js +11 -11
  179. package/lib/util/date-time.js.map +1 -1
  180. package/lib/util/debug-app.d.ts +25 -0
  181. package/lib/util/debug-app.d.ts.map +1 -0
  182. package/lib/util/debug-app.js +100 -0
  183. package/lib/util/debug-app.js.map +1 -0
  184. package/lib/util/deferred.js +10 -12
  185. package/lib/util/deferred.js.map +1 -1
  186. package/lib/util/disposable.d.ts.map +1 -1
  187. package/lib/util/disposable.js +27 -40
  188. package/lib/util/disposable.js.map +1 -1
  189. package/lib/util/event.d.ts.map +1 -1
  190. package/lib/util/event.js +63 -77
  191. package/lib/util/event.js.map +1 -1
  192. package/lib/util/garbage-collected-cache.d.ts +1 -0
  193. package/lib/util/garbage-collected-cache.d.ts.map +1 -1
  194. package/lib/util/garbage-collected-cache.js +32 -47
  195. package/lib/util/garbage-collected-cache.js.map +1 -1
  196. package/lib/util/generate-workspace-id.d.ts +6 -1
  197. package/lib/util/generate-workspace-id.d.ts.map +1 -1
  198. package/lib/util/generate-workspace-id.js +469 -504
  199. package/lib/util/generate-workspace-id.js.map +1 -1
  200. package/lib/util/generate-workspace-id.spec.js +68 -78
  201. package/lib/util/generate-workspace-id.spec.js.map +1 -1
  202. package/lib/util/gitpod-cookie.d.ts +20 -0
  203. package/lib/util/gitpod-cookie.d.ts.map +1 -0
  204. package/lib/util/gitpod-cookie.js +41 -0
  205. package/lib/util/gitpod-cookie.js.map +1 -0
  206. package/lib/util/gitpod-host-url.d.ts +4 -1
  207. package/lib/util/gitpod-host-url.d.ts.map +1 -1
  208. package/lib/util/gitpod-host-url.js +124 -114
  209. package/lib/util/gitpod-host-url.js.map +1 -1
  210. package/lib/util/gitpod-host-url.spec.d.ts.map +1 -1
  211. package/lib/util/gitpod-host-url.spec.js +97 -135
  212. package/lib/util/gitpod-host-url.spec.js.map +1 -1
  213. package/lib/util/grpc.d.ts +34 -0
  214. package/lib/util/grpc.d.ts.map +1 -0
  215. package/lib/util/grpc.js +90 -0
  216. package/lib/util/grpc.js.map +1 -0
  217. package/lib/util/jaeger-client-types.d.ts +68 -0
  218. package/lib/util/jaeger-client-types.d.ts.map +1 -0
  219. package/lib/{theia-plugins.js → util/jaeger-client-types.js} +1 -1
  220. package/lib/util/jaeger-client-types.js.map +1 -0
  221. package/lib/util/logging.d.ts +49 -33
  222. package/lib/util/logging.d.ts.map +1 -1
  223. package/lib/util/logging.js +132 -129
  224. package/lib/util/logging.js.map +1 -1
  225. package/lib/util/logging.spec.d.ts +7 -0
  226. package/lib/util/logging.spec.d.ts.map +1 -0
  227. package/lib/util/logging.spec.js +52 -0
  228. package/lib/util/logging.spec.js.map +1 -0
  229. package/lib/util/make-link.js +5 -5
  230. package/lib/util/make-link.js.map +1 -1
  231. package/lib/util/nice-grpc.d.ts +9 -0
  232. package/lib/util/nice-grpc.d.ts.map +1 -0
  233. package/lib/util/nice-grpc.js +119 -0
  234. package/lib/util/nice-grpc.js.map +1 -0
  235. package/lib/util/parse-workspace-id.d.ts +10 -0
  236. package/lib/util/parse-workspace-id.d.ts.map +1 -1
  237. package/lib/util/parse-workspace-id.js +30 -7
  238. package/lib/util/parse-workspace-id.js.map +1 -1
  239. package/lib/util/parse-workspace-id.spec.d.ts +4 -0
  240. package/lib/util/parse-workspace-id.spec.d.ts.map +1 -1
  241. package/lib/util/parse-workspace-id.spec.js +123 -84
  242. package/lib/util/parse-workspace-id.spec.js.map +1 -1
  243. package/lib/util/queue.js +16 -55
  244. package/lib/util/queue.js.map +1 -1
  245. package/lib/util/queue.spec.js +147 -288
  246. package/lib/util/queue.spec.js.map +1 -1
  247. package/lib/util/repeat.d.ts +15 -0
  248. package/lib/util/repeat.d.ts.map +1 -0
  249. package/lib/util/repeat.js +55 -0
  250. package/lib/util/repeat.js.map +1 -0
  251. package/lib/util/semaphore.d.ts.map +1 -1
  252. package/lib/util/semaphore.js +15 -46
  253. package/lib/util/semaphore.js.map +1 -1
  254. package/lib/util/skip-if.d.ts.map +1 -1
  255. package/lib/util/skip-if.js +6 -6
  256. package/lib/util/skip-if.js.map +1 -1
  257. package/lib/util/timeutil.d.ts +2 -0
  258. package/lib/util/timeutil.d.ts.map +1 -1
  259. package/lib/util/timeutil.js +29 -17
  260. package/lib/util/timeutil.js.map +1 -1
  261. package/lib/util/timeutil.spec.d.ts +2 -0
  262. package/lib/util/timeutil.spec.d.ts.map +1 -1
  263. package/lib/util/timeutil.spec.js +54 -23
  264. package/lib/util/timeutil.spec.js.map +1 -1
  265. package/lib/util/tracing.d.ts +52 -6
  266. package/lib/util/tracing.d.ts.map +1 -1
  267. package/lib/util/tracing.js +197 -64
  268. package/lib/util/tracing.js.map +1 -1
  269. package/lib/util/tracing.spec.d.ts +7 -0
  270. package/lib/util/tracing.spec.d.ts.map +1 -0
  271. package/lib/util/tracing.spec.js +121 -0
  272. package/lib/util/tracing.spec.js.map +1 -0
  273. package/lib/util/workspace-port-authentication.d.ts +7 -7
  274. package/lib/util/workspace-port-authentication.d.ts.map +1 -1
  275. package/lib/util/workspace-port-authentication.js +9 -12
  276. package/lib/util/workspace-port-authentication.js.map +1 -1
  277. package/lib/webhook-event.d.ts +44 -0
  278. package/lib/webhook-event.d.ts.map +1 -0
  279. package/lib/webhook-event.js +8 -0
  280. package/lib/webhook-event.js.map +1 -0
  281. package/lib/workspace-class.d.ts +14 -0
  282. package/lib/workspace-class.d.ts.map +1 -0
  283. package/lib/workspace-class.js +8 -0
  284. package/lib/workspace-class.js.map +1 -0
  285. package/lib/workspace-cluster.d.ts +15 -5
  286. package/lib/workspace-cluster.d.ts.map +1 -1
  287. package/lib/workspace-cluster.js +19 -4
  288. package/lib/workspace-cluster.js.map +1 -1
  289. package/lib/workspace-instance.d.ts +44 -5
  290. package/lib/workspace-instance.d.ts.map +1 -1
  291. package/lib/wsready.d.ts +1 -1
  292. package/lib/wsready.d.ts.map +1 -1
  293. package/lib/wsready.js +2 -2
  294. package/package.json +34 -15
  295. package/pkg-yarn.lock +21 -9
  296. package/provenance-bundle.jsonl +2 -0
  297. package/src/accounting-protocol.ts +66 -54
  298. package/src/admin-protocol.ts +53 -21
  299. package/src/analytics.ts +28 -16
  300. package/src/attribution.ts +59 -0
  301. package/src/auth.ts +2 -2
  302. package/src/billing-mode.ts +81 -0
  303. package/src/blocked-repositories-protocol.ts +13 -0
  304. package/src/context-url.spec.ts +37 -9
  305. package/src/context-url.ts +94 -36
  306. package/src/encryption/container-module.ts +2 -3
  307. package/src/encryption/encryption-engine.spec.ts +9 -8
  308. package/src/encryption/encryption-engine.ts +20 -16
  309. package/src/encryption/encryption-service.ts +4 -5
  310. package/src/encryption/key-provider.ts +16 -19
  311. package/src/env.ts +0 -22
  312. package/src/experiments/always-default.ts +24 -0
  313. package/src/experiments/configcat-server.ts +41 -0
  314. package/src/experiments/configcat.ts +56 -0
  315. package/src/experiments/types.ts +34 -0
  316. package/src/gitpod-file-parser.spec.ts +55 -61
  317. package/src/gitpod-file-parser.ts +16 -17
  318. package/src/gitpod-service.ts +286 -143
  319. package/src/headless-workspace-log.ts +8 -19
  320. package/src/ide-frontend-service.ts +2 -2
  321. package/src/ide-protocol.ts +129 -0
  322. package/src/index.ts +16 -12
  323. package/src/installation-admin-protocol.ts +45 -0
  324. package/src/license-protocol.ts +12 -6
  325. package/src/messaging/browser/connection.ts +185 -21
  326. package/src/messaging/browser/window-connection.ts +39 -29
  327. package/src/messaging/client-call-metrics.ts +77 -0
  328. package/src/messaging/error.ts +29 -7
  329. package/src/messaging/handler.ts +13 -1
  330. package/src/messaging/node/connection.ts +23 -70
  331. package/src/messaging/proxy-factory.ts +35 -34
  332. package/src/oss-allowlist.ts +15 -0
  333. package/src/payment-protocol.ts +2 -2
  334. package/src/permission.ts +40 -33
  335. package/src/plans.ts +240 -189
  336. package/src/protocol.spec.ts +97 -0
  337. package/src/protocol.ts +612 -340
  338. package/src/snapshot-url.spec.ts +27 -0
  339. package/src/snapshot-url.ts +27 -0
  340. package/src/team-subscription-protocol.ts +59 -23
  341. package/src/teams-projects-protocol.ts +166 -0
  342. package/src/typings/globals.ts +4 -4
  343. package/src/usage.ts +71 -0
  344. package/src/util/analytics.ts +56 -18
  345. package/src/util/async-iterator.ts +4 -5
  346. package/src/util/cancelable.ts +3 -3
  347. package/src/util/date-time.ts +8 -8
  348. package/src/util/debug-app.ts +81 -0
  349. package/src/util/deferred.ts +6 -6
  350. package/src/util/disposable.ts +3 -6
  351. package/src/util/event.ts +9 -11
  352. package/src/util/garbage-collected-cache.ts +14 -6
  353. package/src/util/generate-workspace-id.spec.ts +34 -7
  354. package/src/util/generate-workspace-id.ts +464 -440
  355. package/src/util/gitpod-cookie.ts +38 -0
  356. package/src/util/gitpod-host-url.spec.ts +40 -13
  357. package/src/util/gitpod-host-url.ts +61 -37
  358. package/src/util/grpc.ts +104 -0
  359. package/src/util/jaeger-client-types.ts +102 -0
  360. package/src/util/logging.spec.ts +23 -0
  361. package/src/util/logging.ts +156 -74
  362. package/src/util/make-link.ts +6 -7
  363. package/src/util/nice-grpc.ts +93 -0
  364. package/src/util/parse-workspace-id.spec.ts +37 -8
  365. package/src/util/parse-workspace-id.ts +32 -7
  366. package/src/util/queue.spec.ts +27 -25
  367. package/src/util/repeat.ts +45 -0
  368. package/src/util/semaphore.ts +4 -6
  369. package/src/util/skip-if.ts +9 -6
  370. package/src/util/timeutil.spec.ts +40 -14
  371. package/src/util/timeutil.ts +27 -11
  372. package/src/util/tracing.spec.ts +88 -0
  373. package/src/util/tracing.ts +200 -31
  374. package/src/util/workspace-port-authentication.ts +10 -13
  375. package/src/webhook-event.ts +55 -0
  376. package/src/workspace-class.ts +14 -0
  377. package/src/workspace-cluster.ts +29 -10
  378. package/src/workspace-instance.ts +89 -24
  379. package/src/wsready.ts +3 -3
  380. package/data/builtin-theia-plugins.json +0 -372
  381. package/lib/email-protocol.d.ts +0 -50
  382. package/lib/email-protocol.d.ts.map +0 -1
  383. package/lib/email-protocol.js +0 -28
  384. package/lib/email-protocol.js.map +0 -1
  385. package/lib/messaging/connection-error-handler.d.ts +0 -27
  386. package/lib/messaging/connection-error-handler.d.ts.map +0 -1
  387. package/lib/messaging/connection-error-handler.js +0 -46
  388. package/lib/messaging/connection-error-handler.js.map +0 -1
  389. package/lib/theia-plugins.d.ts +0 -11
  390. package/lib/theia-plugins.d.ts.map +0 -1
  391. package/lib/theia-plugins.js.map +0 -1
  392. package/lib/util/repeater.d.ts +0 -22
  393. package/lib/util/repeater.d.ts.map +0 -1
  394. package/lib/util/repeater.js +0 -118
  395. package/lib/util/repeater.js.map +0 -1
  396. package/lib/util/safe-promise.d.ts +0 -11
  397. package/lib/util/safe-promise.d.ts.map +0 -1
  398. package/lib/util/safe-promise.js +0 -34
  399. package/lib/util/safe-promise.js.map +0 -1
  400. package/lib/util/without.d.ts +0 -7
  401. package/lib/util/without.d.ts.map +0 -1
  402. package/lib/util/without.js.map +0 -1
  403. package/src/email-protocol.ts +0 -67
  404. package/src/messaging/connection-error-handler.ts +0 -62
  405. package/src/util/jaeger-client.d.ts +0 -105
  406. package/src/util/repeater.ts +0 -49
  407. package/src/util/safe-promise.ts +0 -26
@@ -4,48 +4,192 @@
4
4
  * See License-AGPL.txt in the project root for license information.
5
5
  */
6
6
 
7
-
8
- import * as opentracing from 'opentracing';
9
- import { TracingConfig, initTracerFromEnv, Sampler, SamplingDecision } from 'jaeger-client';
10
- import { initGlobalTracer } from 'opentracing';
11
- import { injectable } from 'inversify';
7
+ import * as opentracing from "opentracing";
8
+ import { TracingConfig, initTracerFromEnv } from "jaeger-client";
9
+ import { Sampler, SamplingDecision } from "./jaeger-client-types";
10
+ import { initGlobalTracer } from "opentracing";
11
+ import { injectable } from "inversify";
12
+ import { ResponseError } from "vscode-jsonrpc";
13
+ import { log, LogContext } from "./logging";
12
14
 
13
15
  export interface TraceContext {
14
- span?: opentracing.Span
16
+ span?: opentracing.Span;
15
17
  }
18
+ export type TraceContextWithSpan = TraceContext & {
19
+ span: opentracing.Span;
20
+ };
16
21
 
17
22
  export namespace TraceContext {
18
- export function startSpan(operation: string, ctx: TraceContext): opentracing.Span {
19
- const options: opentracing.SpanOptions = {
20
- childOf: ctx.span
23
+ export function startSpan(operation: string, parentCtx?: TraceContext): opentracing.Span {
24
+ const options: opentracing.SpanOptions = {};
25
+
26
+ // references should contain span id.
27
+ // cf. https://github.com/jaegertracing/jaeger-client-node/issues/432
28
+ if (!!parentCtx?.span) {
29
+ const ctx = parentCtx?.span?.context();
30
+ if (ctx && !!ctx.toTraceId() && !!ctx.toSpanId()) {
31
+ options.references = [opentracing.followsFrom(ctx)];
32
+ }
21
33
  }
34
+
22
35
  return opentracing.globalTracer().startSpan(operation, options);
23
36
  }
24
37
 
25
- export function startAsyncSpan(operation: string, ctx: TraceContext): opentracing.Span {
26
- const options: opentracing.SpanOptions = {};
27
- if (!!ctx.span) {
28
- options.references = [opentracing.followsFrom(ctx.span.context())];
38
+ export function childContext(operation: string, parentCtx: TraceContext): TraceContextWithSpan {
39
+ const span = startSpan(operation, parentCtx);
40
+ return { span };
41
+ }
42
+
43
+ export function withSpan(operation: string, callback: (ctx: TraceContext) => void, ctx?: TraceContext): void {
44
+ // if we don't have a parent span, don't create a trace here as those <trace-without-root-spans> are not useful.
45
+ if (!ctx || !ctx.span || !ctx.span.context()) {
46
+ callback({});
47
+ return;
48
+ }
49
+
50
+ const span = TraceContext.startSpan(operation, ctx);
51
+ try {
52
+ callback({ span });
53
+ } catch (e) {
54
+ TraceContext.setError({ span }, e);
55
+ throw e;
56
+ } finally {
57
+ span.finish();
58
+ }
59
+ }
60
+
61
+ export function setError(ctx: TraceContext, err: Error) {
62
+ if (!ctx.span) {
63
+ return;
64
+ }
65
+
66
+ TraceContext.addNestedTags(ctx, {
67
+ error: {
68
+ message: err.message,
69
+ stacktrace: err.stack,
70
+ },
71
+ });
72
+ ctx.span.setTag("error", true);
73
+ }
74
+
75
+ export function setJsonRPCMetadata(ctx: TraceContext, method?: string) {
76
+ if (!ctx.span) {
77
+ return;
78
+ }
79
+
80
+ const tags: { [key: string]: any } = {
81
+ rpc: {
82
+ system: "jsonrpc",
83
+ // version,
84
+ },
85
+ };
86
+ if (method) {
87
+ tags.rpc.method = method;
88
+ }
89
+ addNestedTags(ctx, tags);
90
+ }
91
+
92
+ export function setJsonRPCError(
93
+ ctx: TraceContext,
94
+ method: string,
95
+ err: ResponseError<any>,
96
+ withStatusCode: boolean = false,
97
+ ) {
98
+ if (!ctx.span) {
99
+ return;
100
+ }
101
+ // not use setError bc this is (most likely) a working operation
102
+
103
+ setJsonRPCMetadata(ctx, method);
104
+ // https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/trace/semantic_conventions/rpc.md#json-rpc
105
+ addNestedTags(ctx, {
106
+ rpc: {
107
+ jsonrpc: {
108
+ error_code: err.code,
109
+ error_message: err.message,
110
+ },
111
+ },
112
+ });
113
+
114
+ // the field "status_code" is used by honeycomb to derive insights like success rate, etc. Defaults to "0".
115
+ if (withStatusCode) {
116
+ ctx.span.setTag("status_code", err.code);
29
117
  }
30
- return opentracing.globalTracer().startSpan(operation, options);
31
118
  }
32
119
 
33
- export function logError(ctx: TraceContext, err: Error) {
120
+ export function addJsonRPCParameters(ctx: TraceContext, params: { [key: string]: any }) {
34
121
  if (!ctx.span) {
35
122
  return;
36
123
  }
37
124
 
38
- ctx.span.log({
39
- "error": err.message,
40
- "stacktrace": err.stack
41
- })
42
- ctx.span.setTag("error", true)
125
+ setJsonRPCMetadata(ctx);
126
+ addNestedTags(ctx, {
127
+ rpc: {
128
+ jsonrpc: {
129
+ parameters: params,
130
+ },
131
+ },
132
+ });
133
+ }
134
+
135
+ /**
136
+ * Does what one would expect from `span.addTags`: Calls `span.addTag` for all keys in map, recursively for objects.
137
+ * Example:
138
+ * ```
139
+ * TraceContext.addNestedTags(ctx, {
140
+ * rpc: {
141
+ * system: "jsonrpc",
142
+ * jsonrpc: {
143
+ * version: "1.0",
144
+ * method: "test",
145
+ * parameters: ["abc", "def"],
146
+ * },
147
+ * },
148
+ * });
149
+ * ```
150
+ * gives
151
+ * rpc.system = "jsonrpc"
152
+ * rpc.jsonrpc.version = "1.0"
153
+ * rpc.jsonrpc.method = "test"
154
+ * rpc.jsonrpc.parameters.0 = "abc"
155
+ * rpc.jsonrpc.parameters.1 = "def"
156
+ * @param ctx
157
+ * @param keyValueMap
158
+ * @returns
159
+ */
160
+ export function addNestedTags(ctx: TraceContext, keyValueMap: { [key: string]: any }, _namespace?: string) {
161
+ if (!ctx.span) {
162
+ return;
163
+ }
164
+ const namespace = _namespace ? `${_namespace}.` : "";
165
+
166
+ try {
167
+ for (const k of Object.keys(keyValueMap)) {
168
+ const v = keyValueMap[k];
169
+ if (v instanceof Object) {
170
+ addNestedTags(ctx, v, `${namespace}${k}`);
171
+ } else {
172
+ ctx.span.setTag(`${namespace}${k}`, v);
173
+ }
174
+ }
175
+ } catch (err) {
176
+ // general resilience against odd shapes/parameters
177
+ log.error("Tracing.addNestedTags", err, { namespace });
178
+ }
179
+ }
180
+
181
+ export function setOWI(ctx: TraceContext, owi: LogContext) {
182
+ if (!ctx.span) {
183
+ return;
184
+ }
185
+ addNestedTags(ctx, {
186
+ context: owi,
187
+ });
43
188
  }
44
189
  }
45
190
 
46
191
  @injectable()
47
192
  export class TracingManager {
48
-
49
193
  public setup(serviceName: string, opts?: CustomTracerOpts) {
50
194
  initGlobalTracer(this.getTracerForService(serviceName, opts));
51
195
  }
@@ -54,13 +198,18 @@ export class TracingManager {
54
198
  const config: TracingConfig = {
55
199
  disable: false,
56
200
  reporter: {
57
- logSpans: false
201
+ logSpans: false,
58
202
  },
59
- serviceName
60
- }
203
+ serviceName,
204
+ };
61
205
  const t = initTracerFromEnv(config, {
62
- logger: console
206
+ logger: console,
207
+ tags: {
208
+ "service.build.commit": process.env.GITPOD_BUILD_GIT_COMMIT,
209
+ "service.build.version": process.env.GITPOD_BUILD_VERSION,
210
+ },
63
211
  });
212
+
64
213
  if (opts) {
65
214
  if (opts.perOpSampling) {
66
215
  (t as any)._sampler = new PerOperationSampler((t as any)._sampler, opts.perOpSampling);
@@ -68,24 +217,22 @@ export class TracingManager {
68
217
  }
69
218
  return t;
70
219
  }
71
-
72
220
  }
73
221
 
74
222
  export interface CustomTracerOpts {
75
- perOpSampling?: PerOperationSampling
223
+ perOpSampling?: PerOperationSampling;
76
224
  }
77
225
 
78
-
79
226
  // has to conform to https://github.com/jaegertracing/jaeger-client-node/blob/0042b1c0a0796bb655eb93e77ff76ab5e94c2bb6/src/_flow/sampler-thrift.js#L32
80
227
  export interface PerOperationSampling {
81
- [key: string]: boolean
228
+ [key: string]: boolean;
82
229
  }
83
230
 
84
231
  export class PerOperationSampler implements Sampler {
85
232
  constructor(protected readonly fallback: Sampler, protected readonly strategies: PerOperationSampling) {}
86
233
 
87
234
  name(): string {
88
- return 'PerOperationSampler';
235
+ return "PerOperationSampler";
89
236
  }
90
237
 
91
238
  toString(): string {
@@ -125,10 +272,32 @@ export class PerOperationSampler implements Sampler {
125
272
  return false; // TODO equal should be removed
126
273
  }
127
274
 
128
- close(callback: ()=>void): void {
275
+ close(callback: () => void): void {
129
276
  // all nested samplers are of simple types, so we do not need to Close them
130
277
  if (callback) {
131
278
  callback();
132
279
  }
133
280
  }
134
281
  }
282
+
283
+ // Augment interfaces with an leading parameter "TraceContext" on every method
284
+ type IsValidArg<T> = T extends object ? (keyof T extends never ? false : true) : true;
285
+ type AddTraceContext<T> = T extends (a: infer A, b: infer B, c: infer C, d: infer D, e: infer E, f: infer F) => infer R
286
+ ? IsValidArg<F> extends true
287
+ ? (ctx: TraceContextWithSpan, a: A, b: B, c: C, d: D, e: E, f: F) => R
288
+ : IsValidArg<E> extends true
289
+ ? (ctx: TraceContextWithSpan, a: A, b: B, c: C, d: D, e: E) => R
290
+ : IsValidArg<D> extends true
291
+ ? (ctx: TraceContextWithSpan, a: A, b: B, c: C, d: D) => R
292
+ : IsValidArg<C> extends true
293
+ ? (ctx: TraceContextWithSpan, a: A, b: B, c: C) => R
294
+ : IsValidArg<B> extends true
295
+ ? (ctx: TraceContextWithSpan, a: A, b: B) => R
296
+ : IsValidArg<A> extends true
297
+ ? (ctx: TraceContextWithSpan, a: A) => R
298
+ : (ctx: TraceContextWithSpan) => Promise<R>
299
+ : never;
300
+
301
+ export type InterfaceWithTraceContext<T> = {
302
+ [P in keyof T]: AddTraceContext<T[P]>;
303
+ };
@@ -5,16 +5,13 @@
5
5
  */
6
6
 
7
7
  /**
8
- * These cookies are set in the Theia frontend. This pattern is relied upon in:
9
- * - proxy:
10
- * - to filter it out on port locations
11
- * - to forward it to the server for authentication
12
- * - server:
13
- * - to authenticate access to port locations
14
- */
15
- export const worspacePortAuthCookieName = function(host: string, workspaceId: string): string {
16
- return host
17
- .replace(/https?/, '')
18
- .replace(/[\W_]+/g, "_")
19
- + `_ws_${workspaceId}_port_auth_`;
20
- };
8
+ * These cookies are set in the Theia frontend. This pattern is relied upon in:
9
+ * - proxy:
10
+ * - to filter it out on port locations
11
+ * - to forward it to the server for authentication
12
+ * - server:
13
+ * - to authenticate access to port locations
14
+ */
15
+ export const worspacePortAuthCookieName = function (host: string, workspaceId: string): string {
16
+ return host.replace(/https?/, "").replace(/[\W_]+/g, "_") + `_ws_${workspaceId}_port_auth_`;
17
+ };
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Copyright (c) 2022 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 WebhookEvent {
8
+ id: string;
9
+ creationTime: string;
10
+ type: "push" | string;
11
+
12
+ /**
13
+ * Typically the webhook installer is referenced here.
14
+ */
15
+ authorizedUserId?: string;
16
+
17
+ /**
18
+ * webhook event's payload
19
+ */
20
+ rawEvent: string;
21
+
22
+ /**
23
+ * The general status of the received webhook event.
24
+ */
25
+ status: WebhookEvent.Status;
26
+
27
+ /**
28
+ * Optional message to help understand errors with handling events.
29
+ */
30
+ message?: string;
31
+
32
+ /**
33
+ * If the webhook event is considered to trigger a prebuild, the `prebuildStatus`
34
+ * contains a more specific status.
35
+ */
36
+ prebuildStatus?: WebhookEvent.PrebuildStatus;
37
+
38
+ /**
39
+ * If `prebuildStatus` is `prebuild_triggered` this points to a prebuild.
40
+ */
41
+ prebuildId?: string;
42
+
43
+ projectId?: string;
44
+
45
+ cloneUrl?: string;
46
+
47
+ branch?: string;
48
+
49
+ commit?: string;
50
+ }
51
+
52
+ export namespace WebhookEvent {
53
+ export type Status = "received" | "dismissed_unauthorized" | "ignored" | "processed";
54
+ export type PrebuildStatus = "ignored_unconfigured" | "prebuild_trigger_failed" | "prebuild_triggered";
55
+ }
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Copyright (c) 2022 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 SupportedWorkspaceClass {
8
+ id: string;
9
+ category: string;
10
+ displayName: string;
11
+ description: string;
12
+ powerups: number;
13
+ isSelected: boolean;
14
+ }
@@ -4,11 +4,10 @@
4
4
  * See License-AGPL.txt in the project root for license information.
5
5
  */
6
6
 
7
- import * as fs from 'fs';
8
- import { filePathTelepresenceAware } from './env';
7
+ import * as fs from "fs";
8
+ import { filePathTelepresenceAware } from "./env";
9
9
  import { DeepPartial } from "./util/deep-partial";
10
- import { Without } from './util/without';
11
- import { PermissionName } from './permission';
10
+ import { PermissionName } from "./permission";
12
11
 
13
12
  export interface WorkspaceCluster {
14
13
  // Name of the workspace cluster.
@@ -16,6 +15,10 @@ export interface WorkspaceCluster {
16
15
  // Must be identical to the installationShortname of the cluster it represents!
17
16
  name: string;
18
17
 
18
+ // The name of the application cluster to which this cluster should be registered.
19
+ // The name can be at most 60 characters.
20
+ applicationCluster: string;
21
+
19
22
  // URL of the cluster's ws-manager API
20
23
  url: string;
21
24
 
@@ -48,15 +51,31 @@ export interface TLSConfig {
48
51
  crt: string;
49
52
  }
50
53
  export namespace TLSConfig {
51
- export const loadFromBase64File = (path: string): string => fs.readFileSync(filePathTelepresenceAware(path)).toString("base64");
54
+ export const loadFromBase64File = (path: string): string =>
55
+ fs.readFileSync(filePathTelepresenceAware(path)).toString("base64");
52
56
  }
53
- export type WorkspaceClusterWoTLS = Without<WorkspaceCluster, "tls">;
57
+ export type WorkspaceClusterWoTLS = Omit<WorkspaceCluster, "tls">;
54
58
  export type WorkspaceManagerConnectionInfo = Pick<WorkspaceCluster, "name" | "url" | "tls">;
55
59
 
56
- export type AdmissionConstraint = AdmissionConstraintFeaturePreview | AdmissionConstraintHasRole;
60
+ export type AdmissionConstraint =
61
+ | AdmissionConstraintFeaturePreview
62
+ | AdmissionConstraintHasPermission
63
+ | AdmissionConstraintHasClass;
57
64
  export type AdmissionConstraintFeaturePreview = { type: "has-feature-preview" };
58
- export type AdmissionConstraintHasRole = { type: "has-permission", permission: PermissionName };
59
-
65
+ export type AdmissionConstraintHasPermission = { type: "has-permission"; permission: PermissionName };
66
+ export type AdmissionConstraintHasClass = { type: "has-class"; id: string; displayName: string };
67
+
68
+ export namespace AdmissionConstraint {
69
+ export function is(o: any): o is AdmissionConstraint {
70
+ return !!o && "type" in o;
71
+ }
72
+ export function isHasPermissionConstraint(o: any): o is AdmissionConstraintHasPermission {
73
+ return is(o) && o.type === "has-permission";
74
+ }
75
+ export function hasPermission(ac: AdmissionConstraint, permission: PermissionName): boolean {
76
+ return isHasPermissionConstraint(ac) && ac.permission === permission;
77
+ }
78
+ }
60
79
 
61
80
  export const WorkspaceClusterDB = Symbol("WorkspaceClusterDB");
62
81
  export interface WorkspaceClusterDB {
@@ -87,4 +106,4 @@ export interface WorkspaceClusterDB {
87
106
  }
88
107
  export interface WorkspaceClusterFilter extends Pick<WorkspaceCluster, "state" | "govern" | "url"> {
89
108
  minScore: number;
90
- }
109
+ }
@@ -23,6 +23,9 @@ export interface WorkspaceInstance {
23
23
  // The time an instance has switched phase to 'Running'
24
24
  startedTime?: string;
25
25
 
26
+ // The time an instance has switched phase to 'Stopping' */
27
+ stoppingTime?: string;
28
+
26
29
  // The time an instance has switched phase to 'Stopped' */
27
30
  stoppedTime?: string;
28
31
 
@@ -48,10 +51,32 @@ export interface WorkspaceInstance {
48
51
 
49
52
  // instance is hard-deleted on the database and about to be collected by db-sync
50
53
  readonly deleted?: boolean;
54
+
55
+ /**
56
+ * Contains information about the image build, if there was any
57
+ */
58
+ imageBuildInfo?: ImageBuildInfo;
59
+
60
+ /**
61
+ * workspace class, also known as workspace size, determines the type of
62
+ * resources that are provided to the workspace.
63
+ */
64
+ workspaceClass?: string;
65
+
66
+ /**
67
+ * Identifies the team or user to which this instance's runtime should be attributed to
68
+ * (e.g. for usage analytics or billing purposes).
69
+ */
70
+ usageAttributionId?: string;
51
71
  }
52
72
 
53
73
  // WorkspaceInstanceStatus describes the current state of a workspace instance
54
74
  export interface WorkspaceInstanceStatus {
75
+ // version is the current version of the workspace instance status
76
+ // Note: consider this value opague. The only guarantee given is that it imposes
77
+ // a partial order on status updates, i.e. a.version > b.version -> a newer than b.
78
+ version?: number;
79
+
55
80
  // phase describes a high-level state of the workspace instance
56
81
  phase: WorkspaceInstancePhase;
57
82
 
@@ -87,52 +112,54 @@ export interface WorkspaceInstanceStatus {
87
112
  export type WorkspaceInstancePhase =
88
113
  // unknown indicates an issue within the system in that it cannot determine the actual phase of
89
114
  // a workspace. This phase is usually accompanied by an error.
90
- "unknown" |
115
+ | "unknown"
91
116
 
92
117
  // Preparing means that we haven't actually started the workspace instance just yet, but rather
93
- // are still preparing for launch. This means we're building the Docker image for the workspace.
94
- "preparing" |
118
+ // are still preparing for launch.
119
+ | "preparing"
120
+
121
+ // Building means that we are building the Docker image for the workspace. A workspace will enter this phase only
122
+ // if an image build is required for that workspace.
123
+ | "building"
95
124
 
96
125
  // Pending means the workspace does not yet consume resources in the cluster, but rather is looking for
97
126
  // some space within the cluster. If for example the cluster needs to scale up to accomodate the
98
127
  // workspace, the workspace will be in Pending state until that happened.
99
- "pending" |
128
+ | "pending"
100
129
 
101
130
  // Creating means the workspace is currently being created. Thati includes downloading the images required
102
131
  // to run the workspace over the network. The time spent in this phase varies widely and depends on the current
103
132
  // network speed, image size and cache states.
104
- "creating" |
133
+ | "creating"
105
134
 
106
135
  // Initializing is the phase in which the workspace is executing the appropriate workspace initializer (e.g. Git
107
136
  // clone or backup download). After this phase one can expect the workspace to either be Running or Failed.
108
- "initializing" |
137
+ | "initializing"
109
138
 
110
139
  // Running means the workspace is able to actively perform work, either by serving a user through Theia,
111
140
  // or as a headless workspace.
112
- "running" |
141
+ | "running"
113
142
 
114
143
  // Interrupted is an exceptional state where the container should be running but is temporarily unavailable.
115
144
  // When in this state, we expect it to become running or stopping anytime soon.
116
- "interrupted" |
145
+ | "interrupted"
117
146
 
118
147
  // Stopping means that the workspace is currently shutting down. It could go to stopped every moment.
119
- "stopping" |
148
+ | "stopping"
120
149
 
121
150
  // Stopped means the workspace ended regularly because it was shut down.
122
- "stopped";
151
+ | "stopped";
123
152
 
124
153
  export interface WorkspaceInstanceConditions {
125
154
  // Failed contains the reason the workspace failed to operate. If this field is empty, the workspace has not failed.
126
- failed?: string
155
+ // failed contains technical details for the failure of the workspace.
156
+ failed?: string;
127
157
 
128
158
  // timeout contains the reason the workspace has timed out. If this field is empty, the workspace has not timed out.
129
- timeout?: string
159
+ timeout?: string;
130
160
 
131
161
  // PullingImages marks if the workspace is currently pulling its images. This condition can only be set during PhaseCreating
132
- pullingImages?: boolean
133
-
134
- // ServiceExists denotes if the workspace theia-/ports- services exist. This condition will be true if either of the two services exist.
135
- serviceExists?: boolean
162
+ pullingImages?: boolean;
136
163
 
137
164
  // deployed marks that a workspace instance was sent/deployed at a workspace manager
138
165
  deployed?: boolean;
@@ -142,22 +169,28 @@ export interface WorkspaceInstanceConditions {
142
169
 
143
170
  // ISO8601 timestamp when the first user activity was registered in the frontend. Only set if the workspace is running.
144
171
  firstUserActivity?: string;
172
+
173
+ // headlessTaskFailed indicates that a headless workspace task failed
174
+ // headlessTaskFailed is only set if:
175
+ // * this workspace is headless
176
+ // * the task being run returned a non 0 exit status code
177
+ headlessTaskFailed?: string;
178
+
179
+ // stopped_by_request is true if the workspace was stopped using a StopWorkspace call
180
+ stoppedByRequest?: boolean;
145
181
  }
146
182
 
147
183
  // AdmissionLevel describes who can access a workspace instance and its ports.
148
- export type AdmissionLevel = 'owner_only' | 'everyone';
184
+ export type AdmissionLevel = "owner_only" | "everyone";
149
185
 
150
186
  // PortVisibility describes how a port can be accessed
151
- export type PortVisibility = 'public' | 'private';
187
+ export type PortVisibility = "public" | "private";
152
188
 
153
189
  // WorkspaceInstancePort describes a port exposed on a workspace instance
154
190
  export interface WorkspaceInstancePort {
155
191
  // The outward-facing port number
156
192
  port: number;
157
193
 
158
- // An optional inward-facing port number. If not present we'll use port.
159
- targetPort?: number;
160
-
161
194
  // The visiblity of this port. Optional for backwards compatibility.
162
195
  visibility?: PortVisibility;
163
196
 
@@ -177,19 +210,25 @@ export interface WorkspaceInstanceRepoStatus {
177
210
  uncommitedFiles?: string[];
178
211
 
179
212
  // the total number of uncommited files
180
- totalUncommitedFiles?: number
213
+ totalUncommitedFiles?: number;
181
214
 
182
215
  // untrackedFiles is the list of untracked files in the workspace, possibly truncated
183
216
  untrackedFiles?: string[];
184
217
 
185
218
  // the total number of untracked files
186
- totalUntrackedFiles?: number
219
+ totalUntrackedFiles?: number;
187
220
 
188
221
  // unpushedCommits is the list of unpushed changes in the workspace, possibly truncated
189
222
  unpushedCommits?: string[];
190
223
 
191
224
  // the total number of unpushed changes
192
- totalUnpushedCommits?: number
225
+ totalUnpushedCommits?: number;
226
+ }
227
+
228
+ // ConfigurationIdeConfig ide config of WorkspaceInstanceConfiguration
229
+ export interface ConfigurationIdeConfig {
230
+ useLatest?: boolean;
231
+ desktopIdeAlias?: string;
193
232
  }
194
233
 
195
234
  // WorkspaceInstanceConfiguration contains all per-instance configuration
@@ -203,4 +242,30 @@ export interface WorkspaceInstanceConfiguration {
203
242
 
204
243
  // ideImage is the ref of the IDE image this instance uses.
205
244
  ideImage: string;
245
+
246
+ // desktopIdeImage is the ref of the desktop IDE image this instance uses.
247
+ desktopIdeImage?: string;
248
+
249
+ // desktopIdePluginImage is the ref of the desktop IDE plugin image this instance uses.
250
+ desktopIdePluginImage?: string;
251
+
252
+ // supervisorImage is the ref of the supervisor image this instance uses.
253
+ supervisorImage?: string;
254
+
255
+ ideConfig?: ConfigurationIdeConfig;
256
+ }
257
+
258
+ /**
259
+ * Holds information about the image build (if there was one) for this WorkspaceInstance
260
+ */
261
+ export interface ImageBuildInfo {
262
+ log?: ImageBuildLogInfo;
263
+ }
264
+
265
+ /**
266
+ * Holds information about how to access logs for this an image build
267
+ */
268
+ export interface ImageBuildLogInfo {
269
+ url: string;
270
+ headers: { [key: string]: string };
206
271
  }