@gitpod/gitpod-protocol 0.1.5-to-code-reading.1 → 0.1.5-to-monitor-delete.18

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 (361) hide show
  1. package/data/gitpod-schema.json +124 -5
  2. package/lib/accounting-protocol.d.ts +18 -10
  3. package/lib/accounting-protocol.d.ts.map +1 -1
  4. package/lib/accounting-protocol.js +34 -32
  5. package/lib/accounting-protocol.js.map +1 -1
  6. package/lib/admin-protocol.d.ts +19 -0
  7. package/lib/admin-protocol.d.ts.map +1 -1
  8. package/lib/admin-protocol.js.map +1 -1
  9. package/lib/analytics.d.ts +4 -5
  10. package/lib/analytics.d.ts.map +1 -1
  11. package/lib/analytics.js.map +1 -1
  12. package/lib/attribution.d.ts +24 -0
  13. package/lib/attribution.d.ts.map +1 -0
  14. package/lib/attribution.js +54 -0
  15. package/lib/attribution.js.map +1 -0
  16. package/lib/auth.d.ts.map +1 -1
  17. package/lib/billing-mode.d.ts +45 -0
  18. package/lib/billing-mode.d.ts.map +1 -0
  19. package/lib/billing-mode.js +44 -0
  20. package/lib/billing-mode.js.map +1 -0
  21. package/lib/blocked-repositories-protocol.d.ts +13 -0
  22. package/lib/blocked-repositories-protocol.d.ts.map +1 -0
  23. package/lib/blocked-repositories-protocol.js +8 -0
  24. package/lib/blocked-repositories-protocol.js.map +1 -0
  25. package/lib/context-url.d.ts +18 -5
  26. package/lib/context-url.d.ts.map +1 -1
  27. package/lib/context-url.js +59 -6
  28. package/lib/context-url.js.map +1 -1
  29. package/lib/context-url.spec.d.ts +2 -0
  30. package/lib/context-url.spec.d.ts.map +1 -1
  31. package/lib/context-url.spec.js +40 -4
  32. package/lib/context-url.spec.js.map +1 -1
  33. package/lib/encryption/container-module.d.ts.map +1 -1
  34. package/lib/encryption/container-module.js +1 -1
  35. package/lib/encryption/container-module.js.map +1 -1
  36. package/lib/encryption/encryption-engine.d.ts.map +1 -1
  37. package/lib/encryption/encryption-engine.js +9 -9
  38. package/lib/encryption/encryption-engine.js.map +1 -1
  39. package/lib/encryption/encryption-engine.spec.d.ts.map +1 -1
  40. package/lib/encryption/encryption-engine.spec.js +2 -3
  41. package/lib/encryption/encryption-engine.spec.js.map +1 -1
  42. package/lib/encryption/encryption-service.d.ts.map +1 -1
  43. package/lib/encryption/encryption-service.js +1 -1
  44. package/lib/encryption/encryption-service.js.map +1 -1
  45. package/lib/encryption/key-provider.d.ts.map +1 -1
  46. package/lib/encryption/key-provider.js +7 -9
  47. package/lib/encryption/key-provider.js.map +1 -1
  48. package/lib/env.d.ts +0 -5
  49. package/lib/env.d.ts.map +1 -1
  50. package/lib/env.js +1 -20
  51. package/lib/env.js.map +1 -1
  52. package/lib/experiments/always-default.d.ts +8 -0
  53. package/lib/experiments/always-default.d.ts.map +1 -0
  54. package/lib/experiments/always-default.js +20 -0
  55. package/lib/experiments/always-default.js.map +1 -0
  56. package/lib/experiments/configcat-server.d.ts +10 -0
  57. package/lib/experiments/configcat-server.d.ts.map +1 -0
  58. package/lib/experiments/configcat-server.js +36 -0
  59. package/lib/experiments/configcat-server.js.map +1 -0
  60. package/lib/experiments/configcat.d.ts +21 -0
  61. package/lib/experiments/configcat.d.ts.map +1 -0
  62. package/lib/experiments/configcat.js +51 -0
  63. package/lib/experiments/configcat.js.map +1 -0
  64. package/lib/experiments/types.d.ts +22 -0
  65. package/lib/experiments/types.d.ts.map +1 -0
  66. package/lib/experiments/types.js +10 -0
  67. package/lib/experiments/types.js.map +1 -0
  68. package/lib/gitpod-file-parser.d.ts.map +1 -1
  69. package/lib/gitpod-file-parser.js +6 -6
  70. package/lib/gitpod-file-parser.js.map +1 -1
  71. package/lib/gitpod-file-parser.spec.js +42 -39
  72. package/lib/gitpod-file-parser.spec.js.map +1 -1
  73. package/lib/gitpod-service.d.ts +83 -45
  74. package/lib/gitpod-service.d.ts.map +1 -1
  75. package/lib/gitpod-service.js +52 -33
  76. package/lib/gitpod-service.js.map +1 -1
  77. package/lib/headless-workspace-log.d.ts +1 -0
  78. package/lib/headless-workspace-log.d.ts.map +1 -1
  79. package/lib/headless-workspace-log.js +2 -1
  80. package/lib/headless-workspace-log.js.map +1 -1
  81. package/lib/ide-frontend-service.d.ts +1 -1
  82. package/lib/ide-protocol.d.ts +38 -6
  83. package/lib/ide-protocol.d.ts.map +1 -1
  84. package/lib/index.d.ts +16 -15
  85. package/lib/index.d.ts.map +1 -1
  86. package/lib/index.js +2 -1
  87. package/lib/index.js.map +1 -1
  88. package/lib/installation-admin-protocol.d.ts +30 -0
  89. package/lib/installation-admin-protocol.d.ts.map +1 -0
  90. package/lib/installation-admin-protocol.js +31 -0
  91. package/lib/installation-admin-protocol.js.map +1 -0
  92. package/lib/license-protocol.d.ts +7 -0
  93. package/lib/license-protocol.d.ts.map +1 -1
  94. package/lib/license-protocol.js.map +1 -1
  95. package/lib/messaging/browser/connection.d.ts +1 -1
  96. package/lib/messaging/browser/connection.d.ts.map +1 -1
  97. package/lib/messaging/browser/connection.js +19 -19
  98. package/lib/messaging/browser/connection.js.map +1 -1
  99. package/lib/messaging/browser/window-connection.d.ts +4 -4
  100. package/lib/messaging/browser/window-connection.d.ts.map +1 -1
  101. package/lib/messaging/browser/window-connection.js +9 -6
  102. package/lib/messaging/browser/window-connection.js.map +1 -1
  103. package/lib/messaging/client-call-metrics.d.ts +2 -18
  104. package/lib/messaging/client-call-metrics.d.ts.map +1 -1
  105. package/lib/messaging/client-call-metrics.js +21 -22
  106. package/lib/messaging/client-call-metrics.js.map +1 -1
  107. package/lib/messaging/error.d.ts +8 -1
  108. package/lib/messaging/error.d.ts.map +1 -1
  109. package/lib/messaging/error.js +17 -3
  110. package/lib/messaging/error.js.map +1 -1
  111. package/lib/messaging/handler.d.ts.map +1 -1
  112. package/lib/messaging/handler.js +1 -1
  113. package/lib/messaging/node/connection.js +8 -8
  114. package/lib/messaging/node/connection.js.map +1 -1
  115. package/lib/messaging/proxy-factory.d.ts +1 -1
  116. package/lib/messaging/proxy-factory.d.ts.map +1 -1
  117. package/lib/messaging/proxy-factory.js +7 -9
  118. package/lib/messaging/proxy-factory.js.map +1 -1
  119. package/lib/payment-protocol.d.ts.map +1 -1
  120. package/lib/payment-protocol.js +1 -1
  121. package/lib/payment-protocol.js.map +1 -1
  122. package/lib/permission.d.ts +9 -3
  123. package/lib/permission.d.ts.map +1 -1
  124. package/lib/permission.js +34 -25
  125. package/lib/permission.js.map +1 -1
  126. package/lib/plans.d.ts +4 -3
  127. package/lib/plans.d.ts.map +1 -1
  128. package/lib/plans.js +210 -171
  129. package/lib/plans.js.map +1 -1
  130. package/lib/protocol.d.ts +192 -59
  131. package/lib/protocol.d.ts.map +1 -1
  132. package/lib/protocol.js +292 -104
  133. package/lib/protocol.js.map +1 -1
  134. package/{src/theia-plugins.ts → lib/protocol.spec.d.ts} +2 -6
  135. package/lib/protocol.spec.d.ts.map +1 -0
  136. package/lib/protocol.spec.js +127 -0
  137. package/lib/protocol.spec.js.map +1 -0
  138. package/lib/snapshot-url.spec.js.map +1 -1
  139. package/lib/team-subscription-protocol.d.ts +22 -3
  140. package/lib/team-subscription-protocol.d.ts.map +1 -1
  141. package/lib/team-subscription-protocol.js +20 -5
  142. package/lib/team-subscription-protocol.js.map +1 -1
  143. package/lib/teams-projects-protocol.d.ts +29 -5
  144. package/lib/teams-projects-protocol.d.ts.map +1 -1
  145. package/lib/teams-projects-protocol.js +8 -1
  146. package/lib/teams-projects-protocol.js.map +1 -1
  147. package/lib/typings/globals.d.ts +2 -2
  148. package/lib/typings/globals.d.ts.map +1 -1
  149. package/lib/usage.d.ts +61 -0
  150. package/lib/usage.d.ts.map +1 -0
  151. package/lib/usage.js +14 -0
  152. package/lib/usage.js.map +1 -0
  153. package/lib/util/analytics.d.ts.map +1 -1
  154. package/lib/util/analytics.js +12 -3
  155. package/lib/util/analytics.js.map +1 -1
  156. package/lib/util/async-iterator.d.ts.map +1 -1
  157. package/lib/util/async-iterator.js +3 -3
  158. package/lib/util/async-iterator.js.map +1 -1
  159. package/lib/util/cancelable.js.map +1 -1
  160. package/lib/util/date-time.js +6 -6
  161. package/lib/util/date-time.js.map +1 -1
  162. package/lib/util/debug-app.d.ts +25 -0
  163. package/lib/util/debug-app.d.ts.map +1 -0
  164. package/lib/util/debug-app.js +100 -0
  165. package/lib/util/debug-app.js.map +1 -0
  166. package/lib/util/deferred.js.map +1 -1
  167. package/lib/util/disposable.d.ts.map +1 -1
  168. package/lib/util/disposable.js +2 -2
  169. package/lib/util/disposable.js.map +1 -1
  170. package/lib/util/event.d.ts.map +1 -1
  171. package/lib/util/event.js +5 -3
  172. package/lib/util/event.js.map +1 -1
  173. package/lib/util/garbage-collected-cache.d.ts.map +1 -1
  174. package/lib/util/garbage-collected-cache.js +6 -1
  175. package/lib/util/garbage-collected-cache.js.map +1 -1
  176. package/lib/util/generate-workspace-id.d.ts +5 -0
  177. package/lib/util/generate-workspace-id.d.ts.map +1 -1
  178. package/lib/util/generate-workspace-id.js +446 -442
  179. package/lib/util/generate-workspace-id.js.map +1 -1
  180. package/lib/util/generate-workspace-id.spec.js +18 -7
  181. package/lib/util/generate-workspace-id.spec.js.map +1 -1
  182. package/lib/util/gitpod-cookie.d.ts +1 -1
  183. package/lib/util/gitpod-cookie.d.ts.map +1 -1
  184. package/lib/util/gitpod-cookie.js +0 -3
  185. package/lib/util/gitpod-cookie.js.map +1 -1
  186. package/lib/util/gitpod-host-url.d.ts +3 -0
  187. package/lib/util/gitpod-host-url.d.ts.map +1 -1
  188. package/lib/util/gitpod-host-url.js +49 -29
  189. package/lib/util/gitpod-host-url.js.map +1 -1
  190. package/lib/util/gitpod-host-url.spec.d.ts.map +1 -1
  191. package/lib/util/gitpod-host-url.spec.js +15 -5
  192. package/lib/util/gitpod-host-url.spec.js.map +1 -1
  193. package/lib/util/grpc.d.ts +19 -0
  194. package/lib/util/grpc.d.ts.map +1 -1
  195. package/lib/util/grpc.js +73 -1
  196. package/lib/util/grpc.js.map +1 -1
  197. package/lib/util/jaeger-client-types.d.ts.map +1 -1
  198. package/lib/util/logging.d.ts +1 -1
  199. package/lib/util/logging.d.ts.map +1 -1
  200. package/lib/util/logging.js +31 -25
  201. package/lib/util/logging.js.map +1 -1
  202. package/lib/util/logging.spec.d.ts +7 -0
  203. package/lib/util/logging.spec.d.ts.map +1 -0
  204. package/lib/util/logging.spec.js +52 -0
  205. package/lib/util/logging.spec.js.map +1 -0
  206. package/lib/util/make-link.js +5 -5
  207. package/lib/util/make-link.js.map +1 -1
  208. package/lib/util/nice-grpc.d.ts +9 -0
  209. package/lib/util/nice-grpc.d.ts.map +1 -0
  210. package/lib/util/nice-grpc.js +119 -0
  211. package/lib/util/nice-grpc.js.map +1 -0
  212. package/lib/util/parse-workspace-id.d.ts.map +1 -1
  213. package/lib/util/parse-workspace-id.js +1 -2
  214. package/lib/util/parse-workspace-id.js.map +1 -1
  215. package/lib/util/parse-workspace-id.spec.d.ts.map +1 -1
  216. package/lib/util/parse-workspace-id.spec.js.map +1 -1
  217. package/lib/util/queue.spec.js +9 -6
  218. package/lib/util/queue.spec.js.map +1 -1
  219. package/lib/util/semaphore.d.ts.map +1 -1
  220. package/lib/util/semaphore.js.map +1 -1
  221. package/lib/util/skip-if.d.ts.map +1 -1
  222. package/lib/util/skip-if.js.map +1 -1
  223. package/lib/util/timeutil.d.ts +2 -0
  224. package/lib/util/timeutil.d.ts.map +1 -1
  225. package/lib/util/timeutil.js +15 -3
  226. package/lib/util/timeutil.js.map +1 -1
  227. package/lib/util/timeutil.spec.d.ts +2 -0
  228. package/lib/util/timeutil.spec.d.ts.map +1 -1
  229. package/lib/util/timeutil.spec.js +34 -0
  230. package/lib/util/timeutil.spec.js.map +1 -1
  231. package/lib/util/tracing.d.ts +8 -8
  232. package/lib/util/tracing.d.ts.map +1 -1
  233. package/lib/util/tracing.js +19 -20
  234. package/lib/util/tracing.js.map +1 -1
  235. package/lib/util/tracing.spec.js +3 -3
  236. package/lib/util/tracing.spec.js.map +1 -1
  237. package/lib/util/workspace-port-authentication.d.ts +7 -7
  238. package/lib/util/workspace-port-authentication.d.ts.map +1 -1
  239. package/lib/util/workspace-port-authentication.js +8 -11
  240. package/lib/util/workspace-port-authentication.js.map +1 -1
  241. package/lib/webhook-event.d.ts +44 -0
  242. package/lib/webhook-event.d.ts.map +1 -0
  243. package/lib/{theia-plugins.js → webhook-event.js} +2 -2
  244. package/lib/webhook-event.js.map +1 -0
  245. package/lib/workspace-class.d.ts +14 -0
  246. package/lib/workspace-class.d.ts.map +1 -0
  247. package/lib/workspace-class.js +8 -0
  248. package/lib/workspace-class.js.map +1 -0
  249. package/lib/workspace-cluster.d.ts +18 -17
  250. package/lib/workspace-cluster.d.ts.map +1 -1
  251. package/lib/workspace-cluster.js +16 -1
  252. package/lib/workspace-cluster.js.map +1 -1
  253. package/lib/workspace-instance.d.ts +39 -3
  254. package/lib/workspace-instance.d.ts.map +1 -1
  255. package/lib/wsready.d.ts +1 -1
  256. package/lib/wsready.d.ts.map +1 -1
  257. package/lib/wsready.js +2 -2
  258. package/package.json +15 -7
  259. package/pkg-yarn.lock +11 -6
  260. package/provenance-bundle.jsonl +3 -1
  261. package/src/accounting-protocol.ts +66 -51
  262. package/src/admin-protocol.ts +45 -18
  263. package/src/analytics.ts +26 -28
  264. package/src/attribution.ts +63 -0
  265. package/src/auth.ts +2 -2
  266. package/src/billing-mode.ts +84 -0
  267. package/src/blocked-repositories-protocol.ts +13 -0
  268. package/src/context-url.spec.ts +37 -9
  269. package/src/context-url.ts +94 -36
  270. package/src/encryption/container-module.ts +2 -3
  271. package/src/encryption/encryption-engine.spec.ts +9 -8
  272. package/src/encryption/encryption-engine.ts +20 -16
  273. package/src/encryption/encryption-service.ts +4 -5
  274. package/src/encryption/key-provider.ts +16 -19
  275. package/src/env.ts +0 -22
  276. package/src/experiments/always-default.ts +24 -0
  277. package/src/experiments/configcat-server.ts +41 -0
  278. package/src/experiments/configcat.ts +56 -0
  279. package/src/experiments/types.ts +34 -0
  280. package/src/gitpod-file-parser.spec.ts +55 -61
  281. package/src/gitpod-file-parser.ts +16 -17
  282. package/src/gitpod-service.ts +228 -129
  283. package/src/headless-workspace-log.ts +6 -4
  284. package/src/ide-frontend-service.ts +2 -2
  285. package/src/ide-protocol.ts +43 -6
  286. package/src/index.ts +16 -15
  287. package/src/installation-admin-protocol.ts +45 -0
  288. package/src/license-protocol.ts +12 -6
  289. package/src/messaging/browser/connection.ts +45 -47
  290. package/src/messaging/browser/window-connection.ts +39 -29
  291. package/src/messaging/client-call-metrics.ts +62 -82
  292. package/src/messaging/error.ts +26 -7
  293. package/src/messaging/handler.ts +6 -6
  294. package/src/messaging/node/connection.ts +8 -8
  295. package/src/messaging/proxy-factory.ts +23 -30
  296. package/src/oss-allowlist.ts +3 -3
  297. package/src/payment-protocol.ts +2 -2
  298. package/src/permission.ts +40 -32
  299. package/src/plans.ts +240 -189
  300. package/src/protocol.spec.ts +97 -0
  301. package/src/protocol.ts +556 -258
  302. package/src/snapshot-url.spec.ts +9 -7
  303. package/src/team-subscription-protocol.ts +59 -22
  304. package/src/teams-projects-protocol.ts +43 -12
  305. package/src/typings/globals.ts +4 -4
  306. package/src/usage.ts +71 -0
  307. package/src/util/analytics.ts +46 -24
  308. package/src/util/async-iterator.ts +4 -5
  309. package/src/util/cancelable.ts +3 -3
  310. package/src/util/date-time.ts +8 -8
  311. package/src/util/debug-app.ts +81 -0
  312. package/src/util/deferred.ts +6 -6
  313. package/src/util/disposable.ts +3 -6
  314. package/src/util/event.ts +9 -11
  315. package/src/util/garbage-collected-cache.ts +8 -6
  316. package/src/util/generate-workspace-id.spec.ts +26 -16
  317. package/src/util/generate-workspace-id.ts +460 -454
  318. package/src/util/gitpod-cookie.ts +8 -9
  319. package/src/util/gitpod-host-url.spec.ts +40 -13
  320. package/src/util/gitpod-host-url.ts +57 -33
  321. package/src/util/grpc.ts +90 -1
  322. package/src/util/jaeger-client-types.ts +2 -2
  323. package/src/util/logging.spec.ts +23 -0
  324. package/src/util/logging.ts +60 -42
  325. package/src/util/make-link.ts +6 -7
  326. package/src/util/nice-grpc.ts +93 -0
  327. package/src/util/parse-workspace-id.spec.ts +17 -8
  328. package/src/util/parse-workspace-id.ts +5 -6
  329. package/src/util/queue.spec.ts +27 -25
  330. package/src/util/repeat.ts +1 -1
  331. package/src/util/semaphore.ts +4 -6
  332. package/src/util/skip-if.ts +9 -6
  333. package/src/util/timeutil.spec.ts +40 -14
  334. package/src/util/timeutil.ts +27 -11
  335. package/src/util/tracing.spec.ts +28 -23
  336. package/src/util/tracing.ts +58 -54
  337. package/src/util/workspace-port-authentication.ts +10 -13
  338. package/src/webhook-event.ts +55 -0
  339. package/src/workspace-class.ts +14 -0
  340. package/src/workspace-cluster.ts +34 -20
  341. package/src/workspace-instance.ts +76 -20
  342. package/src/wsready.ts +3 -3
  343. package/data/builtin-theia-plugins.json +0 -372
  344. package/lib/email-protocol.d.ts +0 -49
  345. package/lib/email-protocol.d.ts.map +0 -1
  346. package/lib/email-protocol.js +0 -28
  347. package/lib/email-protocol.js.map +0 -1
  348. package/lib/messaging/connection-error-handler.d.ts +0 -27
  349. package/lib/messaging/connection-error-handler.d.ts.map +0 -1
  350. package/lib/messaging/connection-error-handler.js +0 -34
  351. package/lib/messaging/connection-error-handler.js.map +0 -1
  352. package/lib/theia-plugins.d.ts +0 -11
  353. package/lib/theia-plugins.d.ts.map +0 -1
  354. package/lib/theia-plugins.js.map +0 -1
  355. package/lib/util/safe-promise.d.ts +0 -11
  356. package/lib/util/safe-promise.d.ts.map +0 -1
  357. package/lib/util/safe-promise.js +0 -31
  358. package/lib/util/safe-promise.js.map +0 -1
  359. package/src/email-protocol.ts +0 -66
  360. package/src/messaging/connection-error-handler.ts +0 -62
  361. package/src/util/safe-promise.ts +0 -26
