@gitpod/gitpod-protocol 0.1.5-ps-commit-email-fork.0 → 0.1.5-release-2022.6.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (375) hide show
  1. package/data/gitpod-schema.json +206 -28
  2. package/lib/accounting-protocol.d.ts +17 -13
  3. package/lib/accounting-protocol.d.ts.map +1 -1
  4. package/lib/accounting-protocol.js +39 -47
  5. package/lib/accounting-protocol.js.map +1 -1
  6. package/lib/admin-protocol.d.ts +21 -4
  7. package/lib/admin-protocol.d.ts.map +1 -1
  8. package/lib/admin-protocol.js +2 -13
  9. package/lib/admin-protocol.js.map +1 -1
  10. package/lib/analytics.d.ts +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/auth.d.ts.map +1 -1
  15. package/lib/context-url.d.ts +31 -0
  16. package/lib/context-url.d.ts.map +1 -0
  17. package/lib/context-url.js +102 -0
  18. package/lib/context-url.js.map +1 -0
  19. package/lib/{util/context-url.spec.d.ts → context-url.spec.d.ts} +4 -0
  20. package/lib/context-url.spec.d.ts.map +1 -0
  21. package/lib/context-url.spec.js +109 -0
  22. package/lib/context-url.spec.js.map +1 -0
  23. package/lib/email-protocol.d.ts +1 -2
  24. package/lib/email-protocol.d.ts.map +1 -1
  25. package/lib/email-protocol.js +4 -4
  26. package/lib/email-protocol.js.map +1 -1
  27. package/lib/encryption/container-module.d.ts.map +1 -1
  28. package/lib/encryption/container-module.js +4 -4
  29. package/lib/encryption/container-module.js.map +1 -1
  30. package/lib/encryption/encryption-engine.d.ts.map +1 -1
  31. package/lib/encryption/encryption-engine.js +25 -26
  32. package/lib/encryption/encryption-engine.js.map +1 -1
  33. package/lib/encryption/encryption-engine.spec.d.ts.map +1 -1
  34. package/lib/encryption/encryption-engine.spec.js +29 -37
  35. package/lib/encryption/encryption-engine.spec.js.map +1 -1
  36. package/lib/encryption/encryption-service.d.ts.map +1 -1
  37. package/lib/encryption/encryption-service.js +30 -44
  38. package/lib/encryption/encryption-service.js.map +1 -1
  39. package/lib/encryption/key-provider.d.ts.map +1 -1
  40. package/lib/encryption/key-provider.js +31 -38
  41. package/lib/encryption/key-provider.js.map +1 -1
  42. package/lib/env.d.ts +0 -6
  43. package/lib/env.d.ts.map +1 -1
  44. package/lib/env.js +7 -27
  45. package/lib/env.js.map +1 -1
  46. package/lib/experiments/always-default.d.ts +8 -0
  47. package/lib/experiments/always-default.d.ts.map +1 -0
  48. package/lib/experiments/always-default.js +20 -0
  49. package/lib/experiments/always-default.js.map +1 -0
  50. package/lib/experiments/configcat-server.d.ts +8 -0
  51. package/lib/experiments/configcat-server.d.ts.map +1 -0
  52. package/lib/experiments/configcat-server.js +34 -0
  53. package/lib/experiments/configcat-server.js.map +1 -0
  54. package/lib/experiments/configcat.d.ts +21 -0
  55. package/lib/experiments/configcat.d.ts.map +1 -0
  56. package/lib/experiments/configcat.js +47 -0
  57. package/lib/experiments/configcat.js.map +1 -0
  58. package/lib/experiments/types.d.ts +19 -0
  59. package/lib/experiments/types.d.ts.map +1 -0
  60. package/lib/{util/without.js → experiments/types.js} +2 -2
  61. package/lib/experiments/types.js.map +1 -0
  62. package/lib/gitpod-file-parser.d.ts.map +1 -1
  63. package/lib/gitpod-file-parser.js +26 -42
  64. package/lib/gitpod-file-parser.js.map +1 -1
  65. package/lib/gitpod-file-parser.spec.js +145 -142
  66. package/lib/gitpod-file-parser.spec.js.map +1 -1
  67. package/lib/gitpod-service.d.ts +140 -38
  68. package/lib/gitpod-service.d.ts.map +1 -1
  69. package/lib/gitpod-service.js +181 -317
  70. package/lib/gitpod-service.js.map +1 -1
  71. package/lib/headless-workspace-log.d.ts +9 -11
  72. package/lib/headless-workspace-log.d.ts.map +1 -1
  73. package/lib/headless-workspace-log.js +6 -8
  74. package/lib/headless-workspace-log.js.map +1 -1
  75. package/lib/ide-frontend-service.d.ts +1 -1
  76. package/lib/ide-protocol.d.ts +105 -0
  77. package/lib/ide-protocol.d.ts.map +1 -0
  78. package/lib/ide-protocol.js +8 -0
  79. package/lib/ide-protocol.js.map +1 -0
  80. package/lib/index.d.ts +16 -10
  81. package/lib/index.d.ts.map +1 -1
  82. package/lib/index.js +6 -0
  83. package/lib/index.js.map +1 -1
  84. package/lib/installation-admin-protocol.d.ts +30 -0
  85. package/lib/installation-admin-protocol.d.ts.map +1 -0
  86. package/lib/installation-admin-protocol.js +31 -0
  87. package/lib/installation-admin-protocol.js.map +1 -0
  88. package/lib/license-protocol.d.ts +7 -0
  89. package/lib/license-protocol.d.ts.map +1 -1
  90. package/lib/license-protocol.js.map +1 -1
  91. package/lib/messaging/browser/connection.d.ts +3 -3
  92. package/lib/messaging/browser/connection.d.ts.map +1 -1
  93. package/lib/messaging/browser/connection.js +173 -36
  94. package/lib/messaging/browser/connection.js.map +1 -1
  95. package/lib/messaging/browser/window-connection.d.ts +4 -4
  96. package/lib/messaging/browser/window-connection.d.ts.map +1 -1
  97. package/lib/messaging/browser/window-connection.js +42 -59
  98. package/lib/messaging/browser/window-connection.js.map +1 -1
  99. package/lib/messaging/client-call-metrics.d.ts +35 -0
  100. package/lib/messaging/client-call-metrics.d.ts.map +1 -0
  101. package/lib/messaging/client-call-metrics.js +83 -0
  102. package/lib/messaging/client-call-metrics.js.map +1 -0
  103. package/lib/messaging/error.d.ts +5 -1
  104. package/lib/messaging/error.d.ts.map +1 -1
  105. package/lib/messaging/error.js +10 -2
  106. package/lib/messaging/error.js.map +1 -1
  107. package/lib/messaging/handler.d.ts +10 -0
  108. package/lib/messaging/handler.d.ts.map +1 -1
  109. package/lib/messaging/handler.js +1 -1
  110. package/lib/messaging/node/connection.d.ts +1 -17
  111. package/lib/messaging/node/connection.d.ts.map +1 -1
  112. package/lib/messaging/node/connection.js +24 -60
  113. package/lib/messaging/node/connection.js.map +1 -1
  114. package/lib/messaging/proxy-factory.d.ts +3 -1
  115. package/lib/messaging/proxy-factory.d.ts.map +1 -1
  116. package/lib/messaging/proxy-factory.js +75 -162
  117. package/lib/messaging/proxy-factory.js.map +1 -1
  118. package/lib/oss-allowlist.d.ts +14 -0
  119. package/lib/oss-allowlist.d.ts.map +1 -0
  120. package/lib/oss-allowlist.js +8 -0
  121. package/lib/oss-allowlist.js.map +1 -0
  122. package/lib/payment-protocol.d.ts.map +1 -1
  123. package/lib/payment-protocol.js +1 -1
  124. package/lib/payment-protocol.js.map +1 -1
  125. package/lib/permission.d.ts +10 -3
  126. package/lib/permission.d.ts.map +1 -1
  127. package/lib/permission.js +41 -31
  128. package/lib/permission.js.map +1 -1
  129. package/lib/plans.d.ts +4 -4
  130. package/lib/plans.d.ts.map +1 -1
  131. package/lib/plans.js +225 -209
  132. package/lib/plans.js.map +1 -1
  133. package/lib/protocol.d.ts +172 -85
  134. package/lib/protocol.d.ts.map +1 -1
  135. package/lib/protocol.js +230 -187
  136. package/lib/protocol.js.map +1 -1
  137. package/lib/snapshot-url.d.ts +14 -0
  138. package/lib/snapshot-url.d.ts.map +1 -0
  139. package/lib/snapshot-url.js +26 -0
  140. package/lib/snapshot-url.js.map +1 -0
  141. package/{src/util/without.ts → lib/snapshot-url.spec.d.ts} +2 -3
  142. package/lib/snapshot-url.spec.d.ts.map +1 -0
  143. package/lib/snapshot-url.spec.js +41 -0
  144. package/lib/snapshot-url.spec.js.map +1 -0
  145. package/lib/team-subscription-protocol.d.ts +22 -4
  146. package/lib/team-subscription-protocol.d.ts.map +1 -1
  147. package/lib/team-subscription-protocol.js +31 -17
  148. package/lib/team-subscription-protocol.js.map +1 -1
  149. package/lib/teams-projects-protocol.d.ts +118 -0
  150. package/lib/teams-projects-protocol.d.ts.map +1 -0
  151. package/lib/teams-projects-protocol.js +30 -0
  152. package/lib/teams-projects-protocol.js.map +1 -0
  153. package/lib/typings/globals.d.ts +2 -2
  154. package/lib/typings/globals.d.ts.map +1 -1
  155. package/lib/util/analytics.d.ts +8 -0
  156. package/lib/util/analytics.d.ts.map +1 -0
  157. package/lib/util/analytics.js +88 -0
  158. package/lib/util/analytics.js.map +1 -0
  159. package/lib/util/async-iterator.d.ts.map +1 -1
  160. package/lib/util/async-iterator.js +57 -135
  161. package/lib/util/async-iterator.js.map +1 -1
  162. package/lib/util/cancelable.js +17 -59
  163. package/lib/util/cancelable.js.map +1 -1
  164. package/lib/util/date-time.js +11 -11
  165. package/lib/util/date-time.js.map +1 -1
  166. package/lib/util/debug-app.d.ts +25 -0
  167. package/lib/util/debug-app.d.ts.map +1 -0
  168. package/lib/util/debug-app.js +100 -0
  169. package/lib/util/debug-app.js.map +1 -0
  170. package/lib/util/deferred.js +10 -12
  171. package/lib/util/deferred.js.map +1 -1
  172. package/lib/util/disposable.d.ts.map +1 -1
  173. package/lib/util/disposable.js +27 -40
  174. package/lib/util/disposable.js.map +1 -1
  175. package/lib/util/event.d.ts.map +1 -1
  176. package/lib/util/event.js +63 -77
  177. package/lib/util/event.js.map +1 -1
  178. package/lib/util/garbage-collected-cache.d.ts +1 -0
  179. package/lib/util/garbage-collected-cache.d.ts.map +1 -1
  180. package/lib/util/garbage-collected-cache.js +27 -47
  181. package/lib/util/garbage-collected-cache.js.map +1 -1
  182. package/lib/util/generate-workspace-id.d.ts +6 -1
  183. package/lib/util/generate-workspace-id.d.ts.map +1 -1
  184. package/lib/util/generate-workspace-id.js +469 -502
  185. package/lib/util/generate-workspace-id.js.map +1 -1
  186. package/lib/util/generate-workspace-id.spec.js +68 -78
  187. package/lib/util/generate-workspace-id.spec.js.map +1 -1
  188. package/lib/util/gitpod-cookie.d.ts +20 -0
  189. package/lib/util/gitpod-cookie.d.ts.map +1 -0
  190. package/lib/util/gitpod-cookie.js +41 -0
  191. package/lib/util/gitpod-cookie.js.map +1 -0
  192. package/lib/util/gitpod-host-url.d.ts +1 -2
  193. package/lib/util/gitpod-host-url.d.ts.map +1 -1
  194. package/lib/util/gitpod-host-url.js +108 -109
  195. package/lib/util/gitpod-host-url.js.map +1 -1
  196. package/lib/util/gitpod-host-url.spec.d.ts +6 -0
  197. package/lib/util/gitpod-host-url.spec.d.ts.map +1 -1
  198. package/lib/util/gitpod-host-url.spec.js +112 -30
  199. package/lib/util/gitpod-host-url.spec.js.map +1 -1
  200. package/lib/util/grpc.d.ts +15 -0
  201. package/lib/util/grpc.d.ts.map +1 -0
  202. package/lib/util/grpc.js +18 -0
  203. package/lib/util/grpc.js.map +1 -0
  204. package/lib/util/jaeger-client-types.d.ts +68 -0
  205. package/lib/util/jaeger-client-types.d.ts.map +1 -0
  206. package/lib/{theia-plugins.js → util/jaeger-client-types.js} +1 -1
  207. package/lib/util/jaeger-client-types.js.map +1 -0
  208. package/lib/util/logging.d.ts +49 -33
  209. package/lib/util/logging.d.ts.map +1 -1
  210. package/lib/util/logging.js +125 -129
  211. package/lib/util/logging.js.map +1 -1
  212. package/lib/util/make-link.js +5 -5
  213. package/lib/util/make-link.js.map +1 -1
  214. package/lib/util/parse-workspace-id.d.ts +10 -0
  215. package/lib/util/parse-workspace-id.d.ts.map +1 -1
  216. package/lib/util/parse-workspace-id.js +30 -7
  217. package/lib/util/parse-workspace-id.js.map +1 -1
  218. package/lib/util/parse-workspace-id.spec.d.ts +4 -0
  219. package/lib/util/parse-workspace-id.spec.d.ts.map +1 -1
  220. package/lib/util/parse-workspace-id.spec.js +123 -84
  221. package/lib/util/parse-workspace-id.spec.js.map +1 -1
  222. package/lib/util/queue.js +16 -55
  223. package/lib/util/queue.js.map +1 -1
  224. package/lib/util/queue.spec.js +147 -288
  225. package/lib/util/queue.spec.js.map +1 -1
  226. package/lib/util/repeat.d.ts +15 -0
  227. package/lib/util/repeat.d.ts.map +1 -0
  228. package/lib/util/repeat.js +55 -0
  229. package/lib/util/repeat.js.map +1 -0
  230. package/lib/util/semaphore.d.ts.map +1 -1
  231. package/lib/util/semaphore.js +15 -46
  232. package/lib/util/semaphore.js.map +1 -1
  233. package/lib/util/skip-if.d.ts.map +1 -1
  234. package/lib/util/skip-if.js +6 -6
  235. package/lib/util/skip-if.js.map +1 -1
  236. package/lib/util/timeutil.d.ts +1 -0
  237. package/lib/util/timeutil.d.ts.map +1 -1
  238. package/lib/util/timeutil.js +23 -17
  239. package/lib/util/timeutil.js.map +1 -1
  240. package/lib/util/timeutil.spec.d.ts.map +1 -1
  241. package/lib/util/timeutil.spec.js +21 -24
  242. package/lib/util/timeutil.spec.js.map +1 -1
  243. package/lib/util/tracing.d.ts +52 -6
  244. package/lib/util/tracing.d.ts.map +1 -1
  245. package/lib/util/tracing.js +197 -64
  246. package/lib/util/tracing.js.map +1 -1
  247. package/lib/util/tracing.spec.d.ts +7 -0
  248. package/lib/util/tracing.spec.d.ts.map +1 -0
  249. package/lib/util/tracing.spec.js +121 -0
  250. package/lib/util/tracing.spec.js.map +1 -0
  251. package/lib/util/workspace-port-authentication.d.ts +7 -7
  252. package/lib/util/workspace-port-authentication.d.ts.map +1 -1
  253. package/lib/util/workspace-port-authentication.js +9 -12
  254. package/lib/util/workspace-port-authentication.js.map +1 -1
  255. package/lib/workspace-cluster.d.ts +24 -3
  256. package/lib/workspace-cluster.d.ts.map +1 -1
  257. package/lib/workspace-cluster.js +19 -4
  258. package/lib/workspace-cluster.js.map +1 -1
  259. package/lib/workspace-instance.d.ts +42 -5
  260. package/lib/workspace-instance.d.ts.map +1 -1
  261. package/lib/wsready.d.ts +1 -1
  262. package/lib/wsready.d.ts.map +1 -1
  263. package/lib/wsready.js +2 -2
  264. package/lib/wsready.js.map +1 -1
  265. package/package.json +35 -18
  266. package/pkg-yarn.lock +20 -10
  267. package/provenance-bundle.jsonl +2 -0
  268. package/src/accounting-protocol.ts +63 -57
  269. package/src/admin-protocol.ts +43 -21
  270. package/src/analytics.ts +52 -0
  271. package/src/auth.ts +2 -2
  272. package/src/context-url.spec.ts +67 -0
  273. package/src/context-url.ts +109 -0
  274. package/src/email-protocol.ts +5 -7
  275. package/src/encryption/container-module.ts +2 -3
  276. package/src/encryption/encryption-engine.spec.ts +9 -8
  277. package/src/encryption/encryption-engine.ts +14 -14
  278. package/src/encryption/encryption-service.ts +4 -5
  279. package/src/encryption/key-provider.ts +16 -19
  280. package/src/env.ts +0 -22
  281. package/src/experiments/always-default.ts +24 -0
  282. package/src/experiments/configcat-server.ts +37 -0
  283. package/src/experiments/configcat.ts +53 -0
  284. package/src/experiments/types.ts +32 -0
  285. package/src/gitpod-file-parser.spec.ts +55 -61
  286. package/src/gitpod-file-parser.ts +16 -17
  287. package/src/gitpod-service.ts +278 -127
  288. package/src/headless-workspace-log.ts +12 -14
  289. package/src/ide-frontend-service.ts +2 -2
  290. package/src/ide-protocol.ts +119 -0
  291. package/src/index.ts +16 -10
  292. package/src/installation-admin-protocol.ts +45 -0
  293. package/src/license-protocol.ts +12 -6
  294. package/src/messaging/browser/connection.ts +185 -21
  295. package/src/messaging/browser/window-connection.ts +39 -29
  296. package/src/messaging/client-call-metrics.ts +96 -0
  297. package/src/messaging/error.ts +15 -5
  298. package/src/messaging/handler.ts +13 -1
  299. package/src/messaging/node/connection.ts +23 -70
  300. package/src/messaging/proxy-factory.ts +35 -34
  301. package/src/oss-allowlist.ts +15 -0
  302. package/src/payment-protocol.ts +2 -2
  303. package/src/permission.ts +42 -33
  304. package/src/plans.ts +236 -189
  305. package/src/protocol.ts +454 -276
  306. package/src/snapshot-url.spec.ts +27 -0
  307. package/src/snapshot-url.ts +27 -0
  308. package/src/team-subscription-protocol.ts +59 -23
  309. package/src/teams-projects-protocol.ts +153 -0
  310. package/src/typings/globals.ts +4 -4
  311. package/src/util/analytics.ts +109 -0
  312. package/src/util/async-iterator.ts +4 -5
  313. package/src/util/cancelable.ts +3 -3
  314. package/src/util/date-time.ts +8 -8
  315. package/src/util/debug-app.ts +81 -0
  316. package/src/util/deferred.ts +6 -6
  317. package/src/util/disposable.ts +3 -6
  318. package/src/util/event.ts +9 -11
  319. package/src/util/garbage-collected-cache.ts +9 -6
  320. package/src/util/generate-workspace-id.spec.ts +37 -10
  321. package/src/util/generate-workspace-id.ts +464 -438
  322. package/src/util/gitpod-cookie.ts +38 -0
  323. package/src/util/gitpod-host-url.spec.ts +58 -7
  324. package/src/util/gitpod-host-url.ts +52 -40
  325. package/src/util/grpc.ts +15 -0
  326. package/src/util/jaeger-client-types.ts +102 -0
  327. package/src/util/logging.ts +145 -72
  328. package/src/util/make-link.ts +6 -7
  329. package/src/util/parse-workspace-id.spec.ts +37 -8
  330. package/src/util/parse-workspace-id.ts +32 -7
  331. package/src/util/queue.spec.ts +27 -25
  332. package/src/util/repeat.ts +45 -0
  333. package/src/util/semaphore.ts +4 -6
  334. package/src/util/skip-if.ts +9 -6
  335. package/src/util/timeutil.spec.ts +14 -15
  336. package/src/util/timeutil.ts +21 -11
  337. package/src/util/tracing.spec.ts +88 -0
  338. package/src/util/tracing.ts +200 -31
  339. package/src/util/workspace-port-authentication.ts +10 -13
  340. package/src/workspace-cluster.ts +34 -7
  341. package/src/workspace-instance.ts +91 -31
  342. package/src/wsready.ts +3 -3
  343. package/data/builtin-theia-plugins.json +0 -372
  344. package/lib/messaging/connection-error-handler.d.ts +0 -27
  345. package/lib/messaging/connection-error-handler.d.ts.map +0 -1
  346. package/lib/messaging/connection-error-handler.js +0 -46
  347. package/lib/messaging/connection-error-handler.js.map +0 -1
  348. package/lib/theia-plugins.d.ts +0 -11
  349. package/lib/theia-plugins.d.ts.map +0 -1
  350. package/lib/theia-plugins.js.map +0 -1
  351. package/lib/util/context-url.d.ts +0 -13
  352. package/lib/util/context-url.d.ts.map +0 -1
  353. package/lib/util/context-url.js +0 -26
  354. package/lib/util/context-url.js.map +0 -1
  355. package/lib/util/context-url.spec.d.ts.map +0 -1
  356. package/lib/util/context-url.spec.js +0 -52
  357. package/lib/util/context-url.spec.js.map +0 -1
  358. package/lib/util/repeater.d.ts +0 -22
  359. package/lib/util/repeater.d.ts.map +0 -1
  360. package/lib/util/repeater.js +0 -118
  361. package/lib/util/repeater.js.map +0 -1
  362. package/lib/util/safe-promise.d.ts +0 -11
  363. package/lib/util/safe-promise.d.ts.map +0 -1
  364. package/lib/util/safe-promise.js +0 -34
  365. package/lib/util/safe-promise.js.map +0 -1
  366. package/lib/util/without.d.ts +0 -7
  367. package/lib/util/without.d.ts.map +0 -1
  368. package/lib/util/without.js.map +0 -1
  369. package/src/messaging/connection-error-handler.ts +0 -62
  370. package/src/theia-plugins.ts +0 -11
  371. package/src/util/context-url.spec.ts +0 -25
  372. package/src/util/context-url.ts +0 -23
  373. package/src/util/jaeger-client.d.ts +0 -105
  374. package/src/util/repeater.ts +0 -49
  375. package/src/util/safe-promise.ts +0 -26
