@gitpod/gitpod-protocol 0.1.5-sh-ace-test.0 → 0.1.5-siddhant-k-code-allow-github-prebuilds-10358.2

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 +163 -74
  2. package/lib/accounting-protocol.d.ts +163 -0
  3. package/lib/accounting-protocol.d.ts.map +1 -0
  4. package/lib/accounting-protocol.js +111 -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 +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 +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 +90 -0
  79. package/lib/frontend-dashboard-service.d.ts.map +1 -0
  80. package/lib/frontend-dashboard-service.js +49 -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 +241 -50
  90. package/lib/gitpod-service.d.ts.map +1 -1
  91. package/lib/gitpod-service.js +275 -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 +17 -4
  130. package/lib/messaging/error.d.ts.map +1 -1
  131. package/lib/messaging/error.js +34 -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 +211 -0
  158. package/lib/plans.d.ts.map +1 -0
  159. package/lib/plans.js +609 -0
  160. package/lib/plans.js.map +1 -0
  161. package/lib/protocol.d.ts +300 -112
  162. package/lib/protocol.d.ts.map +1 -1
  163. package/lib/protocol.js +393 -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 +92 -0
  178. package/lib/team-subscription-protocol.d.ts.map +1 -0
  179. package/lib/team-subscription-protocol.js +78 -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 +37 -0
  184. package/lib/teams-projects-protocol.js.map +1 -0
  185. package/lib/typings/globals.d.ts +4 -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 -7
  240. package/lib/util/gitpod-host-url.d.ts.map +1 -1
  241. package/lib/util/gitpod-host-url.js +146 -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 +54 -8
  305. package/lib/util/tracing.d.ts.map +1 -1
  306. package/lib/util/tracing.js +200 -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 +75 -0
  325. package/lib/workspace-cluster.d.ts.map +1 -0
  326. package/lib/workspace-cluster.js +31 -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 +244 -0
  339. package/src/admin-protocol.ts +96 -21
  340. package/src/analytics.ts +52 -0
  341. package/src/attribution.ts +63 -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 +125 -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 +534 -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 +47 -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 +683 -0
  378. package/src/protocol.spec.ts +97 -0
  379. package/src/protocol.ts +706 -299
  380. package/src/snapshot-url.spec.ts +27 -0
  381. package/src/snapshot-url.ts +27 -0
  382. package/src/team-subscription-protocol.ts +150 -0
  383. package/src/teams-projects-protocol.ts +177 -0
  384. package/src/typings/globals.ts +7 -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 +121 -38
  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 +202 -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 +110 -0
  422. package/src/workspace-instance.ts +119 -35
  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,244 @@
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
+ import { v4 as uuidv4 } from "uuid";
8
+ import { User } from "./protocol";
9
+ import { oneMonthLater } from "./util/timeutil";
10
+
11
+ /*
12
+ * Subscription and acocunting data
13
+ */
14
+ export interface AccountEntry {
15
+ uid: string;
16
+
17
+ userId: string;
18
+
19
+ /** [hours] */
20
+ amount: number;
21
+
22
+ /**
23
+ * credit: start of validity,
24
+ * session: end of (split-) session
25
+ */
26
+ date: string;
27
+
28
+ /**
29
+ * debits (session, expiry, loss): relation to credit
30
+ */
31
+ creditId?: string;
32
+
33
+ /**
34
+ * credit: end of validity
35
+ */
36
+ expiryDate?: string; // exclusive
37
+
38
+ kind: AccountEntryKind;
39
+
40
+ /**
41
+ * credit: amount - accounted debits
42
+ * [hours]
43
+ */
44
+ remainingAmount?: number;
45
+
46
+ description?: object;
47
+ }
48
+ export namespace AccountEntry {
49
+ export function create<T extends AccountEntry>(entry: Omit<T, "uid">): T {
50
+ const result = entry as T;
51
+ result.uid = uuidv4();
52
+ return result;
53
+ }
54
+ }
55
+
56
+ export type DebitAccountEntryKind = "session" | "expiry" | "loss";
57
+ export type AccountEntryKind = "credit" | DebitAccountEntryKind | "carry" | "open";
58
+
59
+ export interface Credit extends AccountEntry {
60
+ kind: "credit";
61
+ expiryDate: string;
62
+ }
63
+ export type Debit = LossDebit | ExpiryDebit | SessionDebit;
64
+ export interface LossDebit extends AccountEntry {
65
+ kind: "loss";
66
+ }
67
+ export interface ExpiryDebit extends AccountEntry {
68
+ kind: "expiry";
69
+ creditId: undefined;
70
+ }
71
+ export interface SessionDebit extends AccountEntry {
72
+ kind: DebitAccountEntryKind;
73
+ creditId: string;
74
+ }
75
+
76
+ export type AccountEntryDescription = SessionDescription | CreditDescription;
77
+ export interface CreditDescription {
78
+ subscriptionId: string;
79
+ planId: string;
80
+ }
81
+ export namespace CreditDescription {
82
+ export function is(obj: any): obj is CreditDescription {
83
+ return !!obj && obj.hasOwnProperty("subscriptionId") && obj.hasOwnProperty("planId");
84
+ }
85
+ }
86
+ export interface SessionDescription {
87
+ contextTitle: string;
88
+ contextUrl: string;
89
+ workspaceId: string;
90
+ workspaceInstanceId: string;
91
+ }
92
+ export namespace SessionDescription {
93
+ export function is(obj: any): obj is SessionDescription {
94
+ return (
95
+ !!obj &&
96
+ obj.hasOwnProperty("contextTitle") &&
97
+ obj.hasOwnProperty("contextUrl") &&
98
+ obj.hasOwnProperty("workspaceId") &&
99
+ obj.hasOwnProperty("workspaceInstanceId")
100
+ );
101
+ }
102
+ }
103
+
104
+ /**
105
+ * - The earliest subscription may start with User.creationDate
106
+ * - There may be multiple Gitpod subscriptions for a user at any given time
107
+ * - The dates form an interval of the form: [startDate, endDate)
108
+ * - Subscriptions that directly map to a Chargebee plan have their paymentReference set and MAY carry additional paymentData (UserPaidSubscription)
109
+ * - Subscriptions that are assigned to a user through a Team Subscription carry a teamSubscriptionSlotId (AssignedTeamSubscription)
110
+ */
111
+ export interface Subscription {
112
+ uid: string;
113
+ userId: string;
114
+ startDate: string; // inclusive
115
+ /** When the subscription will end (must be >= cancellationDate!) */
116
+ endDate?: string; // exclusive
117
+ /** When the subscription was cancelled */
118
+ cancellationDate?: string; // exclusive
119
+ /** Number of granted hours */
120
+ amount: number;
121
+ /** Number of granted hours for the first month: If this is set, use this value for the first month */
122
+ firstMonthAmount?: number;
123
+ planId?: string;
124
+ paymentReference?: string;
125
+ paymentData?: PaymentData;
126
+ teamSubscriptionSlotId?: string;
127
+ teamMembershipId?: string;
128
+ /** marks the subscription as deleted */
129
+ deleted?: boolean;
130
+ }
131
+
132
+ export interface SubscriptionAndUser extends Subscription {
133
+ user: User;
134
+ }
135
+
136
+ export interface PaymentData {
137
+ /** Marks the date as of which the _switch_ is effective. */
138
+ downgradeDate?: string;
139
+ /** Determines the new plan the dowgrade is targeted against (optional for backwards compatibility) */
140
+ newPlan?: string;
141
+ }
142
+
143
+ export interface UserPaidSubscription extends Subscription {
144
+ paymentReference: string;
145
+ paymentData?: PaymentData;
146
+ }
147
+ export namespace UserPaidSubscription {
148
+ export function is(data: any): data is UserPaidSubscription {
149
+ return !!data && data.hasOwnProperty("paymentReference");
150
+ }
151
+ }
152
+
153
+ export interface AssignedTeamSubscription extends Subscription {
154
+ teamSubscriptionSlotId: string;
155
+ }
156
+ export namespace AssignedTeamSubscription {
157
+ export function is(data: any): data is AssignedTeamSubscription {
158
+ return !!data && data.hasOwnProperty("teamSubscriptionSlotId");
159
+ }
160
+ }
161
+
162
+ export interface AssignedTeamSubscription2 extends Subscription {
163
+ teamMembershipId: string;
164
+ }
165
+ export namespace AssignedTeamSubscription2 {
166
+ export function is(data: any): data is AssignedTeamSubscription2 {
167
+ return typeof data === "object" && data.hasOwnProperty("teamMembershipId");
168
+ }
169
+ }
170
+
171
+ export namespace Subscription {
172
+ export function create(newSubscription: Omit<Subscription, "uid">) {
173
+ const subscription = newSubscription as Subscription;
174
+ subscription.uid = uuidv4();
175
+ return subscription;
176
+ }
177
+ export function cancelSubscription(s: Subscription, cancellationDate: string, endDate?: string) {
178
+ s.endDate = endDate || cancellationDate;
179
+ s.cancellationDate = cancellationDate;
180
+ }
181
+ export function isSame(s1: Subscription | undefined, s2: Subscription | undefined): boolean {
182
+ return (
183
+ !!s1 &&
184
+ !!s2 &&
185
+ s1.userId === s2.userId &&
186
+ s1.planId === s2.planId &&
187
+ s1.startDate === s2.startDate &&
188
+ s1.endDate === s2.endDate &&
189
+ s1.amount === s2.amount &&
190
+ s1.cancellationDate === s2.cancellationDate &&
191
+ s1.deleted === s2.deleted &&
192
+ ((s1.paymentData === undefined && s2.paymentData === undefined) ||
193
+ (!!s1.paymentData &&
194
+ !!s2.paymentData &&
195
+ s1.paymentData.downgradeDate === s2.paymentData.downgradeDate &&
196
+ s1.paymentData.newPlan === s2.paymentData.newPlan))
197
+ );
198
+ }
199
+ export function isActive(s: Subscription, date: string): boolean {
200
+ return s.startDate <= date && (s.endDate === undefined || date < s.endDate);
201
+ }
202
+ export function isCancelled(s: Subscription, date: string): boolean {
203
+ return (!!s.cancellationDate && s.cancellationDate < date) || (!!s.endDate && s.endDate < date); // This edge case is meant to handle bad data: If for whatever reason cancellationDate has not been set: treat endDate as such
204
+ }
205
+ export function isDowngraded(s: Subscription) {
206
+ return s.paymentData && s.paymentData.downgradeDate;
207
+ }
208
+ export function calculateCurrentPeriod(startDate: string, now: Date) {
209
+ let nextStartDate = startDate;
210
+ do {
211
+ startDate = nextStartDate;
212
+ nextStartDate = oneMonthLater(startDate, new Date(startDate).getDate());
213
+ } while (nextStartDate < now.toISOString());
214
+ return { startDate, endDate: nextStartDate };
215
+ }
216
+ }
217
+
218
+ export type MaybeSubscription = Subscription | undefined;
219
+
220
+ export interface Period {
221
+ startDate: string; // inclusive
222
+ endDate: string; // exclusive
223
+ }
224
+
225
+ export type MaybePeriod = Period | undefined;
226
+
227
+ export type AccountEntryFixedPeriod = Omit<AccountEntry, "uid"> & { expiryDate: string };
228
+ export interface AccountStatement extends Period {
229
+ userId: string;
230
+ /**
231
+ * The subscriptions that have not been cancelled yet at the end of the period
232
+ */
233
+ subscriptions: Subscription[];
234
+ credits: Credit[];
235
+ debits: Debit[];
236
+ /** Remaining valid hours (accumulated from credits) */
237
+ remainingHours: RemainingHours;
238
+ }
239
+ export type RemainingHours = number | "unlimited";
240
+
241
+ export interface CreditAlert {
242
+ userId: string;
243
+ remainingUsageHours: number;
244
+ }
@@ -1,63 +1,111 @@
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 { User, Workspace, NamedWorkspaceFeatureFlag } from "./protocol";
8
- import { Without } from "./util/without";
8
+ import { BlockedRepository } from "./blocked-repositories-protocol";
9
+ import { FindPrebuildsParams } from "./gitpod-service";
10
+ import { Project, Team, PrebuildWithStatus, TeamMemberInfo, TeamMemberRole } from "./teams-projects-protocol";
9
11
  import { WorkspaceInstance, WorkspaceInstancePhase } from "./workspace-instance";