@@ -4,9 +4,9 @@
4
4
  * See License-AGPL.txt in the project root for license information.
5
5
  */
6
6
 
7
- import { v4 as uuidv4 } from 'uuid';
8
- import { User } from './protocol';
9
- import { oneMonthLater } from './util/timeutil';
7
+ import { v4 as uuidv4 } from "uuid";
8
+ import { User } from "./protocol";
9
+ import { oneMonthLater } from "./util/timeutil";
10
10
 
11
11
  /*
12
12
  * Subscription and acocunting data
@@ -33,7 +33,7 @@ export interface AccountEntry {
33
33
  /**
34
34
  * credit: end of validity
35
35
  */
36
- expiryDate?: string; // exclusive
36
+ expiryDate?: string; // exclusive
37
37
 
38
38
  kind: AccountEntryKind;
39
39
 
@@ -46,26 +46,26 @@ export interface AccountEntry {
46
46
  description?: object;
47
47
  }
48
48
  export namespace AccountEntry {
49
- export function create<T extends AccountEntry>(entry: Omit<T, 'uid'>): T {
49
+ export function create<T extends AccountEntry>(entry: Omit<T, "uid">): T {
50
50
  const result = entry as T;
51
51
  result.uid = uuidv4();
52
52
  return result;
53
- };
53
+ }
54
54
  }
