@gitpod/gitpod-protocol 0.1.5-update-ovsx.0 → 0.1.5-update-yarnlock.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 (455) hide show
  1. package/data/gitpod-schema.json +159 -25
  2. package/lib/accounting-protocol.d.ts +165 -0
  3. package/lib/accounting-protocol.d.ts.map +1 -0
  4. package/lib/accounting-protocol.js +120 -0
  5. package/lib/accounting-protocol.js.map +1 -0
  6. package/lib/admin-protocol.d.ts +51 -6
  7. package/lib/admin-protocol.d.ts.map +1 -1
  8. package/lib/admin-protocol.js +17 -2
  9. package/lib/admin-protocol.js.map +1 -1
  10. package/lib/analytics.d.ts +44 -0
  11. package/lib/analytics.d.ts.map +1 -0
  12. package/lib/analytics.js +10 -0
  13. package/lib/analytics.js.map +1 -0
  14. package/lib/attribution.d.ts +25 -0
  15. package/lib/attribution.d.ts.map +1 -0
  16. package/lib/attribution.js +58 -0
  17. package/lib/attribution.js.map +1 -0
  18. package/lib/auth.d.ts +25 -0
  19. package/lib/auth.d.ts.map +1 -0
  20. package/lib/auth.js +16 -0
  21. package/lib/auth.js.map +1 -0
  22. package/lib/billing-mode.d.ts +45 -0
  23. package/lib/billing-mode.d.ts.map +1 -0
  24. package/lib/billing-mode.js +44 -0
  25. package/lib/billing-mode.js.map +1 -0
  26. package/lib/blocked-repositories-protocol.d.ts +13 -0
  27. package/lib/blocked-repositories-protocol.d.ts.map +1 -0
  28. package/lib/blocked-repositories-protocol.js +8 -0
  29. package/lib/blocked-repositories-protocol.js.map +1 -0
  30. package/lib/context-url.d.ts +30 -0
  31. package/lib/context-url.d.ts.map +1 -0
  32. package/lib/context-url.js +100 -0
  33. package/lib/context-url.js.map +1 -0
  34. package/lib/context-url.spec.d.ts +12 -0
  35. package/lib/context-url.spec.d.ts.map +1 -0
  36. package/lib/context-url.spec.js +81 -0
  37. package/lib/context-url.spec.js.map +1 -0
  38. package/lib/encryption/container-module.d.ts +2 -2
  39. package/lib/encryption/container-module.d.ts.map +1 -1
  40. package/lib/encryption/container-module.js +8 -6
  41. package/lib/encryption/container-module.js.map +1 -1
  42. package/lib/encryption/encryption-engine.d.ts +2 -2
  43. package/lib/encryption/encryption-engine.d.ts.map +1 -1
  44. package/lib/encryption/encryption-engine.js +28 -28
  45. package/lib/encryption/encryption-engine.js.map +1 -1
  46. package/lib/encryption/encryption-engine.spec.d.ts +3 -3
  47. package/lib/encryption/encryption-engine.spec.d.ts.map +1 -1
  48. package/lib/encryption/encryption-engine.spec.js +32 -39
  49. package/lib/encryption/encryption-engine.spec.js.map +1 -1
  50. package/lib/encryption/encryption-service.d.ts +2 -2
  51. package/lib/encryption/encryption-service.d.ts.map +1 -1
  52. package/lib/encryption/encryption-service.js +33 -46
  53. package/lib/encryption/encryption-service.js.map +1 -1
  54. package/lib/encryption/key-provider.d.ts +3 -3
  55. package/lib/encryption/key-provider.d.ts.map +1 -1
  56. package/lib/encryption/key-provider.js +34 -40
  57. package/lib/encryption/key-provider.js.map +1 -1
  58. package/lib/env.d.ts +2 -8
  59. package/lib/env.d.ts.map +1 -1
  60. package/lib/env.js +10 -29
  61. package/lib/env.js.map +1 -1
  62. package/lib/experiments/always-default.d.ts +8 -0
  63. package/lib/experiments/always-default.d.ts.map +1 -0
  64. package/lib/experiments/always-default.js +20 -0
  65. package/lib/experiments/always-default.js.map +1 -0
  66. package/lib/experiments/configcat-server.d.ts +10 -0
  67. package/lib/experiments/configcat-server.d.ts.map +1 -0
  68. package/lib/experiments/configcat-server.js +37 -0
  69. package/lib/experiments/configcat-server.js.map +1 -0
  70. package/lib/experiments/configcat.d.ts +21 -0
  71. package/lib/experiments/configcat.d.ts.map +1 -0
  72. package/lib/experiments/configcat.js +51 -0
  73. package/lib/experiments/configcat.js.map +1 -0
  74. package/lib/experiments/types.d.ts +22 -0
  75. package/lib/experiments/types.d.ts.map +1 -0
  76. package/lib/experiments/types.js +10 -0
  77. package/lib/experiments/types.js.map +1 -0
  78. package/lib/frontend-dashboard-service.d.ts +99 -0
  79. package/lib/frontend-dashboard-service.d.ts.map +1 -0
  80. package/lib/frontend-dashboard-service.js +55 -0
  81. package/lib/frontend-dashboard-service.js.map +1 -0
  82. package/lib/gitpod-file-parser.d.ts +2 -2
  83. package/lib/gitpod-file-parser.d.ts.map +1 -1
  84. package/lib/gitpod-file-parser.js +29 -44
  85. package/lib/gitpod-file-parser.js.map +1 -1
  86. package/lib/gitpod-file-parser.spec.d.ts +2 -2
  87. package/lib/gitpod-file-parser.spec.js +147 -144
  88. package/lib/gitpod-file-parser.spec.js.map +1 -1
  89. package/lib/gitpod-service.d.ts +290 -50
  90. package/lib/gitpod-service.d.ts.map +1 -1
  91. package/lib/gitpod-service.js +288 -123
  92. package/lib/gitpod-service.js.map +1 -1
  93. package/lib/headless-workspace-log.d.ts +11 -13
  94. package/lib/headless-workspace-log.d.ts.map +1 -1
  95. package/lib/headless-workspace-log.js +8 -9
  96. package/lib/headless-workspace-log.js.map +1 -1
  97. package/lib/ide-frontend-service.d.ts +26 -0
  98. package/lib/ide-frontend-service.d.ts.map +1 -0
  99. package/lib/ide-frontend-service.js +8 -0
  100. package/lib/ide-frontend-service.js.map +1 -0
  101. package/lib/ide-protocol.d.ts +126 -0
  102. package/lib/ide-protocol.d.ts.map +1 -0
  103. package/lib/ide-protocol.js +18 -0
  104. package/lib/ide-protocol.js.map +1 -0
  105. package/lib/index.d.ts +18 -12
  106. package/lib/index.d.ts.map +1 -1
  107. package/lib/index.js +28 -13
  108. package/lib/index.js.map +1 -1
  109. package/lib/installation-admin-protocol.d.ts +30 -0
  110. package/lib/installation-admin-protocol.d.ts.map +1 -0
  111. package/lib/installation-admin-protocol.js +31 -0
  112. package/lib/installation-admin-protocol.js.map +1 -0
  113. package/lib/license-protocol.d.ts +9 -2
  114. package/lib/license-protocol.d.ts.map +1 -1
  115. package/lib/license-protocol.js +3 -2
  116. package/lib/license-protocol.js.map +1 -1
  117. package/lib/messaging/browser/connection.d.ts +6 -4
  118. package/lib/messaging/browser/connection.d.ts.map +1 -1
  119. package/lib/messaging/browser/connection.js +188 -48
  120. package/lib/messaging/browser/connection.js.map +1 -1
  121. package/lib/messaging/browser/window-connection.d.ts +9 -4
  122. package/lib/messaging/browser/window-connection.d.ts.map +1 -1
  123. package/lib/messaging/browser/window-connection.js +48 -59
  124. package/lib/messaging/browser/window-connection.js.map +1 -1
  125. package/lib/messaging/client-call-metrics.d.ts +21 -0
  126. package/lib/messaging/client-call-metrics.d.ts.map +1 -0
  127. package/lib/messaging/client-call-metrics.js +95 -0
  128. package/lib/messaging/client-call-metrics.js.map +1 -0
  129. package/lib/messaging/error.d.ts +18 -4
  130. package/lib/messaging/error.d.ts.map +1 -1
  131. package/lib/messaging/error.js +38 -7
  132. package/lib/messaging/error.js.map +1 -1
  133. package/lib/messaging/handler.d.ts +10 -0
  134. package/lib/messaging/handler.d.ts.map +1 -1
  135. package/lib/messaging/handler.js +2 -1
  136. package/lib/messaging/handler.js.map +1 -1
  137. package/lib/messaging/node/connection.d.ts +1 -17
  138. package/lib/messaging/node/connection.d.ts.map +1 -1
  139. package/lib/messaging/node/connection.js +24 -59
  140. package/lib/messaging/node/connection.js.map +1 -1
  141. package/lib/messaging/proxy-factory.d.ts +3 -1
  142. package/lib/messaging/proxy-factory.d.ts.map +1 -1
  143. package/lib/messaging/proxy-factory.js +76 -162
  144. package/lib/messaging/proxy-factory.js.map +1 -1
  145. package/lib/oss-allowlist.d.ts +14 -0
  146. package/lib/oss-allowlist.d.ts.map +1 -0
  147. package/lib/oss-allowlist.js +8 -0
  148. package/lib/oss-allowlist.js.map +1 -0
  149. package/lib/payment-protocol.d.ts +18 -0
  150. package/lib/payment-protocol.d.ts.map +1 -0
  151. package/lib/payment-protocol.js +13 -0
  152. package/lib/payment-protocol.js.map +1 -0
  153. package/lib/permission.d.ts +26 -15
  154. package/lib/permission.d.ts.map +1 -1
  155. package/lib/permission.js +50 -36
  156. package/lib/permission.js.map +1 -1
  157. package/lib/plans.d.ts +213 -0
  158. package/lib/plans.d.ts.map +1 -0
  159. package/lib/plans.js +625 -0
  160. package/lib/plans.js.map +1 -0
  161. package/lib/protocol.d.ts +338 -111
  162. package/lib/protocol.d.ts.map +1 -1
  163. package/lib/protocol.js +422 -201
  164. package/lib/protocol.js.map +1 -1
  165. package/lib/protocol.spec.d.ts +7 -0
  166. package/lib/protocol.spec.d.ts.map +1 -0
  167. package/lib/protocol.spec.js +127 -0
  168. package/lib/protocol.spec.js.map +1 -0
  169. package/lib/snapshot-url.d.ts +14 -0
  170. package/lib/snapshot-url.d.ts.map +1 -0
  171. package/lib/snapshot-url.js +26 -0
  172. package/lib/snapshot-url.js.map +1 -0
  173. package/lib/snapshot-url.spec.d.ts +7 -0
  174. package/lib/snapshot-url.spec.d.ts.map +1 -0
  175. package/lib/snapshot-url.spec.js +41 -0
  176. package/lib/snapshot-url.spec.js.map +1 -0
  177. package/lib/team-subscription-protocol.d.ts +93 -0
  178. package/lib/team-subscription-protocol.d.ts.map +1 -0
  179. package/lib/team-subscription-protocol.js +82 -0
  180. package/lib/team-subscription-protocol.js.map +1 -0
  181. package/lib/teams-projects-protocol.d.ts +136 -0
  182. package/lib/teams-projects-protocol.d.ts.map +1 -0
  183. package/lib/teams-projects-protocol.js +41 -0
  184. package/lib/teams-projects-protocol.js.map +1 -0
  185. package/lib/typings/globals.d.ts +8 -3
  186. package/lib/typings/globals.d.ts.map +1 -1
  187. package/lib/typings/globals.js +2 -2
  188. package/lib/usage.d.ts +73 -0
  189. package/lib/usage.d.ts.map +1 -0
  190. package/lib/usage.js +20 -0
  191. package/lib/usage.js.map +1 -0
  192. package/lib/util/analytics.d.ts +8 -0
  193. package/lib/util/analytics.d.ts.map +1 -0
  194. package/lib/util/analytics.js +88 -0
  195. package/lib/util/analytics.js.map +1 -0
  196. package/lib/util/async-iterator.d.ts +2 -2
  197. package/lib/util/async-iterator.d.ts.map +1 -1
  198. package/lib/util/async-iterator.js +60 -137
  199. package/lib/util/async-iterator.js.map +1 -1
  200. package/lib/util/cancelable.d.ts +2 -2
  201. package/lib/util/cancelable.js +20 -61
  202. package/lib/util/cancelable.js.map +1 -1
  203. package/lib/util/date-time.d.ts +2 -2
  204. package/lib/util/date-time.js +14 -13
  205. package/lib/util/date-time.js.map +1 -1
  206. package/lib/util/debug-app.d.ts +25 -0
  207. package/lib/util/debug-app.d.ts.map +1 -0
  208. package/lib/util/debug-app.js +100 -0
  209. package/lib/util/debug-app.js.map +1 -0
  210. package/lib/util/deep-partial.d.ts +2 -2
  211. package/lib/util/deep-partial.js +2 -2
  212. package/lib/util/deferred.d.ts +2 -2
  213. package/lib/util/deferred.js +13 -14
  214. package/lib/util/deferred.js.map +1 -1
  215. package/lib/util/disposable.d.ts +2 -2
  216. package/lib/util/disposable.d.ts.map +1 -1
  217. package/lib/util/disposable.js +28 -40
  218. package/lib/util/disposable.js.map +1 -1
  219. package/lib/util/event.d.ts +1 -1
  220. package/lib/util/event.d.ts.map +1 -1
  221. package/lib/util/event.js +64 -77
  222. package/lib/util/event.js.map +1 -1
  223. package/lib/util/garbage-collected-cache.d.ts +3 -2
  224. package/lib/util/garbage-collected-cache.d.ts.map +1 -1
  225. package/lib/util/garbage-collected-cache.js +35 -49
  226. package/lib/util/garbage-collected-cache.js.map +1 -1
  227. package/lib/util/generate-workspace-id.d.ts +9 -0
  228. package/lib/util/generate-workspace-id.d.ts.map +1 -0
  229. package/lib/util/generate-workspace-id.js +491 -0
  230. package/lib/util/generate-workspace-id.js.map +1 -0
  231. package/lib/util/generate-workspace-id.spec.d.ts +7 -0
  232. package/lib/util/generate-workspace-id.spec.d.ts.map +1 -0
  233. package/lib/util/generate-workspace-id.spec.js +98 -0
  234. package/lib/util/generate-workspace-id.spec.js.map +1 -0
  235. package/lib/util/gitpod-cookie.d.ts +20 -0
  236. package/lib/util/gitpod-cookie.d.ts.map +1 -0
  237. package/lib/util/gitpod-cookie.js +41 -0
  238. package/lib/util/gitpod-cookie.js.map +1 -0
  239. package/lib/util/gitpod-host-url.d.ts +20 -8
  240. package/lib/util/gitpod-host-url.d.ts.map +1 -1
  241. package/lib/util/gitpod-host-url.js +143 -85
  242. package/lib/util/gitpod-host-url.js.map +1 -1
  243. package/lib/util/gitpod-host-url.spec.d.ts +16 -0
  244. package/lib/util/gitpod-host-url.spec.d.ts.map +1 -0
  245. package/lib/util/gitpod-host-url.spec.js +134 -0
  246. package/lib/util/gitpod-host-url.spec.js.map +1 -0
  247. package/lib/util/grpc.d.ts +35 -0
  248. package/lib/util/grpc.d.ts.map +1 -0
  249. package/lib/util/grpc.js +90 -0
  250. package/lib/util/grpc.js.map +1 -0
  251. package/lib/util/jaeger-client-types.d.ts +68 -0
  252. package/lib/util/jaeger-client-types.d.ts.map +1 -0
  253. package/lib/util/jaeger-client-types.js +8 -0
  254. package/lib/util/jaeger-client-types.js.map +1 -0
  255. package/lib/util/logging.d.ts +58 -35
  256. package/lib/util/logging.d.ts.map +1 -1
  257. package/lib/util/logging.js +144 -129
  258. package/lib/util/logging.js.map +1 -1
  259. package/lib/util/logging.spec.d.ts +7 -0
  260. package/lib/util/logging.spec.d.ts.map +1 -0
  261. package/lib/util/logging.spec.js +52 -0
  262. package/lib/util/logging.spec.js.map +1 -0
  263. package/lib/util/make-link.d.ts +2 -2
  264. package/lib/util/make-link.js +8 -7
  265. package/lib/util/make-link.js.map +1 -1
  266. package/lib/util/nice-grpc.d.ts +9 -0
  267. package/lib/util/nice-grpc.d.ts.map +1 -0
  268. package/lib/util/nice-grpc.js +121 -0
  269. package/lib/util/nice-grpc.js.map +1 -0
  270. package/lib/util/parse-workspace-id.d.ts +15 -5
  271. package/lib/util/parse-workspace-id.d.ts.map +1 -1
  272. package/lib/util/parse-workspace-id.js +39 -9
  273. package/lib/util/parse-workspace-id.js.map +1 -1
  274. package/lib/util/parse-workspace-id.spec.d.ts +10 -2
  275. package/lib/util/parse-workspace-id.spec.d.ts.map +1 -1
  276. package/lib/util/parse-workspace-id.spec.js +130 -49
  277. package/lib/util/parse-workspace-id.spec.js.map +1 -1
  278. package/lib/util/queue.d.ts +2 -2
  279. package/lib/util/queue.js +19 -57
  280. package/lib/util/queue.js.map +1 -1
  281. package/lib/util/queue.spec.d.ts +2 -2
  282. package/lib/util/queue.spec.js +149 -288
  283. package/lib/util/queue.spec.js.map +1 -1
  284. package/lib/util/repeat.d.ts +15 -0
  285. package/lib/util/repeat.d.ts.map +1 -0
  286. package/lib/util/repeat.js +55 -0
  287. package/lib/util/repeat.js.map +1 -0
  288. package/lib/util/semaphore.d.ts +2 -2
  289. package/lib/util/semaphore.d.ts.map +1 -1
  290. package/lib/util/semaphore.js +18 -48
  291. package/lib/util/semaphore.js.map +1 -1
  292. package/lib/util/skip-if.d.ts +2 -2
  293. package/lib/util/skip-if.d.ts.map +1 -1
  294. package/lib/util/skip-if.js +9 -8
  295. package/lib/util/skip-if.js.map +1 -1
  296. package/lib/util/timeutil.d.ts +4 -2
  297. package/lib/util/timeutil.d.ts.map +1 -1
  298. package/lib/util/timeutil.js +43 -18
  299. package/lib/util/timeutil.js.map +1 -1
  300. package/lib/util/timeutil.spec.d.ts +4 -2
  301. package/lib/util/timeutil.spec.d.ts.map +1 -1
  302. package/lib/util/timeutil.spec.js +57 -25
  303. package/lib/util/timeutil.spec.js.map +1 -1
  304. package/lib/util/tracing.d.ts +55 -8
  305. package/lib/util/tracing.d.ts.map +1 -1
  306. package/lib/util/tracing.js +210 -66
  307. package/lib/util/tracing.js.map +1 -1
  308. package/lib/util/tracing.spec.d.ts +7 -0
  309. package/lib/util/tracing.spec.d.ts.map +1 -0
  310. package/lib/util/tracing.spec.js +121 -0
  311. package/lib/util/tracing.spec.js.map +1 -0
  312. package/lib/util/workspace-port-authentication.d.ts +9 -9
  313. package/lib/util/workspace-port-authentication.d.ts.map +1 -1
  314. package/lib/util/workspace-port-authentication.js +13 -14
  315. package/lib/util/workspace-port-authentication.js.map +1 -1
  316. package/lib/webhook-event.d.ts +44 -0
  317. package/lib/webhook-event.d.ts.map +1 -0
  318. package/lib/webhook-event.js +8 -0
  319. package/lib/webhook-event.js.map +1 -0
  320. package/lib/workspace-class.d.ts +14 -0
  321. package/lib/workspace-class.d.ts.map +1 -0
  322. package/lib/workspace-class.js +8 -0
  323. package/lib/workspace-class.js.map +1 -0
  324. package/lib/workspace-cluster.d.ts +80 -0
  325. package/lib/workspace-cluster.d.ts.map +1 -0
  326. package/lib/workspace-cluster.js +36 -0
  327. package/lib/workspace-cluster.js.map +1 -0
  328. package/lib/workspace-instance.d.ts +51 -8
  329. package/lib/workspace-instance.d.ts.map +1 -1
  330. package/lib/workspace-instance.js +2 -2
  331. package/lib/wsready.d.ts +8 -2
  332. package/lib/wsready.d.ts.map +1 -1
  333. package/lib/wsready.js +4 -3
  334. package/lib/wsready.js.map +1 -1
  335. package/package.json +42 -18
  336. package/pkg-yarn.lock +24 -10
  337. package/provenance-bundle.jsonl +2 -0
  338. package/src/accounting-protocol.ts +253 -0
  339. package/src/admin-protocol.ts +96 -21
  340. package/src/analytics.ts +52 -0
  341. package/src/attribution.ts +67 -0
  342. package/src/auth.ts +27 -0
  343. package/src/billing-mode.ts +84 -0
  344. package/src/blocked-repositories-protocol.ts +13 -0
  345. package/src/context-url.spec.ts +49 -0
  346. package/src/context-url.ts +107 -0
  347. package/src/encryption/container-module.ts +4 -5
  348. package/src/encryption/encryption-engine.spec.ts +11 -10
  349. package/src/encryption/encryption-engine.ts +22 -18
  350. package/src/encryption/encryption-service.ts +6 -7
  351. package/src/encryption/key-provider.ts +18 -21
  352. package/src/env.ts +3 -26
  353. package/src/experiments/always-default.ts +24 -0
  354. package/src/experiments/configcat-server.ts +42 -0
  355. package/src/experiments/configcat.ts +56 -0
  356. package/src/experiments/types.ts +34 -0
  357. package/src/frontend-dashboard-service.ts +148 -0
  358. package/src/gitpod-file-parser.spec.ts +57 -63
  359. package/src/gitpod-file-parser.ts +18 -19
  360. package/src/gitpod-service.ts +602 -99
  361. package/src/headless-workspace-log.ts +14 -16
  362. package/src/ide-frontend-service.ts +28 -0
  363. package/src/ide-protocol.ts +147 -0
  364. package/src/index.ts +18 -12
  365. package/src/installation-admin-protocol.ts +45 -0
  366. package/src/license-protocol.ts +14 -8
  367. package/src/messaging/browser/connection.ts +202 -26
  368. package/src/messaging/browser/window-connection.ts +45 -29
  369. package/src/messaging/client-call-metrics.ts +94 -0
  370. package/src/messaging/error.ts +51 -10
  371. package/src/messaging/handler.ts +13 -1
  372. package/src/messaging/node/connection.ts +23 -70
  373. package/src/messaging/proxy-factory.ts +35 -34
  374. package/src/oss-allowlist.ts +15 -0
  375. package/src/payment-protocol.ts +20 -0
  376. package/src/permission.ts +53 -40
  377. package/src/plans.ts +699 -0
  378. package/src/protocol.spec.ts +97 -0
  379. package/src/protocol.ts +790 -302
  380. package/src/snapshot-url.spec.ts +27 -0
  381. package/src/snapshot-url.ts +27 -0
  382. package/src/team-subscription-protocol.ts +153 -0
  383. package/src/teams-projects-protocol.ts +180 -0
  384. package/src/typings/globals.ts +13 -5
  385. package/src/usage.ts +85 -0
  386. package/src/util/analytics.ts +109 -0
  387. package/src/util/async-iterator.ts +6 -7
  388. package/src/util/cancelable.ts +5 -5
  389. package/src/util/date-time.ts +10 -10
  390. package/src/util/debug-app.ts +81 -0
  391. package/src/util/deep-partial.ts +2 -2
  392. package/src/util/deferred.ts +8 -8
  393. package/src/util/disposable.ts +3 -6
  394. package/src/util/event.ts +9 -11
  395. package/src/util/garbage-collected-cache.ts +18 -10
  396. package/src/util/generate-workspace-id.spec.ts +58 -0
  397. package/src/util/generate-workspace-id.ts +481 -0
  398. package/src/util/gitpod-cookie.ts +38 -0
  399. package/src/util/gitpod-host-url.spec.ts +76 -0
  400. package/src/util/gitpod-host-url.ts +119 -40
  401. package/src/util/grpc.ts +107 -0
  402. package/src/util/jaeger-client-types.ts +102 -0
  403. package/src/util/logging.spec.ts +23 -0
  404. package/src/util/logging.ts +163 -73
  405. package/src/util/make-link.ts +8 -9
  406. package/src/util/nice-grpc.ts +96 -0
  407. package/src/util/parse-workspace-id.spec.ts +62 -12
  408. package/src/util/parse-workspace-id.ts +40 -10
  409. package/src/util/queue.spec.ts +30 -28
  410. package/src/util/queue.ts +2 -2
  411. package/src/util/repeat.ts +45 -0
  412. package/src/util/semaphore.ts +8 -10
  413. package/src/util/skip-if.ts +12 -9
  414. package/src/util/timeutil.spec.ts +42 -16
  415. package/src/util/timeutil.ts +33 -17
  416. package/src/util/tracing.spec.ts +88 -0
  417. package/src/util/tracing.ts +211 -33
  418. package/src/util/workspace-port-authentication.ts +12 -15
  419. package/src/webhook-event.ts +55 -0
  420. package/src/workspace-class.ts +14 -0
  421. package/src/workspace-cluster.ts +121 -0
  422. package/src/workspace-instance.ts +120 -36
  423. package/src/wsready.ts +11 -4
  424. package/data/builtin-theia-plugins.json +0 -362
  425. package/lib/email-protocol.d.ts +0 -49
  426. package/lib/email-protocol.d.ts.map +0 -1
  427. package/lib/email-protocol.js +0 -27
  428. package/lib/email-protocol.js.map +0 -1
  429. package/lib/messaging/connection-error-handler.d.ts +0 -27
  430. package/lib/messaging/connection-error-handler.d.ts.map +0 -1
  431. package/lib/messaging/connection-error-handler.js +0 -45
  432. package/lib/messaging/connection-error-handler.js.map +0 -1
  433. package/lib/theia-plugins.d.ts +0 -11
  434. package/lib/theia-plugins.d.ts.map +0 -1
  435. package/lib/theia-plugins.js +0 -8
  436. package/lib/theia-plugins.js.map +0 -1
  437. package/lib/util/repeater.d.ts +0 -22
  438. package/lib/util/repeater.d.ts.map +0 -1
  439. package/lib/util/repeater.js +0 -117
  440. package/lib/util/repeater.js.map +0 -1
  441. package/lib/util/safe-promise.d.ts +0 -11
  442. package/lib/util/safe-promise.d.ts.map +0 -1
  443. package/lib/util/safe-promise.js +0 -33
  444. package/lib/util/safe-promise.js.map +0 -1
  445. package/lib/util/without.d.ts +0 -7
  446. package/lib/util/without.d.ts.map +0 -1
  447. package/lib/util/without.js +0 -8
  448. package/lib/util/without.js.map +0 -1
  449. package/src/email-protocol.ts +0 -67
  450. package/src/messaging/connection-error-handler.ts +0 -62
  451. package/src/theia-plugins.ts +0 -11
  452. package/src/util/jaeger-client.d.ts +0 -105
  453. package/src/util/repeater.ts +0 -49
  454. package/src/util/safe-promise.ts +0 -26
  455. package/src/util/without.ts +0 -8