10
12
  import { RoleOrPermission } from "./permission";
13
+ import { AccountStatement } from "./accounting-protocol";
14
+ import { BillingMode } from "./billing-mode";
15
+ import { CostCenterJSON, ListUsageRequest, ListUsageResponse } from "./usage";
16
+ import { InstallationAdminSettings, TelemetryData } from "./installation-admin-protocol";
11
17
 
12
18
  export interface AdminServer {
13
19
  adminGetUsers(req: AdminGetListRequest<User>): Promise<AdminGetListResult<User>>;
14
20
  adminGetUser(id: string): Promise<User>;
15
21
  adminBlockUser(req: AdminBlockUserRequest): Promise<User>;
22
+ adminDeleteUser(id: string): Promise<void>;
23
+ adminVerifyUser(id: string): Promise<User>;
16
24
  adminModifyRoleOrPermission(req: AdminModifyRoleOrPermissionRequest): Promise<User>;
17
25
  adminModifyPermanentWorkspaceFeatureFlag(req: AdminModifyPermanentWorkspaceFeatureFlagRequest): Promise<User>;
18
26
 
27
+ adminCreateBlockedRepository(urlRegexp: string, blockUser: boolean): Promise<BlockedRepository>;
28
+ adminDeleteBlockedRepository(id: number): Promise<void>;
29
+ adminGetBlockedRepositories(
30
+ req: AdminGetListRequest<BlockedRepository>,
31
+ ): Promise<AdminGetListResult<BlockedRepository>>;
32
+
33
+ adminGetTeamMembers(teamId: string): Promise<TeamMemberInfo[]>;
34
+ adminGetTeams(req: AdminGetListRequest<Team>): Promise<AdminGetListResult<Team>>;
35
+ adminGetTeamById(id: string): Promise<Team | undefined>;
36
+ adminSetTeamMemberRole(teamId: string, userId: string, role: TeamMemberRole): Promise<void>;
37
+
19
38
  adminGetWorkspaces(req: AdminGetWorkspacesRequest): Promise<AdminGetListResult<WorkspaceAndInstance>>;
20
39
  adminGetWorkspace(id: string): Promise<WorkspaceAndInstance>;
21
40
  adminForceStopWorkspace(id: string): Promise<void>;
41
+ adminRestoreSoftDeletedWorkspace(id: string): Promise<void>;
42
+
43
+ adminGetProjectsBySearchTerm(req: AdminGetListRequest<Project>): Promise<AdminGetListResult<Project>>;
44
+ adminGetProjectById(id: string): Promise<Project | undefined>;
22
45
 
46
+ adminFindPrebuilds(params: FindPrebuildsParams): Promise<PrebuildWithStatus[]>;
23
47
  adminSetLicense(key: string): Promise<void>;
48
+
49
+ adminGetAccountStatement(userId: string): Promise<AccountStatement>;
50
+ adminSetProfessionalOpenSource(userId: string, shouldGetProfOSS: boolean): Promise<void>;
51
+ adminIsStudent(userId: string): Promise<boolean>;
52
+ adminAddStudentEmailDomain(userId: string, domain: string): Promise<void>;
53
+ adminGrantExtraHours(userId: string, extraHours: number): Promise<void>;
54
+ adminGetBillingMode(attributionId: string): Promise<BillingMode>;
55
+
56
+ adminGetSettings(): Promise<InstallationAdminSettings>;
57
+ adminUpdateSettings(settings: InstallationAdminSettings): Promise<void>;
58
+
59
+ adminGetCostCenter(attributionId: string): Promise<CostCenterJSON | undefined>;
60
+ adminSetUsageLimit(attributionId: string, usageLimit: number): Promise<void>;
61
+
62
+ adminListUsage(req: ListUsageRequest): Promise<ListUsageResponse>;
63
+ adminAddUsageCreditNote(attributionId: string, credits: number, note: string): Promise<void>;
64
+ adminGetUsageBalance(attributionId: string): Promise<number>;
65
+
66
+ // Admin Settings
67
+ adminGetSettings(): Promise<InstallationAdminSettings>;
68
+ adminUpdateSettings(settings: InstallationAdminSettings): Promise<void>;
69
+ adminGetTelemetryData(): Promise<TelemetryData>;
24
70
  }
