@gitpod/gitpod-protocol 0.1.5-main.648 → 0.1.5-main.6480

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 +157 -29
  2. package/lib/accounting-protocol.d.ts +19 -14
  3. package/lib/accounting-protocol.d.ts.map +1 -1
  4. package/lib/accounting-protocol.js +44 -48
  5. package/lib/accounting-protocol.js.map +1 -1
  6. package/lib/admin-protocol.d.ts +44 -5
  7. package/lib/admin-protocol.d.ts.map +1 -1
  8. package/lib/admin-protocol.js +16 -1
  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 +24 -0
  15. package/lib/attribution.d.ts.map +1 -0
  16. package/lib/attribution.js +54 -0
  17. package/lib/attribution.js.map +1 -0
  18. package/lib/auth.d.ts +1 -1
  19. package/lib/auth.d.ts.map +1 -1
  20. package/lib/auth.js +1 -1
  21. package/lib/billing-mode.d.ts +45 -0
  22. package/lib/billing-mode.d.ts.map +1 -0
  23. package/lib/billing-mode.js +44 -0
  24. package/lib/billing-mode.js.map +1 -0
  25. package/lib/blocked-repositories-protocol.d.ts +13 -0
  26. package/lib/blocked-repositories-protocol.d.ts.map +1 -0
  27. package/lib/blocked-repositories-protocol.js +8 -0
  28. package/lib/blocked-repositories-protocol.js.map +1 -0
  29. package/lib/context-url.d.ts +30 -0
  30. package/lib/context-url.d.ts.map +1 -0
  31. package/lib/context-url.js +100 -0
  32. package/lib/context-url.js.map +1 -0
  33. package/lib/context-url.spec.d.ts +12 -0
  34. package/lib/context-url.spec.d.ts.map +1 -0
  35. package/lib/context-url.spec.js +81 -0
  36. package/lib/context-url.spec.js.map +1 -0
  37. package/lib/encryption/container-module.d.ts +1 -1
  38. package/lib/encryption/container-module.d.ts.map +1 -1
  39. package/lib/encryption/container-module.js +5 -5
  40. package/lib/encryption/container-module.js.map +1 -1
  41. package/lib/encryption/encryption-engine.d.ts +1 -1
  42. package/lib/encryption/encryption-engine.d.ts.map +1 -1
  43. package/lib/encryption/encryption-engine.js +26 -27
  44. package/lib/encryption/encryption-engine.js.map +1 -1
  45. package/lib/encryption/encryption-engine.spec.d.ts +1 -1
  46. package/lib/encryption/encryption-engine.spec.d.ts.map +1 -1
  47. package/lib/encryption/encryption-engine.spec.js +30 -38
  48. package/lib/encryption/encryption-engine.spec.js.map +1 -1
  49. package/lib/encryption/encryption-service.d.ts +1 -1
  50. package/lib/encryption/encryption-service.d.ts.map +1 -1
  51. package/lib/encryption/encryption-service.js +31 -45
  52. package/lib/encryption/encryption-service.js.map +1 -1
  53. package/lib/encryption/key-provider.d.ts +1 -1
  54. package/lib/encryption/key-provider.d.ts.map +1 -1
  55. package/lib/encryption/key-provider.js +32 -39
  56. package/lib/encryption/key-provider.js.map +1 -1
  57. package/lib/env.d.ts +1 -7
  58. package/lib/env.d.ts.map +1 -1
  59. package/lib/env.js +8 -28
  60. package/lib/env.js.map +1 -1
  61. package/lib/experiments/always-default.d.ts +8 -0
  62. package/lib/experiments/always-default.d.ts.map +1 -0
  63. package/lib/experiments/always-default.js +20 -0
  64. package/lib/experiments/always-default.js.map +1 -0
  65. package/lib/experiments/configcat-server.d.ts +10 -0
  66. package/lib/experiments/configcat-server.d.ts.map +1 -0
  67. package/lib/experiments/configcat-server.js +37 -0
  68. package/lib/experiments/configcat-server.js.map +1 -0
  69. package/lib/experiments/configcat.d.ts +21 -0
  70. package/lib/experiments/configcat.d.ts.map +1 -0
  71. package/lib/experiments/configcat.js +51 -0
  72. package/lib/experiments/configcat.js.map +1 -0
  73. package/lib/experiments/types.d.ts +22 -0
  74. package/lib/experiments/types.d.ts.map +1 -0
  75. package/lib/experiments/types.js +10 -0
  76. package/lib/experiments/types.js.map +1 -0
  77. package/lib/frontend-dashboard-service.d.ts +90 -0
  78. package/lib/frontend-dashboard-service.d.ts.map +1 -0
  79. package/lib/frontend-dashboard-service.js +49 -0
  80. package/lib/frontend-dashboard-service.js.map +1 -0
  81. package/lib/gitpod-file-parser.d.ts +1 -1
  82. package/lib/gitpod-file-parser.d.ts.map +1 -1
  83. package/lib/gitpod-file-parser.js +27 -43
  84. package/lib/gitpod-file-parser.js.map +1 -1
  85. package/lib/gitpod-file-parser.spec.d.ts +1 -1
  86. package/lib/gitpod-file-parser.spec.js +146 -143
  87. package/lib/gitpod-file-parser.spec.js.map +1 -1
  88. package/lib/gitpod-service.d.ts +191 -55
  89. package/lib/gitpod-service.d.ts.map +1 -1
  90. package/lib/gitpod-service.js +204 -298
  91. package/lib/gitpod-service.js.map +1 -1
  92. package/lib/headless-workspace-log.d.ts +10 -12
  93. package/lib/headless-workspace-log.d.ts.map +1 -1
  94. package/lib/headless-workspace-log.js +7 -9
  95. package/lib/headless-workspace-log.js.map +1 -1
  96. package/lib/ide-frontend-service.d.ts +2 -2
  97. package/lib/ide-frontend-service.js +1 -1
  98. package/lib/ide-protocol.d.ts +126 -0
  99. package/lib/ide-protocol.d.ts.map +1 -0
  100. package/lib/ide-protocol.js +18 -0
  101. package/lib/ide-protocol.js.map +1 -0
  102. package/lib/index.d.ts +17 -11
  103. package/lib/index.d.ts.map +1 -1
  104. package/lib/index.js +8 -2
  105. package/lib/index.js.map +1 -1
  106. package/lib/installation-admin-protocol.d.ts +30 -0
  107. package/lib/installation-admin-protocol.d.ts.map +1 -0
  108. package/lib/installation-admin-protocol.js +31 -0
  109. package/lib/installation-admin-protocol.js.map +1 -0
  110. package/lib/license-protocol.d.ts +8 -1
  111. package/lib/license-protocol.d.ts.map +1 -1
  112. package/lib/license-protocol.js +1 -1
  113. package/lib/license-protocol.js.map +1 -1
  114. package/lib/messaging/browser/connection.d.ts +4 -6
  115. package/lib/messaging/browser/connection.d.ts.map +1 -1
  116. package/lib/messaging/browser/connection.js +176 -45
  117. package/lib/messaging/browser/connection.js.map +1 -1
  118. package/lib/messaging/browser/window-connection.d.ts +5 -5
  119. package/lib/messaging/browser/window-connection.d.ts.map +1 -1
  120. package/lib/messaging/browser/window-connection.js +43 -60
  121. package/lib/messaging/browser/window-connection.js.map +1 -1
  122. package/lib/messaging/client-call-metrics.d.ts +21 -0
  123. package/lib/messaging/client-call-metrics.d.ts.map +1 -0
  124. package/lib/messaging/client-call-metrics.js +95 -0
  125. package/lib/messaging/client-call-metrics.js.map +1 -0
  126. package/lib/messaging/error.d.ts +13 -3
  127. package/lib/messaging/error.d.ts.map +1 -1
  128. package/lib/messaging/error.js +25 -5
  129. package/lib/messaging/error.js.map +1 -1
  130. package/lib/messaging/handler.d.ts +10 -0
  131. package/lib/messaging/handler.d.ts.map +1 -1
  132. package/lib/messaging/handler.js +1 -1
  133. package/lib/messaging/node/connection.d.ts +1 -17
  134. package/lib/messaging/node/connection.d.ts.map +1 -1
  135. package/lib/messaging/node/connection.js +24 -60
  136. package/lib/messaging/node/connection.js.map +1 -1
  137. package/lib/messaging/proxy-factory.d.ts +3 -1
  138. package/lib/messaging/proxy-factory.d.ts.map +1 -1
  139. package/lib/messaging/proxy-factory.js +75 -162
  140. package/lib/messaging/proxy-factory.js.map +1 -1
  141. package/lib/oss-allowlist.d.ts +14 -0
  142. package/lib/oss-allowlist.d.ts.map +1 -0
  143. package/lib/oss-allowlist.js +8 -0
  144. package/lib/oss-allowlist.js.map +1 -0
  145. package/lib/payment-protocol.d.ts +1 -1
  146. package/lib/payment-protocol.d.ts.map +1 -1
  147. package/lib/payment-protocol.js +2 -2
  148. package/lib/payment-protocol.js.map +1 -1
  149. package/lib/permission.d.ts +14 -4
  150. package/lib/permission.d.ts.map +1 -1
  151. package/lib/permission.js +45 -32
  152. package/lib/permission.js.map +1 -1
  153. package/lib/plans.d.ts +6 -5
  154. package/lib/plans.d.ts.map +1 -1
  155. package/lib/plans.js +230 -210
  156. package/lib/plans.js.map +1 -1
  157. package/lib/protocol.d.ts +261 -105
  158. package/lib/protocol.d.ts.map +1 -1
  159. package/lib/protocol.js +346 -205
  160. package/lib/protocol.js.map +1 -1
  161. package/{src/util/without.ts → lib/protocol.spec.d.ts} +3 -4
  162. package/lib/protocol.spec.d.ts.map +1 -0
  163. package/lib/protocol.spec.js +127 -0
  164. package/lib/protocol.spec.js.map +1 -0
  165. package/lib/snapshot-url.d.ts +14 -0
  166. package/lib/snapshot-url.d.ts.map +1 -0
  167. package/lib/snapshot-url.js +26 -0
  168. package/lib/snapshot-url.js.map +1 -0
  169. package/lib/snapshot-url.spec.d.ts +7 -0
  170. package/lib/snapshot-url.spec.d.ts.map +1 -0
  171. package/lib/snapshot-url.spec.js +41 -0
  172. package/lib/snapshot-url.spec.js.map +1 -0
  173. package/lib/team-subscription-protocol.d.ts +24 -5
  174. package/lib/team-subscription-protocol.d.ts.map +1 -1
  175. package/lib/team-subscription-protocol.js +36 -18
  176. package/lib/team-subscription-protocol.js.map +1 -1
  177. package/lib/teams-projects-protocol.d.ts +137 -0
  178. package/lib/teams-projects-protocol.d.ts.map +1 -0
  179. package/lib/teams-projects-protocol.js +41 -0
  180. package/lib/teams-projects-protocol.js.map +1 -0
  181. package/lib/typings/globals.d.ts +3 -3
  182. package/lib/typings/globals.d.ts.map +1 -1
  183. package/lib/typings/globals.js +1 -1
  184. package/lib/usage.d.ts +73 -0
  185. package/lib/usage.d.ts.map +1 -0
  186. package/lib/usage.js +20 -0
  187. package/lib/usage.js.map +1 -0
  188. package/lib/util/analytics.d.ts +8 -0
  189. package/lib/util/analytics.d.ts.map +1 -0
  190. package/lib/util/analytics.js +88 -0
  191. package/lib/util/analytics.js.map +1 -0
  192. package/lib/util/async-iterator.d.ts +1 -1
  193. package/lib/util/async-iterator.d.ts.map +1 -1
  194. package/lib/util/async-iterator.js +58 -136
  195. package/lib/util/async-iterator.js.map +1 -1
  196. package/lib/util/cancelable.d.ts +1 -1
  197. package/lib/util/cancelable.js +18 -60
  198. package/lib/util/cancelable.js.map +1 -1
  199. package/lib/util/date-time.d.ts +1 -1
  200. package/lib/util/date-time.js +12 -12
  201. package/lib/util/date-time.js.map +1 -1
  202. package/lib/util/debug-app.d.ts +25 -0
  203. package/lib/util/debug-app.d.ts.map +1 -0
  204. package/lib/util/debug-app.js +100 -0
  205. package/lib/util/debug-app.js.map +1 -0
  206. package/lib/util/deep-partial.d.ts +1 -1
  207. package/lib/util/deep-partial.js +1 -1
  208. package/lib/util/deferred.d.ts +1 -1
  209. package/lib/util/deferred.js +11 -13
  210. package/lib/util/deferred.js.map +1 -1
  211. package/lib/util/disposable.d.ts.map +1 -1
  212. package/lib/util/disposable.js +27 -40
  213. package/lib/util/disposable.js.map +1 -1
  214. package/lib/util/event.d.ts.map +1 -1
  215. package/lib/util/event.js +63 -77
  216. package/lib/util/event.js.map +1 -1
  217. package/lib/util/garbage-collected-cache.d.ts +2 -1
  218. package/lib/util/garbage-collected-cache.d.ts.map +1 -1
  219. package/lib/util/garbage-collected-cache.js +33 -48
  220. package/lib/util/garbage-collected-cache.js.map +1 -1
  221. package/lib/util/generate-workspace-id.d.ts +6 -1
  222. package/lib/util/generate-workspace-id.d.ts.map +1 -1
  223. package/lib/util/generate-workspace-id.js +469 -502
  224. package/lib/util/generate-workspace-id.js.map +1 -1
  225. package/lib/util/generate-workspace-id.spec.d.ts +1 -1
  226. package/lib/util/generate-workspace-id.spec.js +69 -79
  227. package/lib/util/generate-workspace-id.spec.js.map +1 -1
  228. package/lib/util/gitpod-cookie.d.ts +20 -0
  229. package/lib/util/gitpod-cookie.d.ts.map +1 -0
  230. package/lib/util/gitpod-cookie.js +41 -0
  231. package/lib/util/gitpod-cookie.js.map +1 -0
  232. package/lib/util/gitpod-host-url.d.ts +12 -7
  233. package/lib/util/gitpod-host-url.d.ts.map +1 -1
  234. package/lib/util/gitpod-host-url.js +132 -110
  235. package/lib/util/gitpod-host-url.js.map +1 -1
  236. package/lib/util/gitpod-host-url.spec.d.ts +7 -1
  237. package/lib/util/gitpod-host-url.spec.d.ts.map +1 -1
  238. package/lib/util/gitpod-host-url.spec.js +113 -31
  239. package/lib/util/gitpod-host-url.spec.js.map +1 -1
  240. package/lib/util/grpc.d.ts +35 -0
  241. package/lib/util/grpc.d.ts.map +1 -0
  242. package/lib/util/grpc.js +90 -0
  243. package/lib/util/grpc.js.map +1 -0
  244. package/lib/util/jaeger-client-types.d.ts +68 -0
  245. package/lib/util/jaeger-client-types.d.ts.map +1 -0
  246. package/lib/{theia-plugins.js → util/jaeger-client-types.js} +2 -2
  247. package/lib/util/jaeger-client-types.js.map +1 -0
  248. package/lib/util/logging.d.ts +50 -34
  249. package/lib/util/logging.d.ts.map +1 -1
  250. package/lib/util/logging.js +133 -130
  251. package/lib/util/logging.js.map +1 -1
  252. package/lib/util/logging.spec.d.ts +7 -0
  253. package/lib/util/logging.spec.d.ts.map +1 -0
  254. package/lib/util/logging.spec.js +52 -0
  255. package/lib/util/logging.spec.js.map +1 -0
  256. package/lib/util/make-link.d.ts +1 -1
  257. package/lib/util/make-link.js +6 -6
  258. package/lib/util/make-link.js.map +1 -1
  259. package/lib/util/nice-grpc.d.ts +9 -0
  260. package/lib/util/nice-grpc.d.ts.map +1 -0
  261. package/lib/util/nice-grpc.js +121 -0
  262. package/lib/util/nice-grpc.js.map +1 -0
  263. package/lib/util/parse-workspace-id.d.ts +11 -1
  264. package/lib/util/parse-workspace-id.d.ts.map +1 -1
  265. package/lib/util/parse-workspace-id.js +31 -8
  266. package/lib/util/parse-workspace-id.js.map +1 -1
  267. package/lib/util/parse-workspace-id.spec.d.ts +5 -1
  268. package/lib/util/parse-workspace-id.spec.d.ts.map +1 -1
  269. package/lib/util/parse-workspace-id.spec.js +124 -85
  270. package/lib/util/parse-workspace-id.spec.js.map +1 -1
  271. package/lib/util/queue.d.ts +1 -1
  272. package/lib/util/queue.js +17 -56
  273. package/lib/util/queue.js.map +1 -1
  274. package/lib/util/queue.spec.d.ts +1 -1
  275. package/lib/util/queue.spec.js +148 -289
  276. package/lib/util/queue.spec.js.map +1 -1
  277. package/lib/util/repeat.d.ts +15 -0
  278. package/lib/util/repeat.d.ts.map +1 -0
  279. package/lib/util/repeat.js +55 -0
  280. package/lib/util/repeat.js.map +1 -0
  281. package/lib/util/semaphore.d.ts +1 -1
  282. package/lib/util/semaphore.d.ts.map +1 -1
  283. package/lib/util/semaphore.js +16 -47
  284. package/lib/util/semaphore.js.map +1 -1
  285. package/lib/util/skip-if.d.ts +1 -1
  286. package/lib/util/skip-if.d.ts.map +1 -1
  287. package/lib/util/skip-if.js +7 -7
  288. package/lib/util/skip-if.js.map +1 -1
  289. package/lib/util/timeutil.d.ts +3 -1
  290. package/lib/util/timeutil.d.ts.map +1 -1
  291. package/lib/util/timeutil.js +30 -18
  292. package/lib/util/timeutil.js.map +1 -1
  293. package/lib/util/timeutil.spec.d.ts +3 -1
  294. package/lib/util/timeutil.spec.d.ts.map +1 -1
  295. package/lib/util/timeutil.spec.js +55 -24
  296. package/lib/util/timeutil.spec.js.map +1 -1
  297. package/lib/util/tracing.d.ts +53 -7
  298. package/lib/util/tracing.d.ts.map +1 -1
  299. package/lib/util/tracing.js +198 -65
  300. package/lib/util/tracing.js.map +1 -1
  301. package/lib/util/tracing.spec.d.ts +7 -0
  302. package/lib/util/tracing.spec.d.ts.map +1 -0
  303. package/lib/util/tracing.spec.js +121 -0
  304. package/lib/util/tracing.spec.js.map +1 -0
  305. package/lib/util/workspace-port-authentication.d.ts +8 -8
  306. package/lib/util/workspace-port-authentication.d.ts.map +1 -1
  307. package/lib/util/workspace-port-authentication.js +10 -13
  308. package/lib/util/workspace-port-authentication.js.map +1 -1
  309. package/lib/webhook-event.d.ts +44 -0
  310. package/lib/webhook-event.d.ts.map +1 -0
  311. package/lib/webhook-event.js +8 -0
  312. package/lib/webhook-event.js.map +1 -0
  313. package/lib/workspace-class.d.ts +14 -0
  314. package/lib/workspace-class.d.ts.map +1 -0
  315. package/lib/workspace-class.js +8 -0
  316. package/lib/workspace-class.js.map +1 -0
  317. package/lib/workspace-cluster.d.ts +28 -8
  318. package/lib/workspace-cluster.d.ts.map +1 -1
  319. package/lib/workspace-cluster.js +20 -5
  320. package/lib/workspace-cluster.js.map +1 -1
  321. package/lib/workspace-instance.d.ts +46 -6
  322. package/lib/workspace-instance.d.ts.map +1 -1
  323. package/lib/workspace-instance.js +1 -1
  324. package/lib/wsready.d.ts +8 -2
  325. package/lib/wsready.d.ts.map +1 -1
  326. package/lib/wsready.js +3 -3
  327. package/package.json +40 -18
  328. package/pkg-yarn.lock +23 -10
  329. package/provenance-bundle.jsonl +2 -0
  330. package/src/accounting-protocol.ts +67 -58
  331. package/src/admin-protocol.ts +88 -20
  332. package/src/analytics.ts +52 -0
  333. package/src/attribution.ts +63 -0
  334. package/src/auth.ts +3 -3
  335. package/src/billing-mode.ts +84 -0
  336. package/src/blocked-repositories-protocol.ts +13 -0
  337. package/src/context-url.spec.ts +49 -0
  338. package/src/context-url.ts +107 -0
  339. package/src/encryption/container-module.ts +3 -4
  340. package/src/encryption/encryption-engine.spec.ts +10 -9
  341. package/src/encryption/encryption-engine.ts +21 -17
  342. package/src/encryption/encryption-service.ts +5 -6
  343. package/src/encryption/key-provider.ts +17 -20
  344. package/src/env.ts +2 -25
  345. package/src/experiments/always-default.ts +24 -0
  346. package/src/experiments/configcat-server.ts +42 -0
  347. package/src/experiments/configcat.ts +56 -0
  348. package/src/experiments/types.ts +34 -0
  349. package/src/frontend-dashboard-service.ts +125 -0
  350. package/src/gitpod-file-parser.spec.ts +56 -62
  351. package/src/gitpod-file-parser.ts +17 -18
  352. package/src/gitpod-service.ts +369 -146
  353. package/src/headless-workspace-log.ts +13 -15
  354. package/src/ide-frontend-service.ts +3 -3
  355. package/src/ide-protocol.ts +147 -0
  356. package/src/index.ts +17 -11
  357. package/src/installation-admin-protocol.ts +45 -0
  358. package/src/license-protocol.ts +13 -7
  359. package/src/messaging/browser/connection.ts +187 -28
  360. package/src/messaging/browser/window-connection.ts +40 -30
  361. package/src/messaging/client-call-metrics.ts +94 -0
  362. package/src/messaging/error.ts +36 -8
  363. package/src/messaging/handler.ts +13 -1
  364. package/src/messaging/node/connection.ts +23 -70
  365. package/src/messaging/proxy-factory.ts +35 -34
  366. package/src/oss-allowlist.ts +15 -0
  367. package/src/payment-protocol.ts +3 -3
  368. package/src/permission.ts +47 -34
  369. package/src/plans.ts +250 -199
  370. package/src/protocol.spec.ts +97 -0
  371. package/src/protocol.ts +636 -293
  372. package/src/snapshot-url.spec.ts +27 -0
  373. package/src/snapshot-url.ts +27 -0
  374. package/src/team-subscription-protocol.ts +62 -23
  375. package/src/teams-projects-protocol.ts +181 -0
  376. package/src/typings/globals.ts +6 -5
  377. package/src/usage.ts +85 -0
  378. package/src/util/analytics.ts +109 -0
  379. package/src/util/async-iterator.ts +5 -6
  380. package/src/util/cancelable.ts +4 -4
  381. package/src/util/date-time.ts +9 -9
  382. package/src/util/debug-app.ts +81 -0
  383. package/src/util/deep-partial.ts +1 -1
  384. package/src/util/deferred.ts +7 -7
  385. package/src/util/disposable.ts +3 -6
  386. package/src/util/event.ts +9 -11
  387. package/src/util/garbage-collected-cache.ts +17 -9
  388. package/src/util/generate-workspace-id.spec.ts +38 -11
  389. package/src/util/generate-workspace-id.ts +465 -439
  390. package/src/util/gitpod-cookie.ts +38 -0
  391. package/src/util/gitpod-host-url.spec.ts +59 -8
  392. package/src/util/gitpod-host-url.ts +88 -48
  393. package/src/util/grpc.ts +107 -0
  394. package/src/util/jaeger-client-types.ts +102 -0
  395. package/src/util/logging.spec.ts +23 -0
  396. package/src/util/logging.ts +157 -75
  397. package/src/util/make-link.ts +7 -8
  398. package/src/util/nice-grpc.ts +96 -0
  399. package/src/util/parse-workspace-id.spec.ts +38 -9
  400. package/src/util/parse-workspace-id.ts +33 -8
  401. package/src/util/queue.spec.ts +28 -26
  402. package/src/util/queue.ts +1 -1
  403. package/src/util/repeat.ts +45 -0
  404. package/src/util/semaphore.ts +7 -9
  405. package/src/util/skip-if.ts +11 -8
  406. package/src/util/timeutil.spec.ts +41 -15
  407. package/src/util/timeutil.ts +32 -16
  408. package/src/util/tracing.spec.ts +88 -0
  409. package/src/util/tracing.ts +201 -32
  410. package/src/util/workspace-port-authentication.ts +11 -14
  411. package/src/webhook-event.ts +55 -0
  412. package/src/workspace-class.ts +14 -0
  413. package/src/workspace-cluster.ts +47 -17
  414. package/src/workspace-instance.ts +106 -32
  415. package/src/wsready.ts +11 -4
  416. package/data/builtin-theia-plugins.json +0 -372
  417. package/lib/email-protocol.d.ts +0 -50
  418. package/lib/email-protocol.d.ts.map +0 -1
  419. package/lib/email-protocol.js +0 -28
  420. package/lib/email-protocol.js.map +0 -1
  421. package/lib/messaging/connection-error-handler.d.ts +0 -27
  422. package/lib/messaging/connection-error-handler.d.ts.map +0 -1
  423. package/lib/messaging/connection-error-handler.js +0 -46
  424. package/lib/messaging/connection-error-handler.js.map +0 -1
  425. package/lib/theia-plugins.d.ts +0 -11
  426. package/lib/theia-plugins.d.ts.map +0 -1
  427. package/lib/theia-plugins.js.map +0 -1
  428. package/lib/util/context-url.d.ts +0 -13
  429. package/lib/util/context-url.d.ts.map +0 -1
  430. package/lib/util/context-url.js +0 -26
  431. package/lib/util/context-url.js.map +0 -1
  432. package/lib/util/context-url.spec.d.ts +0 -10
  433. package/lib/util/context-url.spec.d.ts.map +0 -1
  434. package/lib/util/context-url.spec.js +0 -52
  435. package/lib/util/context-url.spec.js.map +0 -1
  436. package/lib/util/repeater.d.ts +0 -22
  437. package/lib/util/repeater.d.ts.map +0 -1
  438. package/lib/util/repeater.js +0 -118
  439. package/lib/util/repeater.js.map +0 -1
  440. package/lib/util/safe-promise.d.ts +0 -11
  441. package/lib/util/safe-promise.d.ts.map +0 -1
  442. package/lib/util/safe-promise.js +0 -34
  443. package/lib/util/safe-promise.js.map +0 -1
  444. package/lib/util/without.d.ts +0 -7
  445. package/lib/util/without.d.ts.map +0 -1
  446. package/lib/util/without.js +0 -8
  447. package/lib/util/without.js.map +0 -1
  448. package/src/email-protocol.ts +0 -67
  449. package/src/messaging/connection-error-handler.ts +0 -62
  450. package/src/theia-plugins.ts +0 -11
  451. package/src/util/context-url.spec.ts +0 -25
  452. package/src/util/context-url.ts +0 -23
  453. package/src/util/jaeger-client.d.ts +0 -105
  454. package/src/util/repeater.ts +0 -49
  455. package/src/util/safe-promise.ts +0 -26