@@ -0,0 +1,67 @@
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
+ import { User } from "./protocol";
8
+ import { Team } from "./teams-projects-protocol";
9
+
10
+ export type AttributionId = UserAttributionId | TeamAttributionId;
11
+ export type AttributionTarget = "user" | "team";
12
+
13
+ export interface UserAttributionId {
14
+ kind: "user";
15
+ userId: string;
16
+ }
17
+ export interface TeamAttributionId {
18
+ kind: "team";
19
+ teamId: string;
20
+ }
21
+
22
+ export namespace AttributionId {
23
+ const SEPARATOR = ":";
24
+
25
+ export function createFromOrganizationId(organizationId?: string): AttributionId | undefined {
26
+ return organizationId ? { kind: "team", teamId: organizationId } : undefined;
27
+ }
28
+
29
+ export function create(userOrTeam: User | Team): AttributionId {
30
+ if (User.is(userOrTeam)) {
31
+ return { kind: "user", userId: userOrTeam.id };
32
+ } else {
33
+ return { kind: "team", teamId: userOrTeam.id };
34
+ }
35
+ }
36
+
37
+ export function parse(s: string): UserAttributionId | TeamAttributionId | undefined {
38
+ if (!s) {
39
+ return undefined;
40
+ }
41
+ const parts = s.split(":");
42
+ if (parts.length !== 2) {
43
+ return undefined;
44
+ }
45
+ switch (parts[0]) {
46
+ case "user":
47
+ return { kind: "user", userId: parts[1] };
48
+ case "team":
49
+ return { kind: "team", teamId: parts[1] };
50
+ default:
51
+ return undefined;
52
+ }
53
+ }
54
+
55
+ export function render(id: AttributionId): string {
56
+ switch (id.kind) {
57
+ case "user":
58
+ return `user${SEPARATOR}${id.userId}`;
59
+ case "team":
60
+ return `team${SEPARATOR}${id.teamId}`;
61
+ }
62
+ }
63
+
64
+ export function equals(a: AttributionId, b: AttributionId): boolean {
65
+ return render(a) === render(b);
66
+ }
67
+ }
package/src/auth.ts ADDED
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Copyright (c) 2021 Gitpod GmbH. All rights reserved.
3
+ * Licensed under the GNU Affero General Public License (AGPL).
4
+ * See License.AGPL.txt in the project root for license information.
5
+ */
6
+
7
+ export interface SelectAccountPayload {
8
+ currentUser: {
9
+ name: string;
10
+ avatarUrl: string;
11
+ authHost: string;
12
+ authName: string;
13
+ authProviderType: string;
14
+ };
15
+ otherUser: {
16
+ name: string;
17
+ avatarUrl: string;
18
+ authHost: string;
19
+ authName: string;
20
+ authProviderType: string;
21
+ };
22
+ }
23
+ export namespace SelectAccountPayload {
24
+ export function is(data: any): data is SelectAccountPayload {
25
+ return typeof data === "object" && "currentUser" in data && "otherUser" in data;
26
+ }
27
+ }
@@ -0,0 +1,84 @@
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
+ /**
8
+ * BillingMode is used to answer the following questions:
9
+ * - Should UI piece x be displayed for this user/team? (getBillingModeForUser/Team)
10
+ * - What model should be used to limit this workspace's capabilities (mayStartWorkspace, setTimeout, workspace class, etc...) (getBillingMode(workspaceInstance.attributionId))
11
+ * - How is a workspace session charged for? (getBillingMode(workspaceInstance.attributionId))
12
+ */
13
+ export type BillingMode = None | Chargebee | UsageBased;
14
+ export namespace BillingMode {
15
+ export const NONE: None = {
16
+ mode: "none",
17
+ };
18
+
19
+ /** Incl. upgrade and status */
20
+ export function showUsageBasedBilling(billingMode?: BillingMode): boolean {
21
+ if (!billingMode) {
22
+ return false;
23
+ }
24
+ return (
25
+ billingMode.mode === "usage-based" || (billingMode.mode === "chargebee" && !!billingMode.canUpgradeToUBB)
26
+ );
27
+ }
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
+
39
+ export function canSetWorkspaceClass(billingMode?: BillingMode): boolean {
40
+ if (!billingMode) {
41
+ return false;
42
+ }
43
+
44
+ // if has any Stripe subscription, either directly or per team, OR we're running on a license
45
+ return billingMode.mode === "usage-based" || billingMode.mode === "none";
46
+ }
47
+
48
+ export function canSetCostCenter(billingMode: BillingMode): boolean {
49
+ // if has any Stripe Subscription, either directly or per team
50
+ return billingMode.mode === "usage-based";
51
+ }
52
+ }
53
+
54
+ /** Payment is disabled */
55
+ interface None {
56
+ mode: "none";
57
+ }
58
+
59
+ /** Sessions is handled with old subscription logic based on Chargebee */
60
+ interface Chargebee {
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
+
66
+ canUpgradeToUBB?: boolean;
67
+
68
+ /** Name of team(s) that block switching to usage-based */
69
+ teamNames?: string[];
70
+ }
71
+
72
+ /** Session is handld with new usage-based logic */
73
+ interface UsageBased {
74
+ mode: "usage-based";
75
+
76
+ /** True iff this is a team, and is based on a paid plan. Currently only set for teams! */
77
+ paid?: boolean;
78
+
79
+ /** User is already converted, but is member with at least one Chargebee-based "Team Plan" */
80
+ hasChargebeeTeamPlan?: boolean;
81
+
82
+ /** User is already converted, but is member or owner in at least one Chargebee-based "Team Subscription" */
83
+ hasChargebeeTeamSubscription?: boolean;
84
+ }
@@ -0,0 +1,13 @@
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 BlockedRepository {
8
+ id: number;
9
+ urlRegexp: string;
10
+ blockUser: boolean;
11
+ createdAt: string;
12
+ updatedAt: string;
13
+ }
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Copyright (c) 2020 Gitpod GmbH. All rights reserved.
3
+ * Licensed under the GNU Affero General Public License (AGPL).
4
+ * See License.AGPL.txt in the project root for license information.
5
+ */
6
+
7
+ import * as chai from "chai";
8
+ import { suite, test } from "mocha-typescript";
9
+ import { Workspace } from ".";
10
+ import { ContextURL } from "./context-url";
11
+ const expect = chai.expect;
12
+
13
+ type WsContextUrl = Pick<Workspace, "context" | "contextURL">;
14
+
15
+ @suite
16
+ export class ContextUrlTest {
17
+ @test public parseContextUrl_withEnvVar() {
18
+ const actual = ContextURL.getNormalizedURL({
19
+ contextURL: "passedin=test%20value/https://github.com/gitpod-io/gitpod-test-repo",
20
+ context: {},
21
+ } as WsContextUrl);
22
+ expect(actual?.host).to.equal("github.com");
23
+ expect(actual?.pathname).to.equal("/gitpod-io/gitpod-test-repo");
24
+ }
25
+
26
+ @test public parseContextUrl_withEnvVar_withoutSchema() {
27
+ const actual = ContextURL.getNormalizedURL({
28
+ contextURL: "passedin=test%20value/github.com/gitpod-io/gitpod-test-repo",
29
+ context: {},
30
+ } as WsContextUrl);
31
+ expect(actual?.host).to.equal("github.com");
32
+ expect(actual?.pathname).to.equal("/gitpod-io/gitpod-test-repo");
33
+ }
34
+
35
+ @test public parseContextUrl_withEnvVar_sshUrl() {
36
+ const actual = ContextURL.getNormalizedURL({
37
+ contextURL: "passedin=test%20value/git@github.com:gitpod-io/gitpod-test-repo.git",
38
+ context: {},
39
+ } as WsContextUrl);
40
+ expect(actual?.host).to.equal("github.com");
41
+ expect(actual?.pathname).to.equal("/gitpod-io/gitpod-test-repo.git");
42
+ }
43
+
44
+ @test public parseContextUrl_badUrl() {
45
+ const actual = ContextURL.getNormalizedURL({ contextURL: "[Object object]", context: {} } as WsContextUrl);
46
+ expect(actual).to.be.undefined;
47
+ }
48
+ }
49
+ module.exports = new ContextUrlTest();
@@ -0,0 +1,107 @@
1
+ /**
2
+ * Copyright (c) 2020 Gitpod GmbH. All rights reserved.
3
+ * Licensed under the GNU Affero General Public License (AGPL).
4
+ * See License.AGPL.txt in the project root for license information.
5
+ */
6
+
7
+ import { Workspace } from ".";
8
+
9
+ /**
10
+ * The whole point of these methods is to overcome inconsistencies in our data model.
11
+ * Ideally we remove it at some point once we fixed our model, as it:
12
+ * - duplicates logic
13
+ * - but additional burden on clients (using this, copying this to other languages!)
14
+ *
15
+ * TODO(gpl) See if we can get this into `server` code to remove the burden from clients
16
+ */
17
+ export namespace ContextURL {
18
+ export const PREBUILD_PREFIX = "prebuild";
19
+ export const IMAGEBUILD_PREFIX = "imagebuild";
20
+ export const SNAPSHOT_PREFIX = "snapshot";
21
+ export const REFERRER_PREFIX = "referrer:";
22
+
23
+ /**
24
+ * This function will (try to) return the HTTP(S) URL of the context the user originally created this workspace on.
25
+ * Especially it will not contain any modifiers or be of different scheme than HTTP(S).
26
+ *
27
+ * Use this function if you need to provided a _working_ URL to the original context.
28
+ * @param ws
29
+ * @returns
30
+ */
31
+ export function getNormalizedURL(ws: Pick<Workspace, "context" | "contextURL"> | undefined): URL | undefined {
32
+ const normalized = normalize(ws);
33
+ if (!normalized) {
34
+ return undefined;
35
+ }
36
+
37
+ try {
38
+ return new URL(normalized);
39
+ } catch (err) {
40
+ console.debug(`unable to parse URL from normalized contextURL: '${normalized}'`);
41
+ }
42
+ return undefined;
43
+ }
44
+
45
+ function normalize(ws: Pick<Workspace, "context" | "contextURL"> | undefined): string | undefined {
46
+ if (!ws) {
47
+ return undefined;
48
+ }
49
+ if (ws.context.normalizedContextURL) {
50
+ return ws.context.normalizedContextURL;
51
+ }
52
+
53
+ // fallback: we do not yet set normalizedContextURL on all workspaces, yet, let alone older existing workspaces
54
+ let fallback: string | undefined = undefined;
55
+ try {
56
+ fallback = removePrefixes(ws.contextURL);
57
+ } catch (err) {
58
+ console.error(`unable to remove prefixes from contextURL: '${ws.contextURL}'`, err);
59
+ }
60
+ return fallback;
61
+ }
62
+
63
+ /**
64
+ * The field "contextUrl" might contain prefixes like:
65
+ * - envvar1=value1/...
66
+ * - prebuild/...
67
+ * This is the analogon to the (Prefix)ContextParser structure in "server".
68
+ */
69
+ function removePrefixes(contextUrl: string | undefined): string | undefined {
70
+ if (contextUrl === undefined) {
71
+ return undefined;
72
+ }
73
+
74
+ const segments = contextUrl.split("/");
75
+ if (segments.length === 1) {
76
+ return segments[0]; // this might be something, we just try
77
+ }
78
+
79
+ const segmentsToURL = (offset: number): string => {
80
+ let rest = segments.slice(offset).join("/");
81
+ if (/^git@[^:\/]+:/.test(rest)) {
82
+ rest = rest.replace(/^git@([^:\/]+):/, "https://$1/");
83
+ }
84
+ if (!rest.startsWith("http")) {
85
+ rest = "https://" + rest;
86
+ }
87
+ return rest;
88
+ };
89
+
90
+ const firstSegment = segments[0];
91
+ if (
92
+ firstSegment === PREBUILD_PREFIX ||
93
+ firstSegment === IMAGEBUILD_PREFIX ||
94
+ firstSegment === SNAPSHOT_PREFIX ||
95
+ firstSegment.startsWith(REFERRER_PREFIX)
96
+ ) {
97
+ return segmentsToURL(1);
98
+ }
99
+
100
+ // check for env vars
101
+ if (firstSegment.indexOf("=") !== -1) {
102
+ return segmentsToURL(1);
103
+ }
104
+
105
+ return segmentsToURL(0);
106
+ }
107
+ }
@@ -1,7 +1,7 @@
1
1
  /**
2
- * Copyright (c) 2020 TypeFox GmbH. All rights reserved.
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";
@@ -19,10 +19,9 @@ import { EncryptionService, EncryptionServiceImpl } from "./encryption-service";
19
19
  * };
20
20
  * }).inSingletonScope();
21
21
  */