55
55
 
56
- export type DebitAccountEntryKind = 'session' | 'expiry' | 'loss';
57
- export type AccountEntryKind = 'credit' | DebitAccountEntryKind | 'carry' | 'open';
56
+ export type DebitAccountEntryKind = "session" | "expiry" | "loss";
57
+ export type AccountEntryKind = "credit" | DebitAccountEntryKind | "carry" | "open";
58
58
 
59
59
  export interface Credit extends AccountEntry {
60
- kind: 'credit';
60
+ kind: "credit";
61
61
  expiryDate: string;
62
62
  }
63
63
  export type Debit = LossDebit | ExpiryDebit | SessionDebit;
64
64
  export interface LossDebit extends AccountEntry {
65
- kind: 'loss';
65
+ kind: "loss";
66
66
  }
67
67
  export interface ExpiryDebit extends AccountEntry {
68
- kind: 'expiry';
68
+ kind: "expiry";
69
69
  creditId: undefined;
70
70
  }
71
71
  export interface SessionDebit extends AccountEntry {
@@ -80,9 +80,7 @@ export interface CreditDescription {
80
80
  }
81
81
  export namespace CreditDescription {
82
82
  export function is(obj: any): obj is CreditDescription {
83
- return !!obj
84
- && obj.hasOwnProperty('subscriptionId')
85
- && obj.hasOwnProperty('planId');
83
+ return !!obj && obj.hasOwnProperty("subscriptionId") && obj.hasOwnProperty("planId");
86
84
  }
87
85
  }
88
86
  export interface SessionDescription {
@@ -93,11 +91,13 @@ export interface SessionDescription {
93
91
  }
94
92
  export namespace SessionDescription {
95
93
  export function is(obj: any): obj is SessionDescription {
96
- return !!obj
97
- && obj.hasOwnProperty('contextTitle')
98
- && obj.hasOwnProperty('contextUrl')
99
- && obj.hasOwnProperty('workspaceId')
100
- && obj.hasOwnProperty('workspaceInstanceId')
94
+ return (
95
+ !!obj &&
96
+ obj.hasOwnProperty("contextTitle") &&
97
+ obj.hasOwnProperty("contextUrl") &&
98
+ obj.hasOwnProperty("workspaceId") &&
99
+ obj.hasOwnProperty("workspaceInstanceId")
100
+ );
101
101
  }
102
102
  }
103
103
 
@@ -111,11 +111,11 @@ export namespace SessionDescription {
111
111
  export interface Subscription {
112
112
  uid: string;
113
113
  userId: string;
114
- startDate: string; // inclusive
114
+ startDate: string; // inclusive
115
115
  /** When the subscription will end (must be >= cancellationDate!) */
116
- endDate?: string; // exclusive
116
+ endDate?: string; // exclusive
117
117
  /** When the subscription was cancelled */
118
- cancellationDate?: string; // exclusive
118
+ cancellationDate?: string; // exclusive
119
119
  /** Number of granted hours */
120
120
  amount: number;
121
121
  /** Number of granted hours for the first month: If this is set, use this value for the first month */
@@ -124,6 +124,7 @@ export interface Subscription {
124
124
  paymentReference?: string;
125
125
  paymentData?: PaymentData;
126
126
  teamSubscriptionSlotId?: string;
127
+ teamMembershipId?: string;
127
128
  /** marks the subscription as deleted */
128
129
  deleted?: boolean;
129
130
  }
@@ -145,8 +146,7 @@ export interface UserPaidSubscription extends Subscription {
145
146
  }
146
147
  export namespace UserPaidSubscription {
147
148
  export function is(data: any): data is UserPaidSubscription {
148
- return !!data
149
- && data.hasOwnProperty('paymentReference');
149
+ return !!data && data.hasOwnProperty("paymentReference");
150
150
  }
151
151
  }
152
152
 
@@ -155,41 +155,56 @@ export interface AssignedTeamSubscription extends Subscription {
155
155
  }
156
156
  export namespace AssignedTeamSubscription {
157
157
  export function is(data: any): data is AssignedTeamSubscription {
158
- return !!data
159
- && data.hasOwnProperty('teamSubscriptionSlotId');
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");
160
168
  }
161
169
  }
162
170
 
163
171
  export namespace Subscription {
164
- export function create(newSubscription: Omit<Subscription, 'uid'>) {
172
+ export function create(newSubscription: Omit<Subscription, "uid">) {
165
173
  const subscription = newSubscription as Subscription;
166
174
  subscription.uid = uuidv4();
167
175
  return subscription;
168
- };
176
+ }
169
177
  export function cancelSubscription(s: Subscription, cancellationDate: string, endDate?: string) {
170
178
  s.endDate = endDate || cancellationDate;
171
179
  s.cancellationDate = cancellationDate;
172
- };
180
+ }
173
181
  export function isSame(s1: Subscription | undefined, s2: Subscription | undefined): boolean {
174
- return !!s1 && !!s2
175
- && s1.userId === s2.userId
176
- && s1.planId === s2.planId
177
- && s1.startDate === s2.startDate
178
- && s1.endDate === s2.endDate
179
- && s1.amount === s2.amount
180
- && s1.cancellationDate === s2.cancellationDate
181
- && s1.deleted === s2.deleted
182
- && ((s1.paymentData === undefined && s2.paymentData === undefined)
183
- || (!!s1.paymentData && !!s2.paymentData
184
- && s1.paymentData.downgradeDate === s2.paymentData.downgradeDate
185
- && s1.paymentData.newPlan === s2.paymentData.newPlan));
186
- };
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
+ }
187
199
  export function isActive(s: Subscription, date: string): boolean {
188
200
  return s.startDate <= date && (s.endDate === undefined || date < s.endDate);
189
- };
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
+ }
190
205
  export function isDowngraded(s: Subscription) {
191
206
  return s.paymentData && s.paymentData.downgradeDate;
192
- };
207
+ }
193
208
  export function calculateCurrentPeriod(startDate: string, now: Date) {
194
209
  let nextStartDate = startDate;
195
210
  do {
@@ -197,19 +212,19 @@ export namespace Subscription {
197
212
  nextStartDate = oneMonthLater(startDate, new Date(startDate).getDate());
198
213
  } while (nextStartDate < now.toISOString());
199
214
  return { startDate, endDate: nextStartDate };
200
- };
215
+ }
201
216
  }
