@gitpod/gitpod-protocol 0.1.5-pd-ide-service.17 → 0.1.5-pd-add-grpc-sec.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 (106) hide show
  1. package/data/gitpod-schema.json +16 -0
  2. package/lib/admin-protocol.d.ts +10 -1
  3. package/lib/admin-protocol.d.ts.map +1 -1
  4. package/lib/admin-protocol.js.map +1 -1
  5. package/lib/attribution.d.ts +4 -0
  6. package/lib/attribution.d.ts.map +1 -1
  7. package/lib/attribution.js +14 -0
  8. package/lib/attribution.js.map +1 -1
  9. package/lib/billing-mode.d.ts +4 -0
  10. package/lib/billing-mode.d.ts.map +1 -1
  11. package/lib/context-url.d.ts +0 -1
  12. package/lib/context-url.d.ts.map +1 -1
  13. package/lib/context-url.js +0 -2
  14. package/lib/context-url.js.map +1 -1
  15. package/lib/context-url.spec.d.ts +0 -2
  16. package/lib/context-url.spec.d.ts.map +1 -1
  17. package/lib/context-url.spec.js +0 -28
  18. package/lib/context-url.spec.js.map +1 -1
  19. package/lib/experiments/configcat-server.d.ts.map +1 -1
  20. package/lib/experiments/configcat-server.js +1 -0
  21. package/lib/experiments/configcat-server.js.map +1 -1
  22. package/lib/experiments/configcat.d.ts +0 -2
  23. package/lib/experiments/configcat.d.ts.map +1 -1
  24. package/lib/experiments/configcat.js +1 -7
  25. package/lib/experiments/configcat.js.map +1 -1
  26. package/lib/experiments/types.d.ts +0 -2
  27. package/lib/experiments/types.d.ts.map +1 -1
  28. package/lib/experiments/types.js.map +1 -1
  29. package/lib/gitpod-service.d.ts +11 -19
  30. package/lib/gitpod-service.d.ts.map +1 -1
  31. package/lib/gitpod-service.js.map +1 -1
  32. package/lib/ide-protocol.d.ts +9 -1
  33. package/lib/ide-protocol.d.ts.map +1 -1
  34. package/lib/index.d.ts +0 -1
  35. package/lib/index.d.ts.map +1 -1
  36. package/lib/index.js +0 -1
  37. package/lib/index.js.map +1 -1
  38. package/lib/messaging/client-call-metrics.d.ts +2 -0
  39. package/lib/messaging/client-call-metrics.d.ts.map +1 -1
  40. package/lib/messaging/client-call-metrics.js +13 -0
  41. package/lib/messaging/client-call-metrics.js.map +1 -1
  42. package/lib/messaging/error.d.ts +2 -0
  43. package/lib/messaging/error.d.ts.map +1 -1
  44. package/lib/messaging/error.js +4 -0
  45. package/lib/messaging/error.js.map +1 -1
  46. package/lib/plans.js +2 -2
  47. package/lib/plans.js.map +1 -1
  48. package/lib/protocol.d.ts +20 -39
  49. package/lib/protocol.d.ts.map +1 -1
  50. package/lib/protocol.js +10 -18
  51. package/lib/protocol.js.map +1 -1
  52. package/lib/teams-projects-protocol.d.ts +5 -2
  53. package/lib/teams-projects-protocol.d.ts.map +1 -1
  54. package/lib/teams-projects-protocol.js.map +1 -1
  55. package/lib/usage.d.ts +12 -0
  56. package/lib/usage.d.ts.map +1 -1
  57. package/lib/usage.js +7 -1
  58. package/lib/usage.js.map +1 -1
  59. package/lib/util/grpc.d.ts +1 -0
  60. package/lib/util/grpc.d.ts.map +1 -1
  61. package/lib/util/grpc.js.map +1 -1
  62. package/lib/util/nice-grpc.d.ts.map +1 -1
  63. package/lib/util/nice-grpc.js +2 -0
  64. package/lib/util/nice-grpc.js.map +1 -1
  65. package/lib/workspace-class.d.ts +1 -1
  66. package/lib/workspace-class.d.ts.map +1 -1
  67. package/lib/workspace-cluster.d.ts +6 -5
  68. package/lib/workspace-cluster.d.ts.map +1 -1
  69. package/lib/workspace-cluster.js.map +1 -1
  70. package/lib/workspace-instance.d.ts +1 -0
  71. package/lib/workspace-instance.d.ts.map +1 -1
  72. package/lib/wsready.d.ts +9 -3
  73. package/lib/wsready.d.ts.map +1 -1
  74. package/lib/wsready.js +2 -0
  75. package/lib/wsready.js.map +1 -1
  76. package/package.json +1 -1
  77. package/pkg-yarn.lock +1 -1
  78. package/provenance-bundle.jsonl +1 -1
  79. package/src/admin-protocol.ts +14 -1
  80. package/src/attribution.ts +15 -0
  81. package/src/billing-mode.ts +7 -0
  82. package/src/context-url.spec.ts +0 -18
  83. package/src/context-url.ts +0 -2
  84. package/src/experiments/configcat-server.ts +1 -0
  85. package/src/experiments/configcat.ts +0 -6
  86. package/src/experiments/types.ts +0 -4
  87. package/src/gitpod-service.ts +11 -23
  88. package/src/ide-protocol.ts +11 -1
  89. package/src/index.ts +0 -1
  90. package/src/messaging/client-call-metrics.ts +17 -0
  91. package/src/messaging/error.ts +6 -0
  92. package/src/plans.ts +2 -2
  93. package/src/protocol.ts +26 -49
  94. package/src/teams-projects-protocol.ts +8 -3
  95. package/src/usage.ts +14 -0
  96. package/src/util/grpc.ts +3 -0
  97. package/src/util/nice-grpc.ts +3 -0
  98. package/src/workspace-class.ts +1 -1
  99. package/src/workspace-cluster.ts +11 -6
  100. package/src/workspace-instance.ts +6 -0
  101. package/src/wsready.ts +11 -5
  102. package/lib/email-protocol.d.ts +0 -49
  103. package/lib/email-protocol.d.ts.map +0 -1
  104. package/lib/email-protocol.js +0 -28
  105. package/lib/email-protocol.js.map +0 -1
  106. package/src/email-protocol.ts +0 -65