22
- export const encryptionModule: interfaces.ContainerModuleCallBack = bind => {
23
-
22
+ export const encryptionModule: interfaces.ContainerModuleCallBack = (bind) => {
24
23
  bind(KeyProvider).to(KeyProviderImpl).inSingletonScope();
25
24
 
26
25
  bind(EncryptionEngine).to(EncryptionEngineImpl).inSingletonScope();
27
26
  bind(EncryptionService).to(EncryptionServiceImpl).inSingletonScope();
28
- };
27
+ };
@@ -1,29 +1,30 @@
1
1
  /**
2
- * Copyright (c) 2020 TypeFox GmbH. All rights reserved.
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";
8
- import * as chai from 'chai';
9
- import * as path from 'path';
8
+ import * as chai from "chai";
9
+ import * as path from "path";
10
10
  import * as fs from "fs";
11
11
 
12
12
  import { EncryptionEngineImpl } from "./encryption-engine";
13
13
 
14
14
  const expect = chai.expect;
15
15
 
16
- @suite class TestEncryptionEngineImpl {
16
+ @suite
17
+ class TestEncryptionEngineImpl {
17
18
  // Created with openssl rand -rand /dev/urandom -out key -base64 32
18
- protected get testkey () {
19
- const keyFilePath = path.resolve(__dirname, '../../test/fixtures/encryption/testkey');
19
+ protected get testkey() {
20
+ const keyFilePath = path.resolve(__dirname, "../../test/fixtures/encryption/testkey");
20
21
  const keyBuffer = fs.readFileSync(keyFilePath);
21
22
  return keyBuffer.toString().trim();
22
- };
23
+ }
23
24
 
24
25
  @test basicSymmetry() {
25
26
  const plaintext = "12345678901234567890";
26
- const key = new Buffer(this.testkey, 'base64');
27
+ const key = Buffer.from(this.testkey, "base64");
27
28
 
28
29
  const cut = new EncryptionEngineImpl();
29
30
  const encryptedData = cut.encrypt(plaintext, key);
@@ -33,4 +34,4 @@ const expect = chai.expect;
33
34
  expect(decryptedPlaintext).equals(plaintext);
34
35
  }
35
36
  }
36
- export const t = new TestEncryptionEngineImpl();
37
+ export const t = new TestEncryptionEngineImpl();
@@ -1,23 +1,23 @@
1
1
  /**
2
- * Copyright (c) 2020 TypeFox GmbH. All rights reserved.
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
- import * as crypto from 'crypto';
8
- import { injectable } from 'inversify';
7
+ import * as crypto from "crypto";
8
+ import { injectable } from "inversify";
9
9
 
10
10
  export interface KeyParams {
11
- iv: string
11
+ iv: string;
12
12
  }
13
13
 
14
14
  export interface EncryptedData {
15
15
  /** utf8 encoded string */