25
71
 
26
72
  export interface AdminGetListRequest<T> {
27
- offset: number
28
- limit: number
29
- orderBy: keyof T
30
- orderDir: "asc" | "desc"
73
+ offset: number;
74
+ limit: number;
75
+ orderBy: keyof T;
76
+ orderDir: "asc" | "desc";
31
77
  searchTerm?: string;
32
78
  }
33
79
 
34
80
  export interface AdminGetListResult<T> {
35
- total: number
36
- rows: T[]
81
+ total: number;
82
+ rows: T[];
37
83
  }
38
84
 
39
85
  export interface AdminBlockUserRequest {
40
- id: string
41
- blocked: boolean
86
+ id: string;
87
+ blocked: boolean;
42
88
  }
43
89
 
44
90
  export interface AdminModifyRoleOrPermissionRequest {
45
91
  id: string;
46
92
  rpp: {
47
- r: RoleOrPermission
48
- add: boolean
49
- }[]
93
+ r: RoleOrPermission;
94
+ add: boolean;
95
+ }[];
50
96
  }
51
97
 
52
98
  export interface AdminModifyPermanentWorkspaceFeatureFlagRequest {
53
99
  id: string;
54
100
  changes: {
55
- featureFlag: NamedWorkspaceFeatureFlag
56
- add: boolean
57
- }[]
101
+ featureFlag: NamedWorkspaceFeatureFlag;
102
+ add: boolean;
103
+ }[];
58
104
  }