@@ -4,10 +4,9 @@
4
4
  * See License-AGPL.txt in the project root for license information.
5
5
  */
6
6
 
7
- import * as uuidv4 from 'uuid/v4';
8
- import { Without } from "./util/without";
9
- import { User } from './protocol';
10
- import { oneMonthLater } from './util/timeutil';
7
+ import { v4 as uuidv4 } from "uuid";
8
+ import { User } from "./protocol";
9
+ import { oneMonthLater } from "./util/timeutil";
11
10
 
12
11
  /*
13
12
  * Subscription and acocunting data
@@ -34,7 +33,7 @@ export interface AccountEntry {
34
33
  /**
35
34
  * credit: end of validity
36
35
  */
37
- expiryDate?: string; // exclusive
36
+ expiryDate?: string; // exclusive
38
37
 
39
38
  kind: AccountEntryKind;
40
39
 
@@ -47,26 +46,26 @@ export interface AccountEntry {
47
46
  description?: object;
48
47
  }
49
48
  export namespace AccountEntry {
50
- export function create<T extends AccountEntry>(entry: Without<T, 'uid'>): T {
49
+ export function create<T extends AccountEntry>(entry: Omit<T, "uid">): T {
51
50
  const result = entry as T;
52
51
  result.uid = uuidv4();
53
52
  return result;
54
- };
53
+ }
55
54
  }