16
- data: string,
17
- keyParams: KeyParams
16
+ data: string;
17
+ keyParams: KeyParams;
18
18
  }
19
19
 
20
- export const EncryptionEngine = Symbol('EncryptionEngine');
20
+ export const EncryptionEngine = Symbol("EncryptionEngine");
21
21
  export interface EncryptionEngine {
22
22
  /**
23
23
  * @param data utf8 encoded string
@@ -32,28 +32,32 @@ export interface EncryptionEngine {
32
32
  * - no salt, as we pass in a real key (no salting needed to turn a password into a key)
33
33
  * The implementation closely follows the exampes in https://nodejs.org/api/crypto.html.
34
34
  */
35
- @injectable()
35
+ @injectable()
36
36
  export class EncryptionEngineImpl {
37
- readonly algorithm = 'aes-256-cbc';
38
- readonly enc = 'base64';
37
+ readonly algorithm = "aes-256-cbc";
38
+ readonly enc = "base64";
39
39
 
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),
47
47
  keyParams: {
48
- iv: iv.toString(this.enc)
49
- }
48
+ iv: iv.toString(this.enc),
49
+ },
50
50
  };
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
- return finalDecrypted.toString('utf8');
61
+ return finalDecrypted.toString("utf8");
58
62
  }
59
- }
63
+ }
@@ -1,7 +1,7 @@
1
1
  /**
2
- * Copyright (c) 2020 TypeFox GmbH. All rights reserved.
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";
@@ -9,12 +9,11 @@ import { injectable, inject } from "inversify";
9
9
  import { EncryptedData, EncryptionEngine } from "./encryption-engine";
10
10
  import { KeyProvider, KeyMetadata } from "./key-provider";
11
11
 
12
-
13
12
  export interface Encrypted<_T> extends EncryptedData {
14
- keyMetadata: KeyMetadata
13
+ keyMetadata: KeyMetadata;
15
14
  }
16
15
 
17
- export const EncryptionService = Symbol('EncryptionService');
16
+ export const EncryptionService = Symbol("EncryptionService");
18
17
  export interface EncryptionService {
19
18
  encrypt<T>(data: T): Encrypted<T>;
20
19
  decrypt<T>(encrypted: Encrypted<T>): T;
@@ -32,7 +31,7 @@ export class EncryptionServiceImpl implements EncryptionService {
32
31
  const encryptedData = this.engine.encrypt(dataStr, key.material);
33
32
  return {
34
33
  ...encryptedData,
35
- keyMetadata: key.metadata
34
+ keyMetadata: key.metadata,
36
35
  };
37
36
  }
38
37
 
@@ -49,4 +48,4 @@ export class EncryptionServiceImpl implements EncryptionService {
49
48
  protected deserialize<T>(data: string): T {
50
49
  return JSON.parse(data) as T;
51
50
  }
52
- }
51
+ }
@@ -1,22 +1,22 @@
1
1
  /**
2
- * Copyright (c) 2020 TypeFox GmbH. All rights reserved.
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";
8
8
 
9
9
  export interface KeyMetadata {
10
- name: string,
11
- version: number
10
+ name: string;
11
+ version: number;
12
12
  }
13
13
 
14
14
  export interface Key {
15
- metadata: KeyMetadata,
16
- material: Buffer
15
+ metadata: KeyMetadata;
16
+ material: Buffer;
17
17
  }
18
18
 
19
- export const KeyProvider = Symbol('KeyProvider');
19
+ export const KeyProvider = Symbol("KeyProvider");
20
20
  export interface KeyProvider {
21
21
  getPrimaryKey(): Key;
22
22
  getKeyFor(metadata: KeyMetadata): Key;
@@ -24,24 +24,21 @@ export interface KeyProvider {
24
24
 
25
25
  export type KeyConfig = KeyMetadata & {
26
26
  /** base64 encoded */