202
217
 
203
218
  export type MaybeSubscription = Subscription | undefined;
204
219
 
205
220
  export interface Period {
206
- startDate: string; // inclusive
207
- endDate: string; // exclusive
221
+ startDate: string; // inclusive
222
+ endDate: string; // exclusive
208
223
  }
209
224
 
210
225
  export type MaybePeriod = Period | undefined;
211
226
 
212
- export type AccountEntryFixedPeriod = Omit<AccountEntry, 'uid'> & { expiryDate: string };
227
+ export type AccountEntryFixedPeriod = Omit<AccountEntry, "uid"> & { expiryDate: string };
213
228
  export interface AccountStatement extends Period {
214
229
  userId: string;
215
230
  /**
@@ -221,9 +236,9 @@ export interface AccountStatement extends Period {
221
236
  /** Remaining valid hours (accumulated from credits) */
222
237
  remainingHours: RemainingHours;
223
238
  }
224
- export type RemainingHours = number | 'unlimited';
239
+ export type RemainingHours = number | "unlimited";
225
240
 
226
241
  export interface CreditAlert {
227
- userId: string,
228
- remainingUsageHours: number
242
+ userId: string;
243
+ remainingUsageHours: number;
229
244
  }
@@ -5,23 +5,44 @@
5
5
  */