56
55
 
57
- export type DebitAccountEntryKind = 'session' | 'expiry' | 'loss';
58
- export type AccountEntryKind = 'credit' | DebitAccountEntryKind | 'carry' | 'open';
56
+ export type DebitAccountEntryKind = "session" | "expiry" | "loss";
57
+ export type AccountEntryKind = "credit" | DebitAccountEntryKind | "carry" | "open";
59
58
 
60
59
  export interface Credit extends AccountEntry {
61
- kind: 'credit';
60
+ kind: "credit";
62
61
  expiryDate: string;
63
62
  }
64
63
  export type Debit = LossDebit | ExpiryDebit | SessionDebit;
65
64
  export interface LossDebit extends AccountEntry {
66
- kind: 'loss';
65
+ kind: "loss";
67
66
  }
68
67
  export interface ExpiryDebit extends AccountEntry {
69
- kind: 'expiry';
68
+ kind: "expiry";
70
69
  creditId: undefined;
71
70
  }
72
71
  export interface SessionDebit extends AccountEntry {
@@ -81,9 +80,7 @@ export interface CreditDescription {
81
80
  }
82
81
  export namespace CreditDescription {
83
82
  export function is(obj: any): obj is CreditDescription {
84
- return !!obj
85
- && obj.hasOwnProperty('subscriptionId')
86
- && obj.hasOwnProperty('planId');
83
+ return !!obj && obj.hasOwnProperty("subscriptionId") && obj.hasOwnProperty("planId");
87
84
  }
88
85
  }
89
86
  export interface SessionDescription {
@@ -91,16 +88,16 @@ export interface SessionDescription {
91
88
  contextUrl: string;
92
89
  workspaceId: string;
93
90
  workspaceInstanceId: string;
94
- private: boolean;
95
91
  }
96
92
  export namespace SessionDescription {
97
93
  export function is(obj: any): obj is SessionDescription {
98
- return !!obj
99
- && obj.hasOwnProperty('contextTitle')
100
- && obj.hasOwnProperty('contextUrl')
101
- && obj.hasOwnProperty('workspaceId')
102
- && obj.hasOwnProperty('workspaceInstanceId')
103
- && obj.hasOwnProperty('private');
94
+ return (
95
+ !!obj &&
96
+ obj.hasOwnProperty("contextTitle") &&
97
+ obj.hasOwnProperty("contextUrl") &&
98
+ obj.hasOwnProperty("workspaceId") &&
99
+ obj.hasOwnProperty("workspaceInstanceId")
100
+ );
104
101
  }
105
102
  }
106
103
 
@@ -114,11 +111,11 @@ export namespace SessionDescription {
114
111
  export interface Subscription {
115
112
  uid: string;
116
113
  userId: string;
117
- startDate: string; // inclusive
114
+ startDate: string; // inclusive
118
115
  /** When the subscription will end (must be >= cancellationDate!) */
119
- endDate?: string; // exclusive
116
+ endDate?: string; // exclusive
120
117
  /** When the subscription was cancelled */
121
- cancellationDate?: string; // exclusive
118
+ cancellationDate?: string; // exclusive
122
119
  /** Number of granted hours */
123
120
  amount: number;
124
121
  /** Number of granted hours for the first month: If this is set, use this value for the first month */
@@ -127,6 +124,7 @@ export interface Subscription {
127
124
  paymentReference?: string;
128
125
  paymentData?: PaymentData;
129
126
  teamSubscriptionSlotId?: string;
127
+ teamMembershipId?: string;
130
128
  /** marks the subscription as deleted */
131
129
  deleted?: boolean;
132
130
  }
@@ -148,8 +146,7 @@ export interface UserPaidSubscription extends Subscription {
148
146
  }
149
147
  export namespace UserPaidSubscription {
150
148
  export function is(data: any): data is UserPaidSubscription {
151
- return !!data
152
- && data.hasOwnProperty('paymentReference');
149
+ return !!data && data.hasOwnProperty("paymentReference");
153
150
  }
154
151
  }
155
152
 
@@ -158,44 +155,53 @@ export interface AssignedTeamSubscription extends Subscription {
158
155
  }
159
156
  export namespace AssignedTeamSubscription {
160
157
  export function is(data: any): data is AssignedTeamSubscription {
161
- return !!data
162
- && 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");
163
168
  }
164
169
  }
165
170
 
166
171
  export namespace Subscription {
167
- export function create(newSubscription: Without<Subscription, 'uid'>) {
172
+ export function create(newSubscription: Omit<Subscription, "uid">) {
168
173
  const subscription = newSubscription as Subscription;
169
174
  subscription.uid = uuidv4();
170
175
  return subscription;
171
- };
176
+ }
172
177
  export function cancelSubscription(s: Subscription, cancellationDate: string, endDate?: string) {
173
178
  s.endDate = endDate || cancellationDate;
174
179
  s.cancellationDate = cancellationDate;
175
- };
180
+ }
176
181
  export function isSame(s1: Subscription | undefined, s2: Subscription | undefined): boolean {
177
- return !!s1 && !!s2
178
- && s1.userId === s2.userId
179
- && s1.planId === s2.planId
180
- && s1.startDate === s2.startDate
181
- && s1.endDate === s2.endDate
182
- && s1.amount === s2.amount
183
- && s1.cancellationDate === s2.cancellationDate
184
- && s1.deleted === s2.deleted
185
- && ((s1.paymentData === undefined && s2.paymentData === undefined)
186
- || (!!s1.paymentData && !!s2.paymentData
187
- && s1.paymentData.downgradeDate === s2.paymentData.downgradeDate
188
- && s1.paymentData.newPlan === s2.paymentData.newPlan));
189
- };
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
+ }
190
199
  export function isActive(s: Subscription, date: string): boolean {
191
200
  return s.startDate <= date && (s.endDate === undefined || date < s.endDate);
192
- };
201
+ }
193
202
  export function isDowngraded(s: Subscription) {
194
203
  return s.paymentData && s.paymentData.downgradeDate;
195
- };
196
- export function isCancelled(s: Subscription) {
197
- return !!s.cancellationDate;
198
- };
204
+ }
199
205
  export function calculateCurrentPeriod(startDate: string, now: Date) {
200
206
  let nextStartDate = startDate;
201
207
  do {
@@ -203,19 +209,19 @@ export namespace Subscription {
203
209
  nextStartDate = oneMonthLater(startDate, new Date(startDate).getDate());
204
210
  } while (nextStartDate < now.toISOString());
205
211
  return { startDate, endDate: nextStartDate };
206
- };
212
+ }
207
213
  }