27
- material: string,
28
- primary?: boolean
29
- }
27
+ material: string;
28
+ primary?: boolean;
29
+ };
30
30
 
31
- export const KeyProviderConfig = Symbol('KeyProviderConfig');
31
+ export const KeyProviderConfig = Symbol("KeyProviderConfig");
32
32
  export interface KeyProviderConfig {
33
- keys: KeyConfig[]
33
+ keys: KeyConfig[];
34
34
  }
35
35
 
36
36
  @injectable()
37
37
  export class KeyProviderImpl implements KeyProvider {
38
-
39
38
  static loadKeyConfigFromJsonString(configStr: string): KeyConfig[] {
40
39
  const keys = (JSON.parse(configStr) || []) as KeyConfig[];
41
- if (!Array.isArray(keys)
42
- || keys.length < 0
43
- || 1 !== keys.reduce((p, k) => k.primary ? p + 1 : p, 0)) {
44
- throw new Error('Invalid key config!');
40
+ if (!Array.isArray(keys) || keys.length < 0 || 1 !== keys.reduce((p, k) => (k.primary ? p + 1 : p), 0)) {
41
+ throw new Error("Invalid key config!");
45
42
  }
46
43
  return keys;
47
44
  }
@@ -49,13 +46,13 @@ export class KeyProviderImpl implements KeyProvider {
49
46
  constructor(@inject(KeyProviderConfig) protected readonly config: KeyProviderConfig) {}
50
47
 
51
48
  protected get keys() {
52
- return this.config.keys
49
+ return this.config.keys;
53
50
  }
54
51
 
55
52
  getPrimaryKey(): Key {
56
53
  const primaryKey = this.keys.find((key) => !!key.primary);
57
54
  if (!primaryKey) {
58
- throw new Error('No primary encryption key found!');
55
+ throw new Error("No primary encryption key found!");
59
56
  }
60
57
  return this.configToKey(primaryKey);
61
58
  }
@@ -72,9 +69,9 @@ export class KeyProviderImpl implements KeyProvider {
72
69
  return {
73
70
  metadata: {
74
71
  name: config.name,
75
- version: config.version
72
+ version: config.version,
76
73
  },
77
- material: new Buffer(config.material, 'base64')
74
+ material: Buffer.from(config.material, "base64"),
78
75
  };
79
76
  }
80
77
  }
package/src/env.ts CHANGED
@@ -1,36 +1,13 @@
1
1
  /**
2
- * Copyright (c) 2020 TypeFox GmbH. All rights reserved.
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
- const legacyStagenameTranslation: { [key: string]: KubeStage } = {
10
- "production": "production",
11
- "staging": "prodcopy",
12
- "devstaging": "dev",
13
- "dev": "dev"
14
- }
15
-
16
9
  @injectable()
17
- export abstract class AbstractComponentEnv {
18
- readonly kubeStage: KubeStage = getEnvVarParsed('KUBE_STAGE', (kubeStage) => {
19
- const stage = legacyStagenameTranslation[kubeStage];
20
- if (!stage) {
21
- throw new Error(`Environment variable invalid: KUBE_STAGE=${kubeStage}`);
22
- }
23
-
24
- return stage;
25
- });
26
- readonly kubeNamespace: string = getEnvVar('KUBE_NAMESPACE');
27
- readonly version: string = getEnvVar('VERSION');
28
-
29
- readonly installationLongname: string = getEnvVar("GITPOD_INSTALLATION_LONGNAME")
30
- readonly installationShortname: string = getEnvVar("GITPOD_INSTALLATION_SHORTNAME")
31
- }
32
-
33
- export type KubeStage = 'production' | 'prodcopy' | 'staging' | 'dev';
10
+ export abstract class AbstractComponentEnv {}
34
11
 
35
12
  export function getEnvVar(name: string, defaultValue?: string): string {
36
13
  const value = process.env[name] || defaultValue;