59
105
 
60
- export interface WorkspaceAndInstance extends Without<Workspace, "id"|"creationTime">, Without<WorkspaceInstance, "id"|"creationTime"> {
106
+ export interface WorkspaceAndInstance
107
+ extends Omit<Workspace, "id" | "creationTime">,
108
+ Omit<WorkspaceInstance, "id" | "creationTime"> {
61
109
  workspaceId: string;
62
110
  workspaceCreationTime: string;
63
111
  instanceId: string;
@@ -65,6 +113,33 @@ export interface WorkspaceAndInstance extends Without<Workspace, "id"|"creationT
65
113
  phase: WorkspaceInstancePhase;
66
114
  }
67
115
 
68
- export interface AdminGetWorkspacesRequest extends AdminGetListRequest<WorkspaceAndInstance> {
69
- ownerId?: string
70
- }
116
+ export namespace WorkspaceAndInstance {
117
+ export function toWorkspace(wai: WorkspaceAndInstance): Workspace {
118
+ return {
119
+ id: wai.workspaceId,
120
+ creationTime: wai.workspaceCreationTime,
121
+ ...wai,
122
+ };
123
+ }
124
+
125
+ export function toInstance(wai: WorkspaceAndInstance): WorkspaceInstance | undefined {
126
+ if (!wai.instanceId) {
127
+ return undefined;
128
+ }
129
+ return {
130
+ id: wai.instanceId,
131
+ creationTime: wai.instanceCreationTime,
132
+ ...wai,
133
+ };
134
+ }
135
+ }
136
+
137
+ export type AdminGetWorkspacesRequest = AdminGetListRequest<WorkspaceAndInstance> & AdminGetWorkspacesQuery;
138
+ /** The fields are meant to be used either OR (not combined) */
139
+ export type AdminGetWorkspacesQuery = {
140
+ /** we use this field in case we have a UUIDv4 and don't know whether it's an (old) workspace or instance id */
141
+ instanceIdOrWorkspaceId?: string;
142
+ instanceId?: string;
143
+ workspaceId?: string;
144
+ ownerId?: string;
145
+ };
@@ -0,0 +1,52 @@
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 const IAnalyticsWriter = Symbol("IAnalyticsWriter");
8
+
9
+ type Identity =
10
+ | { userId: string | number; anonymousId?: string | number }
11
+ | { userId?: string | number; anonymousId: string | number };
12
+
13
+ interface Message {
14
+ messageId?: string;
15
+ }
16
+
17
+ export type IdentifyMessage = Message &
18
+ Identity & {
19
+ traits?: any;
20
+ timestamp?: Date;
21
+ context?: any;
22
+ };
23
+
24
+ export type TrackMessage = Message &
25
+ Identity & {
26
+ event: string;
27
+ properties?: any;
28
+ timestamp?: Date;
29
+ context?: any;
30
+ };
31
+
32
+ export type PageMessage = Message &
33
+ Identity & {
34
+ properties?: any;
35
+ timestamp?: Date;
36
+ context?: any;
37
+ };
38
+
39
+ export type RemoteTrackMessage = Omit<TrackMessage, "timestamp" | "userId">;
40
+ export type RemotePageMessage = Omit<PageMessage, "timestamp" | "userId"> & {
41
+ includePII?: boolean;
42
+ };
43
+
44
+ export type RemoteIdentifyMessage = Omit<IdentifyMessage, "timestamp" | "userId">;
45
+
46
+ export interface IAnalyticsWriter {
47
+ identify(msg: IdentifyMessage): void;
48
+
49
+ track(msg: TrackMessage): void;
50
+
51
+ page(msg: PageMessage): void;
52
+ }
@@ -0,0 +1,63 @@
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 create(userOrTeam: User | Team): AttributionId {
26
+ if (User.is(userOrTeam)) {
27
+ return { kind: "user", userId: userOrTeam.id };
28
+ } else {
29
+ return { kind: "team", teamId: userOrTeam.id };
30
+ }
31
+ }
32
+
33
+ export function parse(s: string): UserAttributionId | TeamAttributionId | undefined {
34
+ if (!s) {
35
+ return undefined;
36
+ }
37
+ const parts = s.split(":");
38
+ if (parts.length !== 2) {
39
+ return undefined;
40
+ }
41
+ switch (parts[0]) {
42
+ case "user":
43
+ return { kind: "user", userId: parts[1] };
44
+ case "team":
45
+ return { kind: "team", teamId: parts[1] };
46
+ default:
47
+ return undefined;
48
+ }
49
+ }
50
+
51
+ export function render(id: AttributionId): string {
52
+ switch (id.kind) {
53
+ case "user":
54
+ return `user${SEPARATOR}${id.userId}`;
55
+ case "team":
56
+ return `team${SEPARATOR}${id.teamId}`;
57
+ }
58
+ }
59
+
60
+ export function equals(a: AttributionId, b: AttributionId): boolean {
61
+ return render(a) === render(b);
62
+ }
63
+ }
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
+ }