208
214
 
209
215
  export type MaybeSubscription = Subscription | undefined;
210
216
 
211
217
  export interface Period {
212
- startDate: string; // inclusive
213
- endDate: string; // exclusive
218
+ startDate: string; // inclusive
219
+ endDate: string; // exclusive
214
220
  }
215
221
 
216
222
  export type MaybePeriod = Period | undefined;
217
223
 
218
- export type AccountEntryFixedPeriod = Without<AccountEntry, 'uid'> & { expiryDate: string };
224
+ export type AccountEntryFixedPeriod = Omit<AccountEntry, "uid"> & { expiryDate: string };
219
225
  export interface AccountStatement extends Period {
220
226
  userId: string;
221
227
  /**
@@ -227,9 +233,9 @@ export interface AccountStatement extends Period {
227
233
  /** Remaining valid hours (accumulated from credits) */
228
234
  remainingHours: RemainingHours;
229
235
  }
230
- export type RemainingHours = number | 'unlimited';
236
+ export type RemainingHours = number | "unlimited";
231
237
 
232
238
  export interface CreditAlert {
233
- userId: string,
234
- remainingUsageHours: number
239
+ userId: string;
240
+ remainingUsageHours: number;
235
241
  }
@@ -5,10 +5,12 @@
5
5
  */