6
6
 
7
7
  import { User, Workspace, NamedWorkspaceFeatureFlag } from "./protocol";
8
+ import { BlockedRepository } from "./blocked-repositories-protocol";
9
+ import { FindPrebuildsParams } from "./gitpod-service";
10
+ import { Project, Team, PrebuildWithStatus, TeamMemberInfo, TeamMemberRole } from "./teams-projects-protocol";
8
11
  import { WorkspaceInstance, WorkspaceInstancePhase } from "./workspace-instance";
9
12
  import { RoleOrPermission } from "./permission";
10
13
  import { AccountStatement } from "./accounting-protocol";
14
+ import { InstallationAdminSettings } from "./installation-admin-protocol";
15
+ import { BillingMode } from "./billing-mode";
11
16
 
12
17
  export interface AdminServer {
13
18
  adminGetUsers(req: AdminGetListRequest<User>): Promise<AdminGetListResult<User>>;
14
19
  adminGetUser(id: string): Promise<User>;
15
20
  adminBlockUser(req: AdminBlockUserRequest): Promise<User>;
16
21
  adminDeleteUser(id: string): Promise<void>;
22
+ adminVerifyUser(id: string): Promise<User>;
17
23
  adminModifyRoleOrPermission(req: AdminModifyRoleOrPermissionRequest): Promise<User>;
18
24
  adminModifyPermanentWorkspaceFeatureFlag(req: AdminModifyPermanentWorkspaceFeatureFlagRequest): Promise<User>;
19
25
 
26
+ adminCreateBlockedRepository(urlRegexp: string, blockUser: boolean): Promise<BlockedRepository>;
27
+ adminDeleteBlockedRepository(id: number): Promise<void>;
28
+ adminGetBlockedRepositories(
29
+ req: AdminGetListRequest<BlockedRepository>,
30
+ ): Promise<AdminGetListResult<BlockedRepository>>;
31
+
32
+ adminGetTeamMembers(teamId: string): Promise<TeamMemberInfo[]>;
33
+ adminGetTeams(req: AdminGetListRequest<Team>): Promise<AdminGetListResult<Team>>;
34
+ adminGetTeamById(id: string): Promise<Team | undefined>;
35
+ adminSetTeamMemberRole(teamId: string, userId: string, role: TeamMemberRole): Promise<void>;
36
+
20
37
  adminGetWorkspaces(req: AdminGetWorkspacesRequest): Promise<AdminGetListResult<WorkspaceAndInstance>>;
21
38
  adminGetWorkspace(id: string): Promise<WorkspaceAndInstance>;
22
39
  adminForceStopWorkspace(id: string): Promise<void>;
23
40
  adminRestoreSoftDeletedWorkspace(id: string): Promise<void>;
24
41
 
42
+ adminGetProjectsBySearchTerm(req: AdminGetListRequest<Project>): Promise<AdminGetListResult<Project>>;
43
+ adminGetProjectById(id: string): Promise<Project | undefined>;
44
+
45
+ adminFindPrebuilds(params: FindPrebuildsParams): Promise<PrebuildWithStatus[]>;
25
46
  adminSetLicense(key: string): Promise<void>;
26
47
 
27
48
  adminGetAccountStatement(userId: string): Promise<AccountStatement>;
@@ -29,43 +50,49 @@ export interface AdminServer {
29
50
  adminIsStudent(userId: string): Promise<boolean>;
30
51
  adminAddStudentEmailDomain(userId: string, domain: string): Promise<void>;
31
52
  adminGrantExtraHours(userId: string, extraHours: number): Promise<void>;
53
+ adminGetBillingMode(attributionId: string): Promise<BillingMode>;
54
+
55
+ adminGetSettings(): Promise<InstallationAdminSettings>;
56
+ adminUpdateSettings(settings: InstallationAdminSettings): Promise<void>;
32
57
  }
33
58
 
34
59
  export interface AdminGetListRequest<T> {
35
- offset: number
36
- limit: number
37
- orderBy: keyof T
38
- orderDir: "asc" | "desc"
60
+ offset: number;
61
+ limit: number;
62
+ orderBy: keyof T;
63
+ orderDir: "asc" | "desc";
39
64
  searchTerm?: string;
40
65
  }
41
66
 
42
67
  export interface AdminGetListResult<T> {
43
- total: number
44
- rows: T[]
68
+ total: number;
69
+ rows: T[];
45
70
  }
46
71
 
47
72
  export interface AdminBlockUserRequest {
48
- id: string
49
- blocked: boolean
73
+ id: string;
74
+ blocked: boolean;
50
75
  }
51
76
 
52
77
  export interface AdminModifyRoleOrPermissionRequest {
53
78
  id: string;
54
79
  rpp: {
55
- r: RoleOrPermission
56
- add: boolean
57
- }[]
80
+ r: RoleOrPermission;
81
+ add: boolean;
82
+ }[];
58
83
  }