@@ -1,51 +1,195 @@
1
1
  /**
2
2
  * Copyright (c) 2020 Gitpod GmbH. All rights reserved.
3
3
  * Licensed under the GNU Affero General Public License (AGPL).
4
- * See License-AGPL.txt in the project root for license information.
4
+ * See License.AGPL.txt in the project root for license information.
5
5
  */
6
6
 
7
-
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
+ };
@@ -1,20 +1,17 @@
1
1
  /**
2
2
  * Copyright (c) 2020 Gitpod GmbH. All rights reserved.
3
3
  * Licensed under the GNU Affero General Public License (AGPL).
4
- * See License-AGPL.txt in the project root for license information.
4
+ * See License.AGPL.txt in the project root for license information.
5
5
  */
6
6
 
7
7
  /**
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
+ isDefault: boolean;
14
+ }
@@ -1,20 +1,24 @@
1
1
  /**
2
2
  * Copyright (c) 2020 Gitpod GmbH. All rights reserved.
3
3
  * Licensed under the GNU Affero General Public License (AGPL).
4
- * See License-AGPL.txt in the project root for license information.
4
+ * See License.AGPL.txt in the project root for license information.
5
5
  */
6
6
 
7
- 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';
10
+ import { PermissionName } from "./permission";
11
11
 