6
6
 
7
7
  import { User, Workspace, NamedWorkspaceFeatureFlag } from "./protocol";
8
- import { Without } from "./util/without";
8
+ import { FindPrebuildsParams } from "./gitpod-service";
9
+ import { Project, Team, PrebuildWithStatus, TeamMemberInfo, TeamMemberRole } from "./teams-projects-protocol";
9
10
  import { WorkspaceInstance, WorkspaceInstancePhase } from "./workspace-instance";
10
11
  import { RoleOrPermission } from "./permission";
11
12
  import { AccountStatement } from "./accounting-protocol";
13
+ import { InstallationAdminSettings } from "./installation-admin-protocol";
12
14
 
13
15
  export interface AdminServer {
14
16
  adminGetUsers(req: AdminGetListRequest<User>): Promise<AdminGetListResult<User>>;
@@ -18,11 +20,20 @@ export interface AdminServer {
18
20
  adminModifyRoleOrPermission(req: AdminModifyRoleOrPermissionRequest): Promise<User>;
19
21
  adminModifyPermanentWorkspaceFeatureFlag(req: AdminModifyPermanentWorkspaceFeatureFlagRequest): Promise<User>;
20
22
 
23
+ adminGetTeamMembers(teamId: string): Promise<TeamMemberInfo[]>;
24
+ adminGetTeams(req: AdminGetListRequest<Team>): Promise<AdminGetListResult<Team>>;
25
+ adminGetTeamById(id: string): Promise<Team | undefined>;
26
+ adminSetTeamMemberRole(teamId: string, userId: string, role: TeamMemberRole): Promise<void>;
27
+
21
28
  adminGetWorkspaces(req: AdminGetWorkspacesRequest): Promise<AdminGetListResult<WorkspaceAndInstance>>;
22
29
  adminGetWorkspace(id: string): Promise<WorkspaceAndInstance>;
23
30
  adminForceStopWorkspace(id: string): Promise<void>;
24
31
  adminRestoreSoftDeletedWorkspace(id: string): Promise<void>;
25
32
 
33
+ adminGetProjectsBySearchTerm(req: AdminGetListRequest<Project>): Promise<AdminGetListResult<Project>>;
34
+ adminGetProjectById(id: string): Promise<Project | undefined>;
35
+
36
+ adminFindPrebuilds(params: FindPrebuildsParams): Promise<PrebuildWithStatus[]>;
26
37
  adminSetLicense(key: string): Promise<void>;
27
38
 
28
39
  adminGetAccountStatement(userId: string): Promise<AccountStatement>;
@@ -30,43 +41,48 @@ export interface AdminServer {
30
41
  adminIsStudent(userId: string): Promise<boolean>;
31
42
  adminAddStudentEmailDomain(userId: string, domain: string): Promise<void>;
32
43
  adminGrantExtraHours(userId: string, extraHours: number): Promise<void>;
44
+
45
+ adminGetSettings(): Promise<InstallationAdminSettings>;
46
+ adminUpdateSettings(settings: InstallationAdminSettings): Promise<void>;
33
47
  }
34
48
 
35
49
  export interface AdminGetListRequest<T> {
36
- offset: number
37
- limit: number
38
- orderBy: keyof T
39
- orderDir: "asc" | "desc"
50
+ offset: number;
51
+ limit: number;
52
+ orderBy: keyof T;
53
+ orderDir: "asc" | "desc";
40
54
  searchTerm?: string;
41
55
  }
42
56
 
43
57
  export interface AdminGetListResult<T> {
44
- total: number
45
- rows: T[]
58
+ total: number;
59
+ rows: T[];
46
60
  }
47
61
 
48
62
  export interface AdminBlockUserRequest {
49
- id: string
50
- blocked: boolean
63
+ id: string;
64
+ blocked: boolean;
51
65
  }
52
66
 
53
67
  export interface AdminModifyRoleOrPermissionRequest {
54
68
  id: string;
55
69
  rpp: {
56
- r: RoleOrPermission
57
- add: boolean
58
- }[]
70
+ r: RoleOrPermission;
71
+ add: boolean;
72
+ }[];
59
73
  }
60
74
 
61
75
  export interface AdminModifyPermanentWorkspaceFeatureFlagRequest {
62
76
  id: string;
63
77
  changes: {
64
- featureFlag: NamedWorkspaceFeatureFlag
65
- add: boolean
66
- }[]
78
+ featureFlag: NamedWorkspaceFeatureFlag;
79
+ add: boolean;
80
+ }[];
67
81
  }