59
84
 
60
85
  export interface AdminModifyPermanentWorkspaceFeatureFlagRequest {
61
86
  id: string;
62
87
  changes: {
63
- featureFlag: NamedWorkspaceFeatureFlag
64
- add: boolean
65
- }[]
88
+ featureFlag: NamedWorkspaceFeatureFlag;
89
+ add: boolean;
90
+ }[];
66
91
  }
67
92
 
68
- export interface WorkspaceAndInstance extends Omit<Workspace, "id"|"creationTime">, Omit<WorkspaceInstance, "id"|"creationTime"> {
93
+ export interface WorkspaceAndInstance
94
+ extends Omit<Workspace, "id" | "creationTime">,
95
+ Omit<WorkspaceInstance, "id" | "creationTime"> {
69
96
  workspaceId: string;
70
97
  workspaceCreationTime: string;
71
98
  instanceId: string;
@@ -78,7 +105,7 @@ export namespace WorkspaceAndInstance {
78
105
  return {
79
106
  id: wai.workspaceId,
80
107
  creationTime: wai.workspaceCreationTime,
81
- ... wai
108
+ ...wai,
82
109
  };
83
110
  }
84
111
 
@@ -89,7 +116,7 @@ export namespace WorkspaceAndInstance {
89
116
  return {
90
117
  id: wai.instanceId,
91
118
  creationTime: wai.instanceCreationTime,
92
- ... wai
119
+ ...wai,
93
120
  };
94
121
  }
95
122
  }
@@ -102,4 +129,4 @@ export type AdminGetWorkspacesQuery = {
102
129
  instanceId?: string;
103
130
  workspaceId?: string;
104
131
  ownerId?: string;
105
- };
132
+ };
package/src/analytics.ts CHANGED
@@ -4,51 +4,49 @@
4
4
  * See License-AGPL.txt in the project root for license information.