12
12
  export interface WorkspaceCluster {
13
13
  // Name of the workspace cluster.
14
- // This is the string set in each
14
+ // This is the string set in each
15
15
  // Must be identical to the installationShortname of the cluster it represents!
16
16
  name: string;
17
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
+
18
22
  // URL of the cluster's ws-manager API
19
23
  url: string;
20
24
 
@@ -32,7 +36,11 @@ export interface WorkspaceCluster {
32
36
 
33
37
  // True if this bridge should control this cluster
34
38
  govern: boolean;
39
+
40
+ // An optional set of constraints that limit who can start workspaces on the cluster
41
+ admissionConstraints?: AdmissionConstraint[];
35
42
  }
43
+
36
44
  export type WorkspaceClusterState = "available" | "cordoned" | "draining";
37
45
  export interface TLSConfig {
38
46
  // the CA shared between client and server (base64 encoded)
@@ -43,38 +51,60 @@ export interface TLSConfig {
43
51
  crt: string;
44
52
  }
45
53
  export namespace TLSConfig {
46
- 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");
47
56
  }
48
- export type WorkspaceClusterWoTls = Without<WorkspaceCluster, "tls">;
57
+ export type WorkspaceClusterWoTLS = Omit<WorkspaceCluster, "tls">;
49
58
  export type WorkspaceManagerConnectionInfo = Pick<WorkspaceCluster, "name" | "url" | "tls">;
50
59
 
60
+ export type AdmissionConstraint =
61
+ | AdmissionConstraintFeaturePreview
62
+ | AdmissionConstraintHasPermission
63
+ | AdmissionConstraintHasClass;
64
+ export type AdmissionConstraintFeaturePreview = { type: "has-feature-preview" };
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
+ }
79
+
51
80
  export const WorkspaceClusterDB = Symbol("WorkspaceClusterDB");
52
81
  export interface WorkspaceClusterDB {
53
82
  /**
54
83
  * Stores the given WorkspaceCluster to the cluster-local DB in a consistent manner.
55
84
  * If there already is an entry with the same name it's merged and updated with the given state.
56
- * @param cluster
85
+ * @param cluster
57
86
  */
58
87
  save(cluster: WorkspaceCluster): Promise<void>;
59
88
 
60
89
  /**
61
90
  * Deletes the cluster identified by this name, if any.
62
- * @param name
91
+ * @param name
63
92
  */
64
- deleteByName(name: string): Promise<void>;
93
+ deleteByName(name: string, applicationCluster: string): Promise<void>;
65
94
 
66
95
  /**
67
96
  * Finds a WorkspaceCluster with the given name. If there is none, `undefined` is returned.
68
- * @param name
97
+ * @param name
69
98
  */
70
- findByName(name: string): Promise<WorkspaceCluster | undefined>;
99
+ findByName(name: string, applicationCluster: string): Promise<WorkspaceCluster | undefined>;
71
100
 
72
101
  /**
73
102
  * Lists all WorkspaceClusterWoTls for which the given predicate is true (does not return TLS for size/speed concerns)
74
- * @param predicate
103
+ * @param predicate
75
104
  */
76
- findFiltered(predicate: DeepPartial<WorkspaceClusterFilter>): Promise<WorkspaceClusterWoTls[]>;
105
+ findFiltered(predicate: WorkspaceClusterFilter): Promise<WorkspaceClusterWoTLS[]>;
77
106
  }
78
- export interface WorkspaceClusterFilter extends Pick<WorkspaceCluster, "state" | "govern" | "url"> {
79
- minScore: number;
80
- }
107
+
108
+ export type WorkspaceClusterFilter = Pick<WorkspaceCluster, "applicationCluster"> &
109
+ DeepPartial<Pick<WorkspaceCluster, "name" | "state" | "govern" | "url">> &
110
+ Partial<{ minScore: number }>;