@@ -12,7 +12,6 @@ import {
12
12
  WhitelistedRepository,
13
13
  WorkspaceImageBuild,
14
14
  AuthProviderInfo,
15
- CreateWorkspaceMode,
16
15
  Token,
17
16
  UserEnvVarValue,
18
17
  Terms,
@@ -59,8 +58,7 @@ import {
59
58
  } from "./team-subscription-protocol";
60
59
  import { RemotePageMessage, RemoteTrackMessage, RemoteIdentifyMessage } from "./analytics";
61
60
  import { IDEServer } from "./ide-protocol";
62
- import { InstallationAdminSettings, TelemetryData } from "./installation-admin-protocol";
63
- import { ListUsageRequest, ListUsageResponse } from "./usage";
61
+ import { ListUsageRequest, ListUsageResponse, CostCenterJSON } from "./usage";
64
62
  import { SupportedWorkspaceClass } from "./workspace-class";
65
63
  import { BillingMode } from "./billing-mode";
66
64
 
@@ -165,6 +163,7 @@ export interface GitpodServer extends JsonRpcServer<GitpodClient>, AdminServer,
165
163
  deleteSSHPublicKey(id: string): Promise<void>;
166
164
 
167
165
  // Teams
166
+ getTeam(teamId: string): Promise<Team>;
168
167
  getTeams(): Promise<Team[]>;
169
168
  getTeamMembers(teamId: string): Promise<TeamMemberInfo[]>;
170
169
  createTeam(name: string): Promise<Team>;
@@ -173,12 +172,7 @@ export interface GitpodServer extends JsonRpcServer<GitpodClient>, AdminServer,
173
172
  removeTeamMember(teamId: string, userId: string): Promise<void>;
174
173
  getGenericInvite(teamId: string): Promise<TeamMembershipInvite>;
175
174
  resetGenericInvite(inviteId: string): Promise<TeamMembershipInvite>;
176
- deleteTeam(teamId: string, userId: string): Promise<void>;
177
-
178
- // Admin Settings
179
- adminGetSettings(): Promise<InstallationAdminSettings>;
180
- adminUpdateSettings(settings: InstallationAdminSettings): Promise<void>;
181
- adminGetTelemetryData(): Promise<TelemetryData>;
175
+ deleteTeam(teamId: string): Promise<void>;
182
176
 
183
177
  // Projects
184
178
  getProviderRepositoriesForUser(params: GetProviderRepositoriesParams): Promise<ProviderRepository[]>;
@@ -227,16 +221,6 @@ export interface GitpodServer extends JsonRpcServer<GitpodClient>, AdminServer,
227
221
  */
228
222
  getSnapshots(workspaceID: string): Promise<string[]>;
229
223
 
230
- /**
231
- * stores/updates layout information for the given workspace
232
- */
233
- storeLayout(workspaceId: string, layoutData: string): Promise<void>;
234
-
235
- /**
236
- * retrieves layout information for the given workspace
237
- */
238
- getLayout(workspaceId: string): Promise<string | undefined>;
239
-
240
224
  guessGitTokenScopes(params: GuessGitTokenScopesParams): Promise<GuessedGitTokenScopes>;
241
225
 
242
226
  /**
@@ -288,14 +272,16 @@ export interface GitpodServer extends JsonRpcServer<GitpodClient>, AdminServer,
288
272
  getStripeSetupIntentClientSecret(): Promise<string>;
289
273
  findStripeSubscriptionId(attributionId: string): Promise<string | undefined>;
290
274
  createStripeCustomerIfNeeded(attributionId: string, currency: string): Promise<void>;
291
- subscribeToStripe(attributionId: string, setupIntentId: string): Promise<void>;
275
+ subscribeToStripe(attributionId: string, setupIntentId: string, usageLimit: number): Promise<number | undefined>;
292
276
  getStripePortalUrl(attributionId: string): Promise<string>;
293
- getUsageLimit(attributionId: string): Promise<number | undefined>;
277
+ getCostCenter(attributionId: string): Promise<CostCenterJSON | undefined>;
294
278
  setUsageLimit(attributionId: string, usageLimit: number): Promise<void>;
279
+ getUsageBalance(attributionId: string): Promise<number>;
295
280
 
296
281
  listUsage(req: ListUsageRequest): Promise<ListUsageResponse>;
297
282
 
298
283
  setUsageAttribution(usageAttribution: string): Promise<void>;
284
+ listAvailableUsageAttributionIds(): Promise<string[]>;
299
285
 
300
286
  getBillingModeForUser(): Promise<BillingMode>;
301
287
  getBillingModeForTeam(teamId: string): Promise<BillingMode>;
@@ -430,7 +416,10 @@ export namespace GitpodServer {
430
416
  }
431
417
  export interface CreateWorkspaceOptions {
432
418
  contextUrl: string;
433
- mode?: CreateWorkspaceMode;
419
+ // whether running workspaces on the same context should be ignored. If false (default) users will be asked.
420
+ ignoreRunningWorkspaceOnSameCommit?: boolean;
421
+ ignoreRunningPrebuild?: boolean;
422
+ allowUsingPreviousPrebuilds?: boolean;
434
423
  forceDefaultConfig?: boolean;
435
424
  }
436
425
  export interface StartWorkspaceOptions {
@@ -438,7 +427,6 @@ export namespace GitpodServer {
438
427
  }
439
428
  export interface TakeSnapshotOptions {
440
429
  workspaceId: string;
441
- layoutData?: string;
442
430
  /* this is here to enable backwards-compatibility and untangling rollout between workspace, IDE and meta */
443
431
  dontWait?: boolean;
444
432
  }