5
5
  */
6
6
 
7
-
8
7
  export const IAnalyticsWriter = Symbol("IAnalyticsWriter");
9
8
 
10
9
  type Identity =
11
- | { userId: string | number }
10
+ | { userId: string | number; anonymousId?: string | number }
12
11
  | { userId?: string | number; anonymousId: string | number };
13
12
 
14
13
  interface Message {
15
14
  messageId?: string;
16
15
  }
17
16
 
18
- export type IdentifyMessage = Message & Identity & {
19
- traits?: any;
20
- timestamp?: Date;
21
- context?: any;
22
- };
23
-
24
- export type TrackMessage = Message & Identity & {
25
- event: string;
26
- properties?: any;
27
- timestamp?: Date;
28
- context?: any;
29
- };
30
-
31
- export type PageMessage = Message & Identity & {
32
- properties?: any;
33
- timestamp?: Date;
34
- context?: any;
35
- };
36
-
37
- export type RemoteTrackMessage = Omit<TrackMessage, "timestamp" | "userId" | "anonymousId"> & {
38
- anonymousId?: string | number;
39
- };
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
40
  export type RemotePageMessage = Omit<PageMessage, "timestamp" | "userId"> & {
41
- anonymousId?: string | number;
41
+ includePII?: boolean;
42
42
  };
43
43
 
44
- export type RemoteIdentifyMessage = Omit<IdentifyMessage, "timestamp" | "userId" | "anonymousId">;
44
+ export type RemoteIdentifyMessage = Omit<IdentifyMessage, "timestamp" | "userId">;
45
45
 
46
46
  export interface IAnalyticsWriter {
47
-
48
47
  identify(msg: IdentifyMessage): void;
49
48
 
50
49
  track(msg: TrackMessage): void;
51
50
 
52
51
  page(msg: PageMessage): void;
53
-
54
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 CHANGED
@@ -11,14 +11,14 @@ export interface SelectAccountPayload {
11
11
  authHost: string;
12
12
  authName: string;
13
13
  authProviderType: string;
14
- },
14
+ };
15
15
  otherUser: {
16
16
  name: string;
17
17
  avatarUrl: string;
18
18
  authHost: string;
19
19
  authName: string;
20
20
  authProviderType: string;
21
- }
21
+ };
22
22
  }
23
23
  export namespace SelectAccountPayload {
24
24
  export function is(data: any): data is SelectAccountPayload {
@@ -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
45
+ return billingMode.mode === "usage-based";
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
+ }