68
82
 
69
- export interface WorkspaceAndInstance extends Without<Workspace, "id"|"creationTime">, Without<WorkspaceInstance, "id"|"creationTime"> {
83
+ export interface WorkspaceAndInstance
84
+ extends Omit<Workspace, "id" | "creationTime">,
85
+ Omit<WorkspaceInstance, "id" | "creationTime"> {
70
86
  workspaceId: string;
71
87
  workspaceCreationTime: string;
72
88
  instanceId: string;
@@ -79,7 +95,7 @@ export namespace WorkspaceAndInstance {
79
95
  return {
80
96
  id: wai.workspaceId,
81
97
  creationTime: wai.workspaceCreationTime,
82
- ... wai
98
+ ...wai,
83
99
  };
84
100
  }
85
101
 
@@ -90,11 +106,17 @@ export namespace WorkspaceAndInstance {
90
106
  return {
91
107
  id: wai.instanceId,
92
108
  creationTime: wai.instanceCreationTime,
93
- ... wai
109
+ ...wai,
94
110
  };
95
111
  }
96
112
  }
97
113
 
98
- export interface AdminGetWorkspacesRequest extends AdminGetListRequest<WorkspaceAndInstance> {
99
- ownerId?: string
100
- }
114
+ export type AdminGetWorkspacesRequest = AdminGetListRequest<WorkspaceAndInstance> & AdminGetWorkspacesQuery;
115
+ /** The fields are meant to be used either OR (not combined) */
116
+ export type AdminGetWorkspacesQuery = {
117
+ /** we use this field in case we have a UUIDv4 and don't know whether it's an (old) workspace or instance id */
118
+ instanceIdOrWorkspaceId?: string;
119
+ instanceId?: string;
120
+ workspaceId?: string;
121
+ ownerId?: string;
122
+ };
@@ -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
+ }
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,67 @@
1
+ /**
2
+ * Copyright (c) 2020 Gitpod GmbH. All rights reserved.
3
+ * Licensed under the GNU Affero General Public License (AGPL).
4
+ * See License-AGPL.txt in the project root for license information.
5
+ */
6
+
7
+ import * as chai from "chai";
8
+ import { suite, test } from "mocha-typescript";
9
+ import { Workspace } from ".";
10
+ import { ContextURL } from "./context-url";
11
+ const expect = chai.expect;
12
+
13
+ type WsContextUrl = Pick<Workspace, "context" | "contextURL">;
14
+
15
+ @suite
16
+ export class ContextUrlTest {
17
+ @test public parseContextUrl_withEnvVar() {
18
+ const actual = ContextURL.getNormalizedURL({
19
+ contextURL: "passedin=test%20value/https://github.com/gitpod-io/gitpod-test-repo",
20
+ context: {},
21
+ } as WsContextUrl);
22
+ expect(actual?.host).to.equal("github.com");
23
+ expect(actual?.pathname).to.equal("/gitpod-io/gitpod-test-repo");
24
+ }
25
+
26
+ @test public parseContextUrl_withEnvVar_withoutSchema() {
27
+ const actual = ContextURL.getNormalizedURL({
28
+ contextURL: "passedin=test%20value/github.com/gitpod-io/gitpod-test-repo",
29
+ context: {},
30
+ } as WsContextUrl);
31
+ expect(actual?.host).to.equal("github.com");
32
+ expect(actual?.pathname).to.equal("/gitpod-io/gitpod-test-repo");
33
+ }
34
+
35
+ @test public parseContextUrl_withEnvVar_sshUrl() {
36
+ const actual = ContextURL.getNormalizedURL({
37
+ contextURL: "passedin=test%20value/git@github.com:gitpod-io/gitpod-test-repo.git",
38
+ context: {},
39
+ } as WsContextUrl);
40
+ expect(actual?.host).to.equal("github.com");
41
+ expect(actual?.pathname).to.equal("/gitpod-io/gitpod-test-repo.git");
42
+ }
43
+
44
+ @test public parseContextUrl_withPrebuild() {
45
+ const actual = ContextURL.getNormalizedURL({
46
+ contextURL: "prebuild/https://github.com/gitpod-io/gitpod-test-repo",
47
+ context: {},
48
+ } as WsContextUrl);
49
+ expect(actual?.host).to.equal("github.com");
50
+ expect(actual?.pathname).to.equal("/gitpod-io/gitpod-test-repo");
51
+ }
52
+
53
+ @test public parseContextUrl_withPrebuild_withoutSchema() {
54
+ const actual = ContextURL.getNormalizedURL({
55
+ contextURL: "prebuild/github.com/gitpod-io/gitpod-test-repo",
56
+ context: {},
57
+ } as WsContextUrl);
58
+ expect(actual?.host).to.equal("github.com");
59
+ expect(actual?.pathname).to.equal("/gitpod-io/gitpod-test-repo");
60
+ }
61
+
62
+ @test public parseContextUrl_badUrl() {
63
+ const actual = ContextURL.getNormalizedURL({ contextURL: "[Object object]", context: {} } as WsContextUrl);
64
+ expect(actual).to.be.undefined;
65
+ }
66
+ }
67
+ module.exports = new ContextUrlTest();
@@ -0,0 +1,109 @@
1
+ /**
2
+ * Copyright (c) 2020 Gitpod GmbH. All rights reserved.
3
+ * Licensed under the GNU Affero General Public License (AGPL).
4
+ * See License-AGPL.txt in the project root for license information.
5
+ */
6
+
7
+ import { Workspace } from ".";
8
+
9
+ /**
10
+ * The whole point of these methods is to overcome inconsistencies in our data model.
11
+ * Ideally we remove it at some point once we fixed our model, as it:
12
+ * - duplicates logic
13
+ * - but additional burden on clients (using this, copying this to other languages!)
14
+ *
15
+ * TODO(gpl) See if we can get this into `server` code to remove the burden from clients
16
+ */
17
+ export namespace ContextURL {
18
+ export const INCREMENTAL_PREBUILD_PREFIX = "incremental-prebuild";
19
+ export const PREBUILD_PREFIX = "prebuild";
20
+ export const IMAGEBUILD_PREFIX = "imagebuild";
21
+ export const SNAPSHOT_PREFIX = "snapshot";
22
+ export const REFERRER_PREFIX = "referrer:";
23
+
24
+ /**
25
+ * This function will (try to) return the HTTP(S) URL of the context the user originally created this workspace on.
26
+ * Especially it will not contain any modifiers or be of different scheme than HTTP(S).
27
+ *
28
+ * Use this function if you need to provided a _working_ URL to the original context.
29
+ * @param ws
30
+ * @returns
31
+ */
32
+ export function getNormalizedURL(ws: Pick<Workspace, "context" | "contextURL"> | undefined): URL | undefined {
33
+ const normalized = normalize(ws);
34
+ if (!normalized) {
35
+ return undefined;
36
+ }
37
+
38
+ try {
39
+ return new URL(normalized);
40
+ } catch (err) {
41
+ console.debug(`unable to parse URL from normalized contextURL: '${normalized}'`);
42
+ }
43
+ return undefined;
44
+ }
45
+
46
+ function normalize(ws: Pick<Workspace, "context" | "contextURL"> | undefined): string | undefined {
47
+ if (!ws) {
48
+ return undefined;
49
+ }
50
+ if (ws.context.normalizedContextURL) {
51
+ return ws.context.normalizedContextURL;
52
+ }
53
+
54
+ // fallback: we do not yet set normalizedContextURL on all workspaces, yet, let alone older existing workspaces
55
+ let fallback: string | undefined = undefined;
56
+ try {
57
+ fallback = removePrefixes(ws.contextURL);
58
+ } catch (err) {
59
+ console.error(`unable to remove prefixes from contextURL: '${ws.contextURL}'`, err);
60
+ }
61
+ return fallback;
62
+ }
63
+
64
+ /**
65
+ * The field "contextUrl" might contain prefixes like:
66
+ * - envvar1=value1/...
67
+ * - prebuild/...
68
+ * This is the analogon to the (Prefix)ContextParser structure in "server".
69
+ */
70
+ function removePrefixes(contextUrl: string | undefined): string | undefined {
71
+ if (contextUrl === undefined) {
72
+ return undefined;
73
+ }
74
+
75
+ const segments = contextUrl.split("/");
76
+ if (segments.length === 1) {
77
+ return segments[0]; // this might be something, we just try
78
+ }
79
+
80
+ const segmentsToURL = (offset: number): string => {
81
+ let rest = segments.slice(offset).join("/");
82
+ if (/^git@[^:\/]+:/.test(rest)) {
83
+ rest = rest.replace(/^git@([^:\/]+):/, "https://$1/");
84
+ }
85
+ if (!rest.startsWith("http")) {
86
+ rest = "https://" + rest;
87
+ }
88
+ return rest;
89
+ };
90
+
91
+ const firstSegment = segments[0];
92
+ if (
93
+ firstSegment === PREBUILD_PREFIX ||
94
+ firstSegment === INCREMENTAL_PREBUILD_PREFIX ||
95
+ firstSegment === IMAGEBUILD_PREFIX ||
96
+ firstSegment === SNAPSHOT_PREFIX ||
97
+ firstSegment.startsWith(REFERRER_PREFIX)
98
+ ) {
99
+ return segmentsToURL(1);
100
+ }
101
+
102
+ // check for env vars
103
+ if (firstSegment.indexOf("=") !== -1) {
104
+ return segmentsToURL(1);
105
+ }
106
+
107
+ return segmentsToURL(0);
108
+ }
109
+ }
@@ -4,11 +4,9 @@
4
4
  * See License-AGPL.txt in the project root for license information.