@@ -87,7 +87,7 @@ export interface IDEOption {
87
87
  label?: string;
88
88
 
89
89
  /**
90
- * Notes to the IDE option that are renderd in the preferences when a user
90
+ * Notes to the IDE option that are rendered in the preferences when a user
91
91
  * chooses this IDE.
92
92
  */
93
93
  notes?: string[];
@@ -126,4 +126,14 @@ export interface IDEOption {
126
126
  * The latest plugin image ref for the latest IDE image, this image ref always resolve to digest.
127
127
  */
128
128
  pluginLatestImage?: string;
129
+
130
+ /**
131
+ * ImageVersion the semantic version of the IDE image.
132
+ */
133
+ imageVersion?: string;
134
+
135
+ /**
136
+ * LatestImageVersion the semantic version of the latest IDE image.
137
+ */
138
+ latestImageVersion?: string;
129
139
  }
package/src/index.ts CHANGED
@@ -13,7 +13,6 @@ export * from "./license-protocol";
13
13
  export * from "./workspace-instance";
14
14
  export * from "./permission";
15
15
  export * from "./admin-protocol";
16
- export * from "./email-protocol";
17
16
  export * from "./headless-workspace-log";
18
17
  export * from "./context-url";
19
18
  export * from "./teams-projects-protocol";
@@ -14,6 +14,7 @@ export class PrometheusClientCallMetrics implements IClientCallMetrics {
14
14
  readonly sentCounter: prometheusClient.Counter<string>;
15
15
  readonly receivedCounter: prometheusClient.Counter<string>;
16
16
  readonly handledCounter: prometheusClient.Counter<string>;
17
+ readonly handledSecondsHistogram: prometheusClient.Histogram<string>;
17
18
 
18
19
  constructor() {
19
20
  this.startedCounter = new prometheusClient.Counter({
@@ -40,6 +41,12 @@ export class PrometheusClientCallMetrics implements IClientCallMetrics {
40
41
  labelNames: ["grpc_service", "grpc_method", "grpc_type", "grpc_code"],
41
42
  registers: [prometheusClient.register],
42
43
  });
44
+ this.handledSecondsHistogram = new prometheusClient.Histogram({
45
+ name: "grpc_client_handling_seconds",
46
+ help: "Histogram of response latency (seconds) of the gRPC until it is finished by the application.",
47
+ labelNames: ["grpc_service", "grpc_method", "grpc_type", "grpc_code"],
48
+ registers: [prometheusClient.register],
49
+ });
43
50
  }
44
51
 
45
52
  started(labels: IGrpcCallMetricsLabels): void {
@@ -74,4 +81,14 @@ export class PrometheusClientCallMetrics implements IClientCallMetrics {
74
81
  grpc_code: labels.code,
75
82
  });
76
83
  }
84
+
85
+ startHandleTimer(
86
+ labels: IGrpcCallMetricsLabelsWithCode,
87
+ ): (labels?: Partial<Record<string, string | number>> | undefined) => number {
88
+ return this.handledSecondsHistogram.startTimer({
89
+ grpc_service: labels.service,
90
+ grpc_method: labels.method,
91
+ grpc_type: labels.type,
92
+ });
93
+ }
77
94
  }
@@ -35,12 +35,18 @@ export namespace ErrorCodes {
35
35
  // 430 Repository not whitelisted (custom status code)
36
36
  export const REPOSITORY_NOT_WHITELISTED = 430;
37
37
 
38
+ // 440 Prebuilds now always require a project (custom status code)
39
+ export const PROJECT_REQUIRED = 440;
40
+
38
41
  // 450 Payment error
39
42
  export const PAYMENT_ERROR = 450;
40
43
 
41
44
  // 451 Out of credits
42
45
  export const PAYMENT_SPENDING_LIMIT_REACHED = 451;
43
46
 
47
+ // 451 Error creating a subscription
48
+ export const SUBSCRIPTION_ERROR = 452;
49
+
44
50
  // 455 Invalid cost center (custom status code)
45
51
  export const INVALID_COST_CENTER = 455;
46
52
 
package/src/plans.ts CHANGED
@@ -131,7 +131,7 @@ export namespace Plans {
131
131
  githubPlanNumber: 1,
132
132
 
133
133
  type: "free",
134
- name: "Open Source",
134
+ name: "Free",
135
135
  currency: "USD",
136
136
  pricePerMonth: 0,
137
137
  hoursPerMonth: 100,
@@ -146,7 +146,7 @@ export namespace Plans {
146
146
  githubPlanNumber: 5,
147
147
 
148
148
  type: "free-50",
149
- name: "Open Source",
149
+ name: "Free",
150
150
  currency: "USD",
151
151
  pricePerMonth: 0,
152
152
  hoursPerMonth: 50,
package/src/protocol.ts CHANGED
@@ -8,7 +8,6 @@ import { WorkspaceInstance, PortVisibility } from "./workspace-instance";
8
8
  import { RoleOrPermission } from "./permission";
9
9
  import { Project } from "./teams-projects-protocol";
10
10
  import { createHash } from "crypto";
11
- import { AttributionId } from "./attribution";
12
11
 
13
12
  export interface UserInfo {
14
13
  name?: string;
@@ -294,17 +293,13 @@ export type BillingTier = "paid" | "free";
294
293
  */
295
294
  export const WorkspaceFeatureFlags = {
296
295
  full_workspace_backup: undefined,
297
- persistent_volume_claim: undefined,
298
- protected_secrets: undefined,
299
296
  workspace_class_limiting: undefined,
300
297
  workspace_connection_limiting: undefined,
298
+ workspace_psi: undefined,
301
299
  };
302
300
  export type NamedWorkspaceFeatureFlag = keyof typeof WorkspaceFeatureFlags;
303
301
  export namespace NamedWorkspaceFeatureFlag {
304
- export const WORKSPACE_PERSISTED_FEATTURE_FLAGS: NamedWorkspaceFeatureFlag[] = [
305
- "full_workspace_backup",
306
- "persistent_volume_claim",
307
- ];
302
+ export const WORKSPACE_PERSISTED_FEATTURE_FLAGS: NamedWorkspaceFeatureFlag[] = ["full_workspace_backup"];
308
303
  export function isWorkspacePersisted(ff: NamedWorkspaceFeatureFlag): boolean {
309
304
  return WORKSPACE_PERSISTED_FEATTURE_FLAGS.includes(ff);
310
305
  }
@@ -471,7 +466,7 @@ export interface UserSSHPublicKey extends SSHPublicKeyValue {
471
466
  lastUsedTime?: string;
472
467
  }
473
468
 
474
- export type UserSSHPublicKeyValue = Omit<UserSSHPublicKey, "key" | "userId">;
469
+ export type UserSSHPublicKeyValue = Omit<UserSSHPublicKey, "userId">;
475
470
 
476
471
  export namespace SSHPublicKeyValue {
477
472
  export function validate(value: SSHPublicKeyValue): string | undefined {
@@ -639,6 +634,7 @@ export interface PendingGithubEvent {
639
634
  creationDate: Date;
640
635
  type: string;
641
636
  event: string;
637
+ deleted: boolean;
642
638
  }
643
639
 
644
640
  export interface Snapshot {
@@ -647,26 +643,12 @@ export interface Snapshot {
647
643
  availableTime?: string;
648
644
  originalWorkspaceId: string;
649
645
  bucketId: string;
650
- layoutData?: string;
651
646
  state: SnapshotState;
652
647
  message?: string;
653
648
  }
654
649
 
655
- export interface VolumeSnapshot {
656
- id: string;
657
- workspaceId: string;
658
- creationTime: string;
659
- volumeHandle: string;
660
- }
661
-
662
650
  export type SnapshotState = "pending" | "available" | "error";
663
651
 
664
- export interface LayoutData {
665
- workspaceId: string;
666
- lastUpdatedTime: string;
667
- layoutData: string;
668
- }
669
-
670
652
  export interface Workspace {
671
653
  id: string;
672
654
  creationTime: string;
@@ -801,6 +783,10 @@ export interface JetBrainsConfig {
801
783
  goland?: JetBrainsProductConfig;
802
784
  pycharm?: JetBrainsProductConfig;
803
785
  phpstorm?: JetBrainsProductConfig;
786
+ rubymine?: JetBrainsProductConfig;
787
+ webstorm?: JetBrainsProductConfig;
788
+ rider?: JetBrainsProductConfig;
789
+ clion?: JetBrainsProductConfig;
804
790
  }
805
791
  export interface JetBrainsProductConfig {
806
792
  prebuilds?: JetBrainsPrebuilds;
@@ -1115,14 +1101,17 @@ export namespace SnapshotContext {
1115
1101
  }
1116
1102
  }
1117
1103
 
1118
- export interface StartPrebuildContext extends WorkspaceContext {
1119
- actual: WorkspaceContext;
1104
+ export interface WithCommitHistory {
1120
1105
  commitHistory?: string[];
1121
1106
  additionalRepositoryCommitHistories?: {
1122
1107
  cloneUrl: string;
1123
1108
  commitHistory: string[];
1124
1109
  }[];
1125
- project?: Project;
1110
+ }
1111
+
1112
+ export interface StartPrebuildContext extends WorkspaceContext, WithCommitHistory {
1113
+ actual: WorkspaceContext;
1114
+ project: Project;
1126
1115
  branch?: string;
1127
1116
  }
1128
1117
 
@@ -1204,6 +1193,16 @@ export namespace AdditionalContentContext {
1204
1193
  }
1205
1194
  }
1206
1195
 
1196
+ export interface OpenPrebuildContext extends WorkspaceContext {
1197
+ openPrebuildID: string;
1198
+ }
1199
+
1200
+ export namespace OpenPrebuildContext {
1201
+ export function is(ctx: any): ctx is OpenPrebuildContext {
1202
+ return "openPrebuildID" in ctx;
1203
+ }
1204
+ }
1205
+
1207
1206
  export interface CommitContext extends WorkspaceContext, GitCheckoutInfo {
1208
1207
  /** @deprecated Moved to .repository.cloneUrl, left here for backwards-compatibility for old workspace contextes in the DB */
1209
1208
  cloneUrl?: string;
@@ -1367,17 +1366,6 @@ export interface WorkspaceCreationResult {
1367
1366
  }
1368
1367
  export type RunningWorkspacePrebuildStarting = "queued" | "starting" | "running";
1369
1368
 
1370
- export enum CreateWorkspaceMode {
1371
- // Default returns a running prebuild if there is any, otherwise creates a new workspace (using a prebuild if one is available)
1372
- Default = "default",
1373
- // ForceNew creates a new workspace irrespective of any running prebuilds. This mode is guaranteed to actually create a workspace - but may degrade user experience as currently runnig prebuilds are ignored.
1374
- ForceNew = "force-new",
1375
- // UsePrebuild polls the database waiting for a currently running prebuild to become available. This mode exists to handle the db-sync delay.
1376
- UsePrebuild = "use-prebuild",
1377
- // SelectIfRunning returns a list of currently running workspaces for the context URL if there are any, otherwise falls back to Default mode
1378
- SelectIfRunning = "select-if-running",
1379
- }
1380
-
1381
1369
  export namespace WorkspaceCreationResult {
1382
1370
  export function is(data: any): data is WorkspaceCreationResult {
1383
1371
  return (
@@ -1512,17 +1500,6 @@ export interface Terms {
1512
1500
  }
1513
1501
 
1514
1502
  export interface StripeConfig {
1515
- usageProductPriceIds: { [currency: string]: string };
1516
- individualUsagePriceIds?: { [currency: string]: string };
1517
- teamUsagePriceIds?: { [currency: string]: string };
1518
- }
1519
-
1520
- export type BillingStrategy = "other" | "stripe";
1521
- export interface CostCenter {
1522
- readonly id: AttributionId;
1523
- /**
1524
- * Unit: credits
1525
- */
1526
- spendingLimit: number;
1527
- billingStrategy: BillingStrategy;
1503
+ individualUsagePriceIds: { [currency: string]: string };
1504
+ teamUsagePriceIds: { [currency: string]: string };
1528
1505
  }
@@ -4,7 +4,7 @@
4
4
  * See License-AGPL.txt in the project root for license information.
5
5
  */
6
6
 
7
- import { PrebuiltWorkspaceState } from "./protocol";
7
+ import { PrebuiltWorkspaceState, WorkspaceClasses } from "./protocol";
8
8
  import { v4 as uuidv4 } from "uuid";
9
9
  import { DeepPartial } from "./util/deep-partial";
10
10
  import { WebhookEvent } from "./webhook-event";
@@ -15,8 +15,13 @@ export interface ProjectConfig {
15
15
 
16
16
  export interface ProjectSettings {
17
17
  useIncrementalPrebuilds?: boolean;
18
- usePersistentVolumeClaim?: boolean;
19
18
  keepOutdatedPrebuildsRunning?: boolean;
19
+ // whether new workspaces can start on older prebuilds and incrementally update
20
+ allowUsingPreviousPrebuilds?: boolean;
21
+ // how many commits in the commit history a prebuild is good (undefined and 0 means every commit is prebuilt)
22
+ prebuildEveryNthCommit?: number;
23
+ // preferred workspace classes
24
+ workspaceClasses?: WorkspaceClasses;
20
25
  }
21
26
 
22
27
  export interface Project {
@@ -45,6 +50,7 @@ export namespace Project {
45
50
 
46
51
  export interface Overview {
47
52
  branches: BranchDetails[];
53
+ isConsideredInactive?: boolean;
48
54
  }
49
55
 
50
56
  export namespace Overview {
@@ -119,7 +125,6 @@ export interface StartPrebuildResult {
119
125
  wsid: string;
120
126
  done: boolean;
121
127
  }
122
-
123
128
  export interface Team {
124
129
  id: string;
125
130
  name: string;
package/src/usage.ts CHANGED
@@ -69,3 +69,17 @@ export interface InvoiceUsageData {
69
69
  startDate: string;
70
70
  endDate: string;
71
71
  }
72
+
73
+ export interface CostCenterJSON {
74
+ attributionId: string;
75
+ spendingLimit: number;
76
+ billingStrategy: CostCenter_BillingStrategy;
77
+ nextBillingTime?: string;
78
+ billingCycleStart?: string;
79
+ }
80
+
81
+ export enum CostCenter_BillingStrategy {
82
+ BILLING_STRATEGY_STRIPE = "BILLING_STRATEGY_STRIPE",
83
+ BILLING_STRATEGY_OTHER = "BILLING_STRATEGY_OTHER",
84
+ UNRECOGNIZED = "UNRECOGNIZED",
85
+ }
package/src/util/grpc.ts CHANGED
@@ -36,6 +36,9 @@ export interface IClientCallMetrics {
36
36
  sent(labels: IGrpcCallMetricsLabels): void;
37
37
  received(labels: IGrpcCallMetricsLabels): void;
38
38
  handled(labels: IGrpcCallMetricsLabelsWithCode): void;
39
+ startHandleTimer(
40
+ labels: IGrpcCallMetricsLabels,
41
+ ): (labels?: Partial<Record<string, string | number>> | undefined) => number;
39
42
  }
40
43
 
41
44
  export function getGrpcMethodType(requestStream: boolean, responseStream: boolean): GrpcMethodType {
@@ -49,6 +49,8 @@ export function prometheusClientMiddleware(metrics: IClientCallMetrics): ClientM
49
49
 
50
50
  metrics.started(labels);
51
51
 
52
+ const stopTimer = metrics.startHandleTimer(labels);
53
+
52
54
  let settled = false;
53
55
  let status: Status = Status.OK;
54
56
 
@@ -87,6 +89,7 @@ export function prometheusClientMiddleware(metrics: IClientCallMetrics): ClientM
87
89
  if (!settled) {
88
90
  status = Status.CANCELLED;
89
91
  }
92
+ stopTimer({ grpc_code: Status[status] });
90
93
  metrics.handled({ ...labels, code: Status[status] });
91
94
  }
92
95
  };
@@ -10,5 +10,5 @@ export interface SupportedWorkspaceClass {
10
10
  displayName: string;
11
11
  description: string;
12
12
  powerups: number;
13
- isSelected: boolean;
13
+ isDefault: boolean;
14
14
  }
@@ -15,6 +15,10 @@ export interface WorkspaceCluster {
15
15
  // Must be identical to the installationShortname of the cluster it represents!
16
16
  name: string;
17
17
 
18
+ // The name of the application cluster to which this cluster should be registered.
19
+ // The name can be at most 60 characters.
20
+ applicationCluster: string;
21
+
18
22
  // URL of the cluster's ws-manager API
19
23
  url: string;
20
24
 
@@ -86,20 +90,21 @@ export interface WorkspaceClusterDB {
86
90
  * Deletes the cluster identified by this name, if any.
87
91
  * @param name
88
92
  */
89
- deleteByName(name: string): Promise<void>;
93
+ deleteByName(name: string, applicationCluster: string): Promise<void>;
90
94
 
91
95
  /**
92
96
  * Finds a WorkspaceCluster with the given name. If there is none, `undefined` is returned.
93
97
  * @param name
94
98
  */
95
- findByName(name: string): Promise<WorkspaceCluster | undefined>;
99
+ findByName(name: string, applicationCluster: string): Promise<WorkspaceCluster | undefined>;
96
100
 
97
101
  /**
98
102
  * Lists all WorkspaceClusterWoTls for which the given predicate is true (does not return TLS for size/speed concerns)
99
103
  * @param predicate
100
104
  */
101
- findFiltered(predicate: DeepPartial<WorkspaceClusterFilter>): Promise<WorkspaceClusterWoTLS[]>;
102
- }
103
- export interface WorkspaceClusterFilter extends Pick<WorkspaceCluster, "state" | "govern" | "url"> {
104
- minScore: number;
105
+ findFiltered(predicate: WorkspaceClusterFilter): Promise<WorkspaceClusterWoTLS[]>;
105
106
  }
107
+
108
+ export type WorkspaceClusterFilter = Pick<WorkspaceCluster, "applicationCluster"> &
109
+ DeepPartial<Pick<WorkspaceCluster, "name" | "state" | "govern" | "url">> &
110
+ Partial<{ minScore: number }>;
@@ -243,10 +243,16 @@ export interface WorkspaceInstanceConfiguration {
243
243
  // ideImage is the ref of the IDE image this instance uses.
244
244
  ideImage: string;
245
245
 
246
+ // ideImageLayers are images needed for the ide to run,
247
+ // including ide-desktop, desktop-plugin and so on
248
+ ideImageLayers?: string[];
249
+
246
250
  // desktopIdeImage is the ref of the desktop IDE image this instance uses.
251
+ // @deprected: replaced with the ideImageLayers field
247
252
  desktopIdeImage?: string;
248
253
 
249
254
  // desktopIdePluginImage is the ref of the desktop IDE plugin image this instance uses.
255
+ // @deprected: replaced with the desktopIdePluginImage field
250
256
  desktopIdePluginImage?: string;
251
257
 
252
258
  // supervisorImage is the ref of the supervisor image this instance uses.
package/src/wsready.ts CHANGED
@@ -4,15 +4,21 @@
4
4
  * See License-AGPL.txt in the project root for license information.
5
5
  */
6
6
 
7
- // generated using github.com/32leaves/bel on 2022-07-21 07:41:48.081573085 +0000 UTC m=+0.009109470
7
+ // generated using github.com/32leaves/bel on 2022-11-25 13:39:08.995865257 +0000 UTC m=+0.015035221
8
8
  // DO NOT MODIFY
9
9
 
10
- export interface WorkspaceReadyMessage {
11
- source: WorkspaceInitSource;
12
- }
13
-
14
10
  export enum WorkspaceInitSource {
15
11
  WorkspaceInitFromBackup = "from-backup",
16
12
  WorkspaceInitFromPrebuild = "from-prebuild",
17
13
  WorkspaceInitFromOther = "from-other",
18
14
  }
15
+ export interface WorkspaceReadyMessage {
16
+ source: WorkspaceInitSource;
17
+ metrics: InitializerMetric[];
18
+ }
19
+
20
+ export interface InitializerMetric {
21
+ type: string;
22
+ duration: number;
23
+ size: number;
24
+ }
@@ -1,49 +0,0 @@
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
- export declare type EMailState = "scheduledInternal" | "scheduledSendgrid";
7
- export interface EMailStatus {
8
- /** The time the email entry was inserted into the DB */
9
- scheduledInternalTime: string;
10
- /** The time the email state transitioned to "scheduledSendgrid" */
11
- scheduledSendgridTime?: string;
12
- /** In case of any errors during sending with Sendgrid it gets noted here */
13
- error?: string;
14
- }
15
- export declare namespace EMailStatus {
16
- function getState(status: EMailStatus): EMailState;
17
- }
18
- export interface EmailAddress {
19
- name?: string;
20
- email: string;
21
- }
22
- export interface EMailParameters {
23
- /** undefined means default from template */
24
- subject?: string;
25
- /** The sender address */
26
- senderAddress: string | EmailAddress;
27
- /** The replyTo address */
28
- replyToAddress?: string | EmailAddress;
29
- /** The SendGrid template id */
30
- templateId: string;
31
- /** The parameters for the SendGrid template */
32
- templateParams: {};
33
- }
34
- export declare type EMail = {
35
- /** The unique id of this email (uuid/v4 for now) */
36
- uid: string;
37
- /** The id of the user this email was sent to */
38
- userId: string;
39
- /** The address this email was sent to */
40
- recipientAddress: string;
41
- /** Which campaign scheduled this email */
42
- campaignId: string;
43
- /** The parameters this email was sent with (template id, template params, etc) */
44
- params: EMailParameters;
45
- } & EMailStatus;
46
- export declare namespace EMail {
47
- const create: (ts: Omit<EMail, "uid">) => EMail;
48
- }
49
- //# sourceMappingURL=email-protocol.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"email-protocol.d.ts","sourceRoot":"","sources":["../src/email-protocol.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,oBAAY,UAAU,GAAG,mBAAmB,GAAG,mBAAmB,CAAC;AAEnE,MAAM,WAAW,WAAW;IACxB,wDAAwD;IACxD,qBAAqB,EAAE,MAAM,CAAC;IAC9B,mEAAmE;IACnE,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,4EAA4E;IAC5E,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AACD,yBAAiB,WAAW,CAAC;IACzB,SAAgB,QAAQ,CAAC,MAAM,EAAE,WAAW,GAAG,UAAU,CAKxD;CACJ;AAED,MAAM,WAAW,YAAY;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,eAAe;IAC5B,4CAA4C;IAC5C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,yBAAyB;IACzB,aAAa,EAAE,MAAM,GAAG,YAAY,CAAC;IACrC,0BAA0B;IAC1B,cAAc,CAAC,EAAE,MAAM,GAAG,YAAY,CAAC;IACvC,+BAA+B;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,+CAA+C;IAC/C,cAAc,EAAE,EAAE,CAAC;CACtB;AAED,oBAAY,KAAK,GAAG;IAChB,oDAAoD;IACpD,GAAG,EAAE,MAAM,CAAC;IACZ,gDAAgD;IAChD,MAAM,EAAE,MAAM,CAAC;IACf,yCAAyC;IACzC,gBAAgB,EAAE,MAAM,CAAC;IACzB,2CAA2C;IAC3C,UAAU,EAAE,MAAM,CAAC;IACnB,kFAAkF;IAClF,MAAM,EAAE,eAAe,CAAC;CAC3B,GAAG,WAAW,CAAC;AAEhB,yBAAiB,KAAK,CAAC;IACZ,MAAM,MAAM,OAAQ,KAAK,KAAK,EAAE,KAAK,CAAC,KAAG,KAI/C,CAAC;CACL"}
@@ -1,28 +0,0 @@
1
- "use strict";
2
- /**
3
- * Copyright (c) 2020 Gitpod GmbH. All rights reserved.
4
- * Licensed under the GNU Affero General Public License (AGPL).
5
- * See License-AGPL.txt in the project root for license information.
6
- */
7
- Object.defineProperty(exports, "__esModule", { value: true });
8
- exports.EMail = exports.EMailStatus = void 0;
9
- const uuid_1 = require("uuid");
10
- var EMailStatus;
11
- (function (EMailStatus) {
12
- function getState(status) {
13
- if (status.scheduledSendgridTime) {
14
- return "scheduledSendgrid";
15
- }
16
- return "scheduledInternal";
17
- }
18
- EMailStatus.getState = getState;
19
- })(EMailStatus = exports.EMailStatus || (exports.EMailStatus = {}));
20
- var EMail;
21
- (function (EMail) {
22
- EMail.create = (ts) => {
23
- const withId = ts;
24
- withId.uid = (0, uuid_1.v4)();
25
- return withId;
26
- };
27
- })(EMail = exports.EMail || (exports.EMail = {}));
28
- //# sourceMappingURL=email-protocol.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"email-protocol.js","sourceRoot":"","sources":["../src/email-protocol.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAEH,+BAAoC;AAYpC,IAAiB,WAAW,CAO3B;AAPD,WAAiB,WAAW;IACxB,SAAgB,QAAQ,CAAC,MAAmB;QACxC,IAAI,MAAM,CAAC,qBAAqB,EAAE;YAC9B,OAAO,mBAAmB,CAAC;SAC9B;QACD,OAAO,mBAAmB,CAAC;IAC/B,CAAC;IALe,oBAAQ,WAKvB,CAAA;AACL,CAAC,EAPgB,WAAW,GAAX,mBAAW,KAAX,mBAAW,QAO3B;AAiCD,IAAiB,KAAK,CAMrB;AAND,WAAiB,KAAK;IACL,YAAM,GAAG,CAAC,EAAsB,EAAS,EAAE;QACpD,MAAM,MAAM,GAAG,EAAW,CAAC;QAC3B,MAAM,CAAC,GAAG,GAAG,IAAA,SAAM,GAAE,CAAC;QACtB,OAAO,MAAM,CAAC;IAClB,CAAC,CAAC;AACN,CAAC,EANgB,KAAK,GAAL,aAAK,KAAL,aAAK,QAMrB"}