5
5
  */
6
6
 
7
- import { Without } from "./util/without";
8
- import uuidv4 = require("uuid/v4");
7
+ import { v4 as uuidv4 } from "uuid";
9
8
 
10
- export type EMailState = "scheduledInternal"
11
- | "scheduledSendgrid";
9
+ export type EMailState = "scheduledInternal" | "scheduledSendgrid";
12
10
 
13
11
  export interface EMailStatus {
14
12
  /** The time the email entry was inserted into the DB */
@@ -59,9 +57,9 @@ export type EMail = {
59
57
  } & EMailStatus;
60
58
 
61
59
  export namespace EMail {
62
- export const create = (ts: Without<EMail, 'uid'>): EMail => {
60
+ export const create = (ts: Omit<EMail, "uid">): EMail => {
63
61
  const withId = ts as EMail;
64
62
  withId.uid = uuidv4();
65
63
  return withId;
66
- }
67
- }
64
+ };
65
+ }
@@ -19,10 +19,9 @@ import { EncryptionService, EncryptionServiceImpl } from "./encryption-service";
19
19
  * };
20
20
  * }).inSingletonScope();
21
21
  */
22
- export const encryptionModule: interfaces.ContainerModuleCallBack = bind => {
23
-
22
+ export const encryptionModule: interfaces.ContainerModuleCallBack = (bind) => {
24
23
  bind(KeyProvider).to(KeyProviderImpl).inSingletonScope();
25
24
 
26
25
  bind(EncryptionEngine).to(EncryptionEngineImpl).inSingletonScope();
27
26
  bind(EncryptionService).to(EncryptionServiceImpl).inSingletonScope();
28
- };
27
+ };