@gitpod/gitpod-protocol 0.1.5-prs-dazzlev2-test.3 → 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.
- package/data/gitpod-schema.json +181 -4
- package/lib/accounting-protocol.d.ts +17 -10
- package/lib/accounting-protocol.d.ts.map +1 -1
- package/lib/accounting-protocol.js +30 -32
- package/lib/accounting-protocol.js.map +1 -1
- package/lib/admin-protocol.d.ts +9 -0
- package/lib/admin-protocol.d.ts.map +1 -1
- package/lib/admin-protocol.js.map +1 -1
- package/lib/analytics.d.ts +4 -5
- package/lib/analytics.d.ts.map +1 -1
- package/lib/analytics.js.map +1 -1
- package/lib/auth.d.ts.map +1 -1
- package/lib/context-url.d.ts +17 -5
- package/lib/context-url.d.ts.map +1 -1
- package/lib/context-url.js +57 -6
- package/lib/context-url.js.map +1 -1
- package/lib/context-url.spec.d.ts +2 -0
- package/lib/context-url.spec.d.ts.map +1 -1
- package/lib/context-url.spec.js +40 -4
- package/lib/context-url.spec.js.map +1 -1
- package/lib/email-protocol.d.ts +1 -1
- package/lib/email-protocol.d.ts.map +1 -1
- package/lib/email-protocol.js.map +1 -1
- package/lib/encryption/container-module.d.ts.map +1 -1
- package/lib/encryption/container-module.js +1 -1
- package/lib/encryption/container-module.js.map +1 -1
- package/lib/encryption/encryption-engine.d.ts.map +1 -1
- package/lib/encryption/encryption-engine.js +7 -7
- package/lib/encryption/encryption-engine.js.map +1 -1
- package/lib/encryption/encryption-engine.spec.d.ts.map +1 -1
- package/lib/encryption/encryption-engine.spec.js +2 -3
- package/lib/encryption/encryption-engine.spec.js.map +1 -1
- package/lib/encryption/encryption-service.d.ts.map +1 -1
- package/lib/encryption/encryption-service.js +1 -1
- package/lib/encryption/encryption-service.js.map +1 -1
- package/lib/encryption/key-provider.d.ts.map +1 -1
- package/lib/encryption/key-provider.js +7 -9
- package/lib/encryption/key-provider.js.map +1 -1
- package/lib/env.d.ts +0 -5
- package/lib/env.d.ts.map +1 -1
- package/lib/env.js +1 -20
- package/lib/env.js.map +1 -1
- package/lib/experiments/always-default.d.ts +8 -0
- package/lib/experiments/always-default.d.ts.map +1 -0
- package/lib/experiments/always-default.js +20 -0
- package/lib/experiments/always-default.js.map +1 -0
- package/lib/experiments/configcat-server.d.ts +8 -0
- package/lib/experiments/configcat-server.d.ts.map +1 -0
- package/lib/experiments/configcat-server.js +34 -0
- package/lib/experiments/configcat-server.js.map +1 -0
- package/lib/experiments/configcat.d.ts +21 -0
- package/lib/experiments/configcat.d.ts.map +1 -0
- package/lib/experiments/configcat.js +47 -0
- package/lib/experiments/configcat.js.map +1 -0
- package/lib/experiments/types.d.ts +19 -0
- package/lib/experiments/types.d.ts.map +1 -0
- package/lib/{theia-plugins.js → experiments/types.js} +2 -2
- package/lib/experiments/types.js.map +1 -0
- package/lib/gitpod-file-parser.d.ts.map +1 -1
- package/lib/gitpod-file-parser.js +6 -6
- package/lib/gitpod-file-parser.js.map +1 -1
- package/lib/gitpod-file-parser.spec.js +42 -39
- package/lib/gitpod-file-parser.spec.js.map +1 -1
- package/lib/gitpod-service.d.ts +43 -26
- package/lib/gitpod-service.d.ts.map +1 -1
- package/lib/gitpod-service.js +39 -32
- package/lib/gitpod-service.js.map +1 -1
- package/lib/headless-workspace-log.d.ts +1 -0
- package/lib/headless-workspace-log.d.ts.map +1 -1
- package/lib/headless-workspace-log.js +2 -1
- package/lib/headless-workspace-log.js.map +1 -1
- package/lib/ide-frontend-service.d.ts +1 -1
- package/lib/ide-protocol.d.ts +10 -6
- package/lib/ide-protocol.d.ts.map +1 -1
- package/lib/index.d.ts +16 -16
- package/lib/installation-admin-protocol.d.ts +9 -0
- package/lib/installation-admin-protocol.d.ts.map +1 -1
- package/lib/installation-admin-protocol.js +3 -2
- package/lib/installation-admin-protocol.js.map +1 -1
- package/lib/license-protocol.d.ts +7 -0
- package/lib/license-protocol.d.ts.map +1 -1
- package/lib/license-protocol.js.map +1 -1
- package/lib/messaging/browser/connection.d.ts +1 -1
- package/lib/messaging/browser/connection.d.ts.map +1 -1
- package/lib/messaging/browser/connection.js +19 -19
- package/lib/messaging/browser/connection.js.map +1 -1
- package/lib/messaging/browser/window-connection.d.ts +4 -4
- package/lib/messaging/browser/window-connection.d.ts.map +1 -1
- package/lib/messaging/browser/window-connection.js +9 -6
- package/lib/messaging/browser/window-connection.js.map +1 -1
- package/lib/messaging/client-call-metrics.d.ts +2 -2
- package/lib/messaging/client-call-metrics.d.ts.map +1 -1
- package/lib/messaging/client-call-metrics.js +20 -20
- package/lib/messaging/client-call-metrics.js.map +1 -1
- package/lib/messaging/error.d.ts +3 -0
- package/lib/messaging/error.d.ts.map +1 -1
- package/lib/messaging/error.js +6 -0
- package/lib/messaging/error.js.map +1 -1
- package/lib/messaging/handler.d.ts.map +1 -1
- package/lib/messaging/handler.js +1 -1
- package/lib/messaging/node/connection.js +8 -8
- package/lib/messaging/node/connection.js.map +1 -1
- package/lib/messaging/proxy-factory.d.ts +1 -1
- package/lib/messaging/proxy-factory.d.ts.map +1 -1
- package/lib/messaging/proxy-factory.js +7 -9
- package/lib/messaging/proxy-factory.js.map +1 -1
- package/lib/payment-protocol.d.ts.map +1 -1
- package/lib/payment-protocol.js +1 -1
- package/lib/payment-protocol.js.map +1 -1
- package/lib/permission.d.ts +9 -3
- package/lib/permission.d.ts.map +1 -1
- package/lib/permission.js +34 -25
- package/lib/permission.js.map +1 -1
- package/lib/plans.d.ts +3 -3
- package/lib/plans.d.ts.map +1 -1
- package/lib/plans.js +206 -171
- package/lib/plans.js.map +1 -1
- package/lib/protocol.d.ts +87 -38
- package/lib/protocol.d.ts.map +1 -1
- package/lib/protocol.js +166 -88
- package/lib/protocol.js.map +1 -1
- package/lib/snapshot-url.spec.js.map +1 -1
- package/lib/team-subscription-protocol.d.ts +21 -3
- package/lib/team-subscription-protocol.d.ts.map +1 -1
- package/lib/team-subscription-protocol.js +16 -5
- package/lib/team-subscription-protocol.js.map +1 -1
- package/lib/teams-projects-protocol.d.ts +11 -3
- package/lib/teams-projects-protocol.d.ts.map +1 -1
- package/lib/teams-projects-protocol.js +8 -1
- package/lib/teams-projects-protocol.js.map +1 -1
- package/lib/typings/globals.d.ts +2 -2
- package/lib/typings/globals.d.ts.map +1 -1
- package/lib/util/analytics.d.ts.map +1 -1
- package/lib/util/analytics.js +12 -3
- package/lib/util/analytics.js.map +1 -1
- package/lib/util/async-iterator.d.ts.map +1 -1
- package/lib/util/async-iterator.js +3 -3
- package/lib/util/async-iterator.js.map +1 -1
- package/lib/util/cancelable.js.map +1 -1
- package/lib/util/date-time.js +6 -6
- package/lib/util/date-time.js.map +1 -1
- package/lib/util/debug-app.d.ts +25 -0
- package/lib/util/debug-app.d.ts.map +1 -0
- package/lib/util/debug-app.js +100 -0
- package/lib/util/debug-app.js.map +1 -0
- package/lib/util/deferred.js.map +1 -1
- package/lib/util/disposable.d.ts.map +1 -1
- package/lib/util/disposable.js +2 -2
- package/lib/util/disposable.js.map +1 -1
- package/lib/util/event.d.ts.map +1 -1
- package/lib/util/event.js +5 -3
- package/lib/util/event.js.map +1 -1
- package/lib/util/garbage-collected-cache.d.ts.map +1 -1
- package/lib/util/garbage-collected-cache.js +1 -1
- package/lib/util/garbage-collected-cache.js.map +1 -1
- package/lib/util/generate-workspace-id.d.ts +5 -0
- package/lib/util/generate-workspace-id.d.ts.map +1 -1
- package/lib/util/generate-workspace-id.js +446 -442
- package/lib/util/generate-workspace-id.js.map +1 -1
- package/lib/util/generate-workspace-id.spec.js +18 -7
- package/lib/util/generate-workspace-id.spec.js.map +1 -1
- package/lib/util/gitpod-cookie.d.ts +1 -1
- package/lib/util/gitpod-cookie.d.ts.map +1 -1
- package/lib/util/gitpod-cookie.js +0 -3
- package/lib/util/gitpod-cookie.js.map +1 -1
- package/lib/util/gitpod-host-url.d.ts.map +1 -1
- package/lib/util/gitpod-host-url.js +31 -29
- package/lib/util/gitpod-host-url.js.map +1 -1
- package/lib/util/gitpod-host-url.spec.d.ts.map +1 -1
- package/lib/util/gitpod-host-url.spec.js +15 -5
- package/lib/util/gitpod-host-url.spec.js.map +1 -1
- package/lib/util/grpc.d.ts.map +1 -1
- package/lib/util/grpc.js.map +1 -1
- package/lib/util/jaeger-client-types.d.ts.map +1 -1
- package/lib/util/logging.d.ts +1 -1
- package/lib/util/logging.d.ts.map +1 -1
- package/lib/util/logging.js +23 -24
- package/lib/util/logging.js.map +1 -1
- package/lib/util/make-link.js +5 -5
- package/lib/util/make-link.js.map +1 -1
- package/lib/util/parse-workspace-id.d.ts.map +1 -1
- package/lib/util/parse-workspace-id.js +1 -2
- package/lib/util/parse-workspace-id.js.map +1 -1
- package/lib/util/parse-workspace-id.spec.d.ts.map +1 -1
- package/lib/util/parse-workspace-id.spec.js.map +1 -1
- package/lib/util/queue.spec.js +9 -6
- package/lib/util/queue.spec.js.map +1 -1
- package/lib/util/semaphore.d.ts.map +1 -1
- package/lib/util/semaphore.js.map +1 -1
- package/lib/util/skip-if.d.ts.map +1 -1
- package/lib/util/skip-if.js.map +1 -1
- package/lib/util/timeutil.d.ts +1 -0
- package/lib/util/timeutil.d.ts.map +1 -1
- package/lib/util/timeutil.js +9 -3
- package/lib/util/timeutil.js.map +1 -1
- package/lib/util/timeutil.spec.d.ts.map +1 -1
- package/lib/util/timeutil.spec.js.map +1 -1
- package/lib/util/tracing.d.ts +8 -8
- package/lib/util/tracing.d.ts.map +1 -1
- package/lib/util/tracing.js +19 -20
- package/lib/util/tracing.js.map +1 -1
- package/lib/util/tracing.spec.js +3 -3
- package/lib/util/tracing.spec.js.map +1 -1
- package/lib/util/workspace-port-authentication.d.ts +7 -7
- package/lib/util/workspace-port-authentication.d.ts.map +1 -1
- package/lib/util/workspace-port-authentication.js +8 -11
- package/lib/util/workspace-port-authentication.js.map +1 -1
- package/lib/workspace-cluster.d.ts +10 -8
- package/lib/workspace-cluster.d.ts.map +1 -1
- package/lib/workspace-cluster.js +16 -1
- package/lib/workspace-cluster.js.map +1 -1
- package/lib/workspace-instance.d.ts +37 -3
- package/lib/workspace-instance.d.ts.map +1 -1
- package/lib/wsready.d.ts +1 -1
- package/lib/wsready.d.ts.map +1 -1
- package/lib/wsready.js +2 -2
- package/package.json +10 -7
- package/pkg-yarn.lock +8 -6
- package/provenance-bundle.jsonl +1 -1
- package/src/accounting-protocol.ts +63 -51
- package/src/admin-protocol.ts +33 -20
- package/src/analytics.ts +26 -28
- package/src/auth.ts +2 -2
- package/src/context-url.spec.ts +37 -9
- package/src/context-url.ts +96 -40
- package/src/email-protocol.ts +5 -6
- package/src/encryption/container-module.ts +2 -3
- package/src/encryption/encryption-engine.spec.ts +9 -8
- package/src/encryption/encryption-engine.ts +14 -14
- package/src/encryption/encryption-service.ts +4 -5
- package/src/encryption/key-provider.ts +16 -19
- package/src/env.ts +0 -22
- package/src/experiments/always-default.ts +24 -0
- package/src/experiments/configcat-server.ts +37 -0
- package/src/experiments/configcat.ts +53 -0
- package/src/experiments/types.ts +32 -0
- package/src/gitpod-file-parser.spec.ts +55 -61
- package/src/gitpod-file-parser.ts +16 -17
- package/src/gitpod-service.ts +163 -108
- package/src/headless-workspace-log.ts +6 -4
- package/src/ide-frontend-service.ts +2 -2
- package/src/ide-protocol.ts +13 -8
- package/src/index.ts +16 -16
- package/src/installation-admin-protocol.ts +14 -4
- package/src/license-protocol.ts +12 -6
- package/src/messaging/browser/connection.ts +45 -47
- package/src/messaging/browser/window-connection.ts +39 -29
- package/src/messaging/client-call-metrics.ts +70 -71
- package/src/messaging/error.ts +10 -3
- package/src/messaging/handler.ts +6 -6
- package/src/messaging/node/connection.ts +8 -8
- package/src/messaging/proxy-factory.ts +23 -30
- package/src/oss-allowlist.ts +3 -3
- package/src/payment-protocol.ts +2 -2
- package/src/permission.ts +40 -32
- package/src/plans.ts +236 -189
- package/src/protocol.ts +350 -241
- package/src/snapshot-url.spec.ts +9 -7
- package/src/team-subscription-protocol.ts +57 -23
- package/src/teams-projects-protocol.ts +21 -9
- package/src/typings/globals.ts +4 -4
- package/src/util/analytics.ts +46 -24
- package/src/util/async-iterator.ts +4 -5
- package/src/util/cancelable.ts +3 -3
- package/src/util/date-time.ts +8 -8
- package/src/util/debug-app.ts +81 -0
- package/src/util/deferred.ts +6 -6
- package/src/util/disposable.ts +3 -6
- package/src/util/event.ts +9 -11
- package/src/util/garbage-collected-cache.ts +3 -6
- package/src/util/generate-workspace-id.spec.ts +26 -16
- package/src/util/generate-workspace-id.ts +460 -454
- package/src/util/gitpod-cookie.ts +8 -9
- package/src/util/gitpod-host-url.spec.ts +40 -13
- package/src/util/gitpod-host-url.ts +37 -34
- package/src/util/grpc.ts +1 -1
- package/src/util/jaeger-client-types.ts +2 -2
- package/src/util/logging.ts +49 -40
- package/src/util/make-link.ts +6 -7
- package/src/util/parse-workspace-id.spec.ts +17 -8
- package/src/util/parse-workspace-id.ts +5 -6
- package/src/util/queue.spec.ts +27 -25
- package/src/util/repeat.ts +1 -1
- package/src/util/semaphore.ts +4 -6
- package/src/util/skip-if.ts +9 -6
- package/src/util/timeutil.spec.ts +14 -15
- package/src/util/timeutil.ts +21 -11
- package/src/util/tracing.spec.ts +28 -23
- package/src/util/tracing.ts +58 -54
- package/src/util/workspace-port-authentication.ts +10 -13
- package/src/workspace-cluster.ts +26 -15
- package/src/workspace-instance.ts +68 -20
- package/src/wsready.ts +3 -3
- package/data/builtin-theia-plugins.json +0 -372
- package/lib/messaging/connection-error-handler.d.ts +0 -27
- package/lib/messaging/connection-error-handler.d.ts.map +0 -1
- package/lib/messaging/connection-error-handler.js +0 -34
- package/lib/messaging/connection-error-handler.js.map +0 -1
- package/lib/theia-plugins.d.ts +0 -11
- package/lib/theia-plugins.d.ts.map +0 -1
- package/lib/theia-plugins.js.map +0 -1
- package/lib/util/safe-promise.d.ts +0 -11
- package/lib/util/safe-promise.d.ts.map +0 -1
- package/lib/util/safe-promise.js +0 -31
- package/lib/util/safe-promise.js.map +0 -1
- package/src/messaging/connection-error-handler.ts +0 -62
- package/src/theia-plugins.ts +0 -11
- package/src/util/safe-promise.ts +0 -26
package/src/protocol.ts
CHANGED
|
@@ -7,26 +7,27 @@
|
|
|
7
7
|
import { WorkspaceInstance, PortVisibility } from "./workspace-instance";
|
|
8
8
|
import { RoleOrPermission } from "./permission";
|
|
9
9
|
import { Project } from "./teams-projects-protocol";
|
|
10
|
+
import { createHash } from "crypto";
|
|
10
11
|
|
|
11
12
|
export interface UserInfo {
|
|
12
|
-
name?: string
|
|
13
|
+
name?: string;
|
|
13
14
|
}
|
|
14
15
|
|
|
15
16
|
export interface User {
|
|
16
17
|
/** The user id */
|
|
17
|
-
id: string
|
|
18
|
+
id: string;
|
|
18
19
|
|
|
19
20
|
/** The timestamp when the user entry was created */
|
|
20
|
-
creationDate: string
|
|
21
|
+
creationDate: string;
|
|
21
22
|
|
|
22
|
-
avatarUrl?: string
|
|
23
|
+
avatarUrl?: string;
|
|
23
24
|
|
|
24
|
-
name?: string
|
|
25
|
+
name?: string;
|
|
25
26
|
|
|
26
27
|
/** Optional for backwards compatibility */
|
|
27
|
-
fullName?: string
|
|
28
|
+
fullName?: string;
|
|
28
29
|
|
|
29
|
-
identities: Identity[]
|
|
30
|
+
identities: Identity[];
|
|
30
31
|
|
|
31
32
|
/**
|
|
32
33
|
* Whether the user has been blocked to use our service, because of TOS violation for example.
|
|
@@ -48,34 +49,38 @@ export interface User {
|
|
|
48
49
|
|
|
49
50
|
export namespace User {
|
|
50
51
|
export function is(data: any): data is User {
|
|
51
|
-
return data
|
|
52
|
-
&& data.hasOwnProperty('id')
|
|
53
|
-
&& data.hasOwnProperty('identities')
|
|
52
|
+
return data && data.hasOwnProperty("id") && data.hasOwnProperty("identities");
|
|
54
53
|
}
|
|
55
54
|
export function getIdentity(user: User, authProviderId: string): Identity | undefined {
|
|
56
|
-
return user.identities.find(id => id.authProviderId === authProviderId);
|
|
55
|
+
return user.identities.find((id) => id.authProviderId === authProviderId);
|
|
57
56
|
}
|
|
58
57
|
export function censor(user: User): User {
|
|
59
58
|
const res = { ...user };
|
|
60
|
-
delete
|
|
61
|
-
res.identities = res.identities.map(i => {
|
|
62
|
-
delete
|
|
59
|
+
delete res.additionalData;
|
|
60
|
+
res.identities = res.identities.map((i) => {
|
|
61
|
+
delete i.tokens;
|
|
63
62
|
|
|
64
63
|
// The user field is not in the Identity shape, but actually exists on DBIdentity.
|
|
65
64
|
// Trying to push this object out via JSON RPC will fail because of the cyclic nature
|
|
66
65
|
// of this field.
|
|
67
|
-
delete (
|
|
66
|
+
delete (i as any).user;
|
|
68
67
|
return i;
|
|
69
68
|
});
|
|
70
69
|
return res;
|
|
71
70
|
}
|
|
72
|
-
|
|
73
|
-
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* Tries to return the primaryEmail of the first identity this user signed up with.
|
|
74
|
+
* @param user
|
|
75
|
+
* @returns A primaryEmail, or undefined if there is none.
|
|
76
|
+
*/
|
|
77
|
+
export function getPrimaryEmail(user: User): string | undefined {
|
|
78
|
+
const identities = user.identities.filter((i) => !!i.primaryEmail);
|
|
74
79
|
if (identities.length <= 0) {
|
|
75
|
-
|
|
80
|
+
return undefined;
|
|
76
81
|
}
|
|
77
82
|
|
|
78
|
-
return identities[0].primaryEmail
|
|
83
|
+
return identities[0].primaryEmail || undefined;
|
|
79
84
|
}
|
|
80
85
|
export function getName(user: User): string | undefined {
|
|
81
86
|
const name = user.fullName || user.name;
|
|
@@ -90,6 +95,47 @@ export namespace User {
|
|
|
90
95
|
}
|
|
91
96
|
return undefined;
|
|
92
97
|
}
|
|
98
|
+
|
|
99
|
+
export function hasPreferredIde(user: User) {
|
|
100
|
+
return (
|
|
101
|
+
typeof user?.additionalData?.ideSettings?.defaultIde !== "undefined" ||
|
|
102
|
+
typeof user?.additionalData?.ideSettings?.useLatestVersion !== "undefined"
|
|
103
|
+
);
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
export function isOnboardingUser(user: User) {
|
|
107
|
+
return !hasPreferredIde(user);
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
export function migrationIDESettings(user: User) {
|
|
111
|
+
if (
|
|
112
|
+
!user?.additionalData?.ideSettings ||
|
|
113
|
+
Object.keys(user.additionalData.ideSettings).length === 0 ||
|
|
114
|
+
user.additionalData.ideSettings.settingVersion === "2.0"
|
|
115
|
+
) {
|
|
116
|
+
return;
|
|
117
|
+
}
|
|
118
|
+
const newIDESettings: IDESettings = {
|
|
119
|
+
settingVersion: "2.0",
|
|
120
|
+
};
|
|
121
|
+
const ideSettings = user.additionalData.ideSettings;
|
|
122
|
+
if (ideSettings.useDesktopIde) {
|
|
123
|
+
if (ideSettings.defaultDesktopIde === "code-desktop") {
|
|
124
|
+
newIDESettings.defaultIde = "code-desktop";
|
|
125
|
+
} else if (ideSettings.defaultDesktopIde === "code-desktop-insiders") {
|
|
126
|
+
newIDESettings.defaultIde = "code-desktop";
|
|
127
|
+
newIDESettings.useLatestVersion = true;
|
|
128
|
+
} else {
|
|
129
|
+
newIDESettings.defaultIde = ideSettings.defaultDesktopIde;
|
|
130
|
+
newIDESettings.useLatestVersion = ideSettings.useLatestVersion;
|
|
131
|
+
}
|
|
132
|
+
} else {
|
|
133
|
+
const useLatest = ideSettings.defaultIde === "code-latest";
|
|
134
|
+
newIDESettings.defaultIde = "code";
|
|
135
|
+
newIDESettings.useLatestVersion = useLatest;
|
|
136
|
+
}
|
|
137
|
+
user.additionalData.ideSettings = newIDESettings;
|
|
138
|
+
}
|
|
93
139
|
}
|
|
94
140
|
|
|
95
141
|
export interface AdditionalUserData {
|
|
@@ -98,10 +144,10 @@ export interface AdditionalUserData {
|
|
|
98
144
|
featurePreview?: boolean;
|
|
99
145
|
ideSettings?: IDESettings;
|
|
100
146
|
// key is the name of the news, string the iso date when it was seen
|
|
101
|
-
whatsNewSeen?: { [key: string]: string }
|
|
147
|
+
whatsNewSeen?: { [key: string]: string };
|
|
102
148
|
// key is the name of the OAuth client i.e. local app, string the iso date when it was approved
|
|
103
149
|
// TODO(rl): provide a management UX to allow rescinding of approval
|
|
104
|
-
oauthClientsApproved?: { [key: string]: string }
|
|
150
|
+
oauthClientsApproved?: { [key: string]: string };
|
|
105
151
|
// to remember GH Orgs the user installed/updated the GH App for
|
|
106
152
|
knownGitHubOrgs?: string[];
|
|
107
153
|
|
|
@@ -116,10 +162,14 @@ export interface EmailNotificationSettings {
|
|
|
116
162
|
}
|
|
117
163
|
|
|
118
164
|
export type IDESettings = {
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
165
|
+
settingVersion?: string;
|
|
166
|
+
defaultIde?: string;
|
|
167
|
+
// DEPRECATED: Use defaultIde after `settingVersion: 2.0`, no more specialify desktop or browser.
|
|
168
|
+
useDesktopIde?: boolean;
|
|
169
|
+
// DEPRECATED: Same with useDesktopIde.
|
|
170
|
+
defaultDesktopIde?: string;
|
|
171
|
+
useLatestVersion?: boolean;
|
|
172
|
+
};
|
|
123
173
|
|
|
124
174
|
export interface UserPlatform {
|
|
125
175
|
uid: string;
|
|
@@ -151,8 +201,12 @@ export interface UserFeatureSettings {
|
|
|
151
201
|
* The values of this type MUST MATCH enum values in WorkspaceFeatureFlag from ws-manager/client/core_pb.d.ts
|
|
152
202
|
* If they don't we'll break things during workspace startup.
|
|
153
203
|
*/
|
|
154
|
-
export const WorkspaceFeatureFlags = {
|
|
155
|
-
|
|
204
|
+
export const WorkspaceFeatureFlags = {
|
|
205
|
+
full_workspace_backup: undefined,
|
|
206
|
+
fixed_resources: undefined,
|
|
207
|
+
persistent_volume_claim: undefined,
|
|
208
|
+
};
|
|
209
|
+
export type NamedWorkspaceFeatureFlag = keyof typeof WorkspaceFeatureFlags;
|
|
156
210
|
|
|
157
211
|
export interface EnvVarWithValue {
|
|
158
212
|
name: string;
|
|
@@ -165,7 +219,7 @@ export interface ProjectEnvVarWithValue extends EnvVarWithValue {
|
|
|
165
219
|
censored: boolean;
|
|
166
220
|
}
|
|
167
221
|
|
|
168
|
-
export type ProjectEnvVar = Omit<ProjectEnvVarWithValue,
|
|
222
|
+
export type ProjectEnvVar = Omit<ProjectEnvVarWithValue, "value">;
|
|
169
223
|
|
|
170
224
|
export interface UserEnvVarValue extends EnvVarWithValue {
|
|
171
225
|
id?: string;
|
|
@@ -178,6 +232,44 @@ export interface UserEnvVar extends UserEnvVarValue {
|
|
|
178
232
|
}
|
|
179
233
|
|
|
180
234
|
export namespace UserEnvVar {
|
|
235
|
+
/**
|
|
236
|
+
* @param variable
|
|
237
|
+
* @returns Either a string containing an error message or undefined.
|
|
238
|
+
*/
|
|
239
|
+
export function validate(variable: UserEnvVarValue): string | undefined {
|
|
240
|
+
const name = variable.name;
|
|
241
|
+
const pattern = variable.repositoryPattern;
|
|
242
|
+
if (name.trim() === "") {
|
|
243
|
+
return "Name must not be empty.";
|
|
244
|
+
}
|
|
245
|
+
if (name.length > 255) {
|
|
246
|
+
return "Name too long. Maximum name length is 255 characters.";
|
|
247
|
+
}
|
|
248
|
+
if (!/^[a-zA-Z_]+[a-zA-Z0-9_]*$/.test(name)) {
|
|
249
|
+
return "Name must match /^[a-zA-Z_]+[a-zA-Z0-9_]*$/.";
|
|
250
|
+
}
|
|
251
|
+
if (variable.value.trim() === "") {
|
|
252
|
+
return "Value must not be empty.";
|
|
253
|
+
}
|
|
254
|
+
if (variable.value.length > 32767) {
|
|
255
|
+
return "Value too long. Maximum value length is 32767 characters.";
|
|
256
|
+
}
|
|
257
|
+
if (pattern.trim() === "") {
|
|
258
|
+
return "Scope must not be empty.";
|
|
259
|
+
}
|
|
260
|
+
const split = pattern.split("/");
|
|
261
|
+
if (split.length < 2) {
|
|
262
|
+
return "A scope must use the form 'organization/repo'.";
|
|
263
|
+
}
|
|
264
|
+
for (const name of split) {
|
|
265
|
+
if (name !== "*") {
|
|
266
|
+
if (!/^[a-zA-Z0-9_\-.\*]+$/.test(name)) {
|
|
267
|
+
return "Invalid scope segment. Only ASCII characters, numbers, -, _, . or * are allowed.";
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
return undefined;
|
|
272
|
+
}
|
|
181
273
|
|
|
182
274
|
// DEPRECATED: Use ProjectEnvVar instead of repositoryPattern - https://github.com/gitpod-com/gitpod/issues/5322
|
|
183
275
|
export function normalizeRepoPattern(pattern: string) {
|
|
@@ -198,7 +290,7 @@ export namespace UserEnvVar {
|
|
|
198
290
|
if (repoPattern == "*") {
|
|
199
291
|
score += 1;
|
|
200
292
|
}
|
|
201
|
-
if (ownerPattern ==
|
|
293
|
+
if (ownerPattern == "*") {
|
|
202
294
|
score += 2;
|
|
203
295
|
}
|
|
204
296
|
if (ownerPattern == "#" || repoPattern == "#") {
|
|
@@ -209,20 +301,20 @@ export namespace UserEnvVar {
|
|
|
209
301
|
|
|
210
302
|
// DEPRECATED: Use ProjectEnvVar instead of repositoryPattern - https://github.com/gitpod-com/gitpod/issues/5322
|
|
211
303
|
export function filter<T extends UserEnvVarValue>(vars: T[], owner: string, repo: string): T[] {
|
|
212
|
-
let result = vars.filter(e => {
|
|
304
|
+
let result = vars.filter((e) => {
|
|
213
305
|
const [ownerPattern, repoPattern] = splitRepositoryPattern(e.repositoryPattern);
|
|
214
|
-
if (ownerPattern !==
|
|
306
|
+
if (ownerPattern !== "*" && ownerPattern !== "#" && !!owner && ownerPattern !== owner.toLocaleLowerCase()) {
|
|
215
307
|
return false;
|
|
216
308
|
}
|
|
217
|
-
if (repoPattern !==
|
|
309
|
+
if (repoPattern !== "*" && repoPattern !== "#" && !!repo && repoPattern !== repo.toLocaleLowerCase()) {
|
|
218
310
|
return false;
|
|
219
311
|
}
|
|
220
312
|
return true;
|
|
221
313
|
});
|
|
222
314
|
|
|
223
315
|
const resmap = new Map<string, T[]>();
|
|
224
|
-
result.forEach(e => {
|
|
225
|
-
const l =
|
|
316
|
+
result.forEach((e) => {
|
|
317
|
+
const l = resmap.get(e.name) || [];
|
|
226
318
|
l.push(e);
|
|
227
319
|
resmap.set(e.name, l);
|
|
228
320
|
});
|
|
@@ -257,46 +349,45 @@ export namespace UserEnvVar {
|
|
|
257
349
|
|
|
258
350
|
// DEPRECATED: Use ProjectEnvVar instead of repositoryPattern - https://github.com/gitpod-com/gitpod/issues/5322
|
|
259
351
|
export function splitRepositoryPattern(repositoryPattern: string): string[] {
|
|
260
|
-
const patterns = repositoryPattern.split(
|
|
261
|
-
const repoPattern = patterns.
|
|
262
|
-
const ownerPattern = patterns
|
|
352
|
+
const patterns = repositoryPattern.split("/");
|
|
353
|
+
const repoPattern = patterns.slice(1).join("/");
|
|
354
|
+
const ownerPattern = patterns[0];
|
|
263
355
|
return [ownerPattern, repoPattern];
|
|
264
356
|
}
|
|
265
357
|
}
|
|
266
358
|
|
|
267
359
|
export interface GitpodToken {
|
|
268
|
-
|
|
269
360
|
/** Hash value (SHA256) of the token (primary key). */
|
|
270
|
-
tokenHash: string
|
|
361
|
+
tokenHash: string;
|
|
271
362
|
|
|
272
363
|
/** Human readable name of the token */
|
|
273
|
-
name?: string
|
|
364
|
+
name?: string;
|
|
274
365
|
|
|
275
366
|
/** Token kind */
|
|
276
|
-
type: GitpodTokenType
|
|
367
|
+
type: GitpodTokenType;
|
|
277
368
|
|
|
278
369
|
/** The user the token belongs to. */
|
|
279
|
-
user: User
|
|
370
|
+
user: User;
|
|
280
371
|
|
|
281
372
|
/** Scopes (e.g. limition to read-only) */
|
|
282
|
-
scopes: string[]
|
|
373
|
+
scopes: string[];
|
|
283
374
|
|
|
284
375
|
/** Created timestamp */
|
|
285
|
-
created: string
|
|
376
|
+
created: string;
|
|
286
377
|
|
|
287
378
|
// token is deleted on the database and about to be collected by db-sync
|
|
288
|
-
deleted?: boolean
|
|
379
|
+
deleted?: boolean;
|
|
289
380
|
}
|
|
290
381
|
|
|
291
382
|
export enum GitpodTokenType {
|
|
292
383
|
API_AUTH_TOKEN = 0,
|
|
293
|
-
MACHINE_AUTH_TOKEN = 1
|
|
384
|
+
MACHINE_AUTH_TOKEN = 1,
|
|
294
385
|
}
|
|
295
386
|
|
|
296
387
|
export interface OneTimeSecret {
|
|
297
|
-
id: string
|
|
388
|
+
id: string;
|
|
298
389
|
|
|
299
|
-
value: string
|
|
390
|
+
value: string;
|
|
300
391
|
|
|
301
392
|
expirationTime: string;
|
|
302
393
|
|
|
@@ -328,13 +419,12 @@ export type IdentityLookup = Pick<Identity, "authProviderId" | "authId">;
|
|
|
328
419
|
|
|
329
420
|
export namespace Identity {
|
|
330
421
|
export function is(data: any): data is Identity {
|
|
331
|
-
return
|
|
332
|
-
&& data.hasOwnProperty(
|
|
333
|
-
|
|
422
|
+
return (
|
|
423
|
+
data.hasOwnProperty("authProviderId") && data.hasOwnProperty("authId") && data.hasOwnProperty("authName")
|
|
424
|
+
);
|
|
334
425
|
}
|
|
335
426
|
export function equals(id1: IdentityLookup, id2: IdentityLookup) {
|
|
336
|
-
return id1.authProviderId === id2.authProviderId
|
|
337
|
-
&& id1.authId === id2.authId
|
|
427
|
+
return id1.authProviderId === id2.authProviderId && id1.authId === id2.authId;
|
|
338
428
|
}
|
|
339
429
|
}
|
|
340
430
|
|
|
@@ -398,7 +488,14 @@ export interface Snapshot {
|
|
|
398
488
|
message?: string;
|
|
399
489
|
}
|
|
400
490
|
|
|
401
|
-
export
|
|
491
|
+
export interface VolumeSnapshot {
|
|
492
|
+
id: string;
|
|
493
|
+
workspaceId: string;
|
|
494
|
+
creationTime: string;
|
|
495
|
+
volumeHandle: string;
|
|
496
|
+
}
|
|
497
|
+
|
|
498
|
+
export type SnapshotState = "pending" | "available" | "error";
|
|
402
499
|
|
|
403
500
|
export interface LayoutData {
|
|
404
501
|
workspaceId: string;
|
|
@@ -427,13 +524,13 @@ export interface Workspace {
|
|
|
427
524
|
* The resolved, fix name of the workspace image. We only use this
|
|
428
525
|
* to access the logs during an image build.
|
|
429
526
|
*/
|
|
430
|
-
imageNameResolved?: string
|
|
527
|
+
imageNameResolved?: string;
|
|
431
528
|
|
|
432
529
|
/**
|
|
433
530
|
* The resolved/built fixed named of the base image. This field is only set if the workspace
|
|
434
531
|
* already has its base image built.
|
|
435
532
|
*/
|
|
436
|
-
baseImageNameResolved?: string
|
|
533
|
+
baseImageNameResolved?: string;
|
|
437
534
|
|
|
438
535
|
shareable?: boolean;
|
|
439
536
|
pinned?: boolean;
|
|
@@ -470,17 +567,16 @@ export type WorkspaceSoftDeletion = "user" | "gc";
|
|
|
470
567
|
export type WorkspaceType = "regular" | "prebuild" | "probe";
|
|
471
568
|
|
|
472
569
|
export namespace Workspace {
|
|
473
|
-
|
|
474
570
|
export function getFullRepositoryName(ws: Workspace): string | undefined {
|
|
475
571
|
if (CommitContext.is(ws.context)) {
|
|
476
|
-
return ws.context.repository.owner +
|
|
572
|
+
return ws.context.repository.owner + "/" + ws.context.repository.name;
|
|
477
573
|
}
|
|
478
574
|
return undefined;
|
|
479
575
|
}
|
|
480
576
|
|
|
481
577
|
export function getFullRepositoryUrl(ws: Workspace): string | undefined {
|
|
482
578
|
if (CommitContext.is(ws.context)) {
|
|
483
|
-
return `https://${ws.context.repository.host}/${getFullRepositoryName(ws)}
|
|
579
|
+
return `https://${ws.context.repository.host}/${getFullRepositoryName(ws)}`;
|
|
484
580
|
}
|
|
485
581
|
return undefined;
|
|
486
582
|
}
|
|
@@ -514,59 +610,50 @@ export namespace Workspace {
|
|
|
514
610
|
}
|
|
515
611
|
}
|
|
516
612
|
|
|
517
|
-
export interface PreparePluginUploadParams {
|
|
518
|
-
fullPluginName: string;
|
|
519
|
-
}
|
|
520
|
-
|
|
521
|
-
export interface ResolvePluginsParams {
|
|
522
|
-
config?: WorkspaceConfig
|
|
523
|
-
builtins?: ResolvedPlugins
|
|
524
|
-
vsxRegistryUrl?: string
|
|
525
|
-
}
|
|
526
|
-
|
|
527
|
-
export interface InstallPluginsParams {
|
|
528
|
-
pluginIds: string[]
|
|
529
|
-
}
|
|
530
|
-
|
|
531
|
-
export interface UninstallPluginParams {
|
|
532
|
-
pluginId: string;
|
|
533
|
-
}
|
|
534
|
-
|
|
535
613
|
export interface GuessGitTokenScopesParams {
|
|
536
|
-
host: string
|
|
537
|
-
repoUrl: string
|
|
538
|
-
|
|
539
|
-
currentToken: GitToken
|
|
614
|
+
host: string;
|
|
615
|
+
repoUrl: string;
|
|
616
|
+
gitCommand: string;
|
|
617
|
+
currentToken: GitToken;
|
|
540
618
|
}
|
|
541
619
|
|
|
542
620
|
export interface GitToken {
|
|
543
|
-
token: string
|
|
544
|
-
user: string
|
|
545
|
-
scopes: string[]
|
|
621
|
+
token: string;
|
|
622
|
+
user: string;
|
|
623
|
+
scopes: string[];
|
|
546
624
|
}
|
|
547
625
|
|
|
548
626
|
export interface GuessedGitTokenScopes {
|
|
549
|
-
message?: string
|
|
550
|
-
scopes?: string[]
|
|
627
|
+
message?: string;
|
|
628
|
+
scopes?: string[];
|
|
551
629
|
}
|
|
552
630
|
|
|
553
|
-
export
|
|
554
|
-
|
|
555
|
-
export interface ResolvedPlugins {
|
|
556
|
-
[pluginId: string]: ResolvedPlugin | undefined
|
|
631
|
+
export interface VSCodeConfig {
|
|
632
|
+
extensions?: string[];
|
|
557
633
|
}
|
|
558
634
|
|
|
559
|
-
export interface
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
635
|
+
export interface JetBrainsConfig {
|
|
636
|
+
intellij?: JetBrainsProductConfig;
|
|
637
|
+
goland?: JetBrainsProductConfig;
|
|
638
|
+
pycharm?: JetBrainsProductConfig;
|
|
639
|
+
phpstorm?: JetBrainsProductConfig;
|
|
640
|
+
}
|
|
641
|
+
export interface JetBrainsProductConfig {
|
|
642
|
+
prebuilds?: JetBrainsPrebuilds;
|
|
643
|
+
vmoptions?: string;
|
|
644
|
+
}
|
|
645
|
+
export interface JetBrainsPrebuilds {
|
|
646
|
+
version?: "stable" | "latest" | "both";
|
|
563
647
|
}
|
|
564
648
|
|
|
565
|
-
export interface
|
|
566
|
-
|
|
649
|
+
export interface RepositoryCloneInformation {
|
|
650
|
+
url: string;
|
|
651
|
+
checkoutLocation?: string;
|
|
567
652
|
}
|
|
568
653
|
|
|
569
654
|
export interface WorkspaceConfig {
|
|
655
|
+
mainConfiguration?: string;
|
|
656
|
+
additionalRepositories?: RepositoryCloneInformation[];
|
|
570
657
|
image?: ImageConfig;
|
|
571
658
|
ports?: PortConfig[];
|
|
572
659
|
tasks?: TaskConfig[];
|
|
@@ -575,6 +662,7 @@ export interface WorkspaceConfig {
|
|
|
575
662
|
gitConfig?: { [config: string]: string };
|
|
576
663
|
github?: GithubAppConfig;
|
|
577
664
|
vscode?: VSCodeConfig;
|
|
665
|
+
jetbrains?: JetBrainsConfig;
|
|
578
666
|
|
|
579
667
|
/** deprecated. Enabled by default **/
|
|
580
668
|
experimentalNetwork?: boolean;
|
|
@@ -589,7 +677,7 @@ export interface WorkspaceConfig {
|
|
|
589
677
|
* additional-content - config comes from additional content, usually provided through the project's configuration
|
|
590
678
|
* default - our static catch-all default config
|
|
591
679
|
*/
|
|
592
|
-
_origin?:
|
|
680
|
+
_origin?: "repo" | "project-db" | "definitely-gp" | "derived" | "additional-content" | "default";
|
|
593
681
|
|
|
594
682
|
/**
|
|
595
683
|
* Set of automatically infered feature flags. That's not something the user can set, but
|
|
@@ -599,34 +687,33 @@ export interface WorkspaceConfig {
|
|
|
599
687
|
}
|
|
600
688
|
|
|
601
689
|
export interface GithubAppConfig {
|
|
602
|
-
prebuilds?: GithubAppPrebuildConfig
|
|
690
|
+
prebuilds?: GithubAppPrebuildConfig;
|
|
603
691
|
}
|
|
604
692
|
export interface GithubAppPrebuildConfig {
|
|
605
|
-
master?: boolean
|
|
606
|
-
branches?: boolean
|
|
607
|
-
pullRequests?: boolean
|
|
608
|
-
pullRequestsFromForks?: boolean
|
|
609
|
-
addCheck?: boolean |
|
|
610
|
-
addBadge?: boolean
|
|
611
|
-
addLabel?: boolean | string
|
|
612
|
-
addComment?: boolean
|
|
693
|
+
master?: boolean;
|
|
694
|
+
branches?: boolean;
|
|
695
|
+
pullRequests?: boolean;
|
|
696
|
+
pullRequestsFromForks?: boolean;
|
|
697
|
+
addCheck?: boolean | "prevent-merge-on-error";
|
|
698
|
+
addBadge?: boolean;
|
|
699
|
+
addLabel?: boolean | string;
|
|
700
|
+
addComment?: boolean;
|
|
613
701
|
}
|
|
614
702
|
export namespace GithubAppPrebuildConfig {
|
|
615
703
|
export function is(obj: boolean | GithubAppPrebuildConfig): obj is GithubAppPrebuildConfig {
|
|
616
|
-
return !(typeof obj ===
|
|
704
|
+
return !(typeof obj === "boolean");
|
|
617
705
|
}
|
|
618
706
|
}
|
|
619
707
|
|
|
620
708
|
export type WorkspaceImageSource = WorkspaceImageSourceDocker | WorkspaceImageSourceReference;
|
|
621
709
|
export interface WorkspaceImageSourceDocker {
|
|
622
|
-
dockerFilePath: string
|
|
623
|
-
dockerFileHash: string
|
|
624
|
-
dockerFileSource?: Commit
|
|
710
|
+
dockerFilePath: string;
|
|
711
|
+
dockerFileHash: string;
|
|
712
|
+
dockerFileSource?: Commit;
|
|
625
713
|
}
|
|
626
714
|
export namespace WorkspaceImageSourceDocker {
|
|
627
715
|
export function is(obj: object): obj is WorkspaceImageSourceDocker {
|
|
628
|
-
return
|
|
629
|
-
&& 'dockerFilePath' in obj;
|
|
716
|
+
return "dockerFileHash" in obj && "dockerFilePath" in obj;
|
|
630
717
|
}
|
|
631
718
|
}
|
|
632
719
|
export interface WorkspaceImageSourceReference {
|
|
@@ -635,21 +722,23 @@ export interface WorkspaceImageSourceReference {
|
|
|
635
722
|
}
|
|
636
723
|
export namespace WorkspaceImageSourceReference {
|
|
637
724
|
export function is(obj: object): obj is WorkspaceImageSourceReference {
|
|
638
|
-
return
|
|
725
|
+
return "baseImageResolved" in obj;
|
|
639
726
|
}
|
|
640
727
|
}
|
|
641
728
|
|
|
642
|
-
export type PrebuiltWorkspaceState
|
|
729
|
+
export type PrebuiltWorkspaceState =
|
|
643
730
|
// the prebuild is queued and may start at anytime
|
|
644
|
-
|
|
731
|
+
| "queued"
|
|
645
732
|
// the workspace prebuild is currently running (i.e. there's a workspace pod deployed)
|
|
646
733
|
| "building"
|
|
647
|
-
// the prebuild
|
|
734
|
+
// the prebuild was aborted
|
|
648
735
|
| "aborted"
|
|
649
736
|
// the prebuild timed out
|
|
650
737
|
| "timeout"
|
|
651
|
-
// the prebuild has finished and a snapshot is available
|
|
652
|
-
| "available"
|
|
738
|
+
// the prebuild has finished (even if a headless task failed) and a snapshot is available
|
|
739
|
+
| "available"
|
|
740
|
+
// the prebuild (headless workspace) failed due to some system error
|
|
741
|
+
| "failed";
|
|
653
742
|
|
|
654
743
|
export interface PrebuiltWorkspace {
|
|
655
744
|
id: string;
|
|
@@ -660,13 +749,16 @@ export interface PrebuiltWorkspace {
|
|
|
660
749
|
buildWorkspaceId: string;
|
|
661
750
|
creationTime: string;
|
|
662
751
|
state: PrebuiltWorkspaceState;
|
|
752
|
+
statusVersion: number;
|
|
663
753
|
error?: string;
|
|
664
754
|
snapshot?: string;
|
|
665
755
|
}
|
|
666
756
|
|
|
667
757
|
export namespace PrebuiltWorkspace {
|
|
668
758
|
export function isDone(pws: PrebuiltWorkspace) {
|
|
669
|
-
return
|
|
759
|
+
return (
|
|
760
|
+
pws.state === "available" || pws.state === "timeout" || pws.state === "aborted" || pws.state === "failed"
|
|
761
|
+
);
|
|
670
762
|
}
|
|
671
763
|
|
|
672
764
|
export function isAvailable(pws: PrebuiltWorkspace) {
|
|
@@ -685,18 +777,22 @@ export interface PrebuiltWorkspaceUpdatable {
|
|
|
685
777
|
repo: string;
|
|
686
778
|
isResolved: boolean;
|
|
687
779
|
installationId: string;
|
|
780
|
+
/**
|
|
781
|
+
* the commitSHA of the commit that triggered the prebuild
|
|
782
|
+
*/
|
|
783
|
+
commitSHA?: string;
|
|
688
784
|
issue?: string;
|
|
689
785
|
contextUrl?: string;
|
|
690
786
|
}
|
|
691
787
|
|
|
692
788
|
export interface WhitelistedRepository {
|
|
693
|
-
url: string
|
|
694
|
-
name: string
|
|
695
|
-
description?: string
|
|
696
|
-
avatar?: string
|
|
789
|
+
url: string;
|
|
790
|
+
name: string;
|
|
791
|
+
description?: string;
|
|
792
|
+
avatar?: string;
|
|
697
793
|
}
|
|
698
794
|
|
|
699
|
-
export type PortOnOpen =
|
|
795
|
+
export type PortOnOpen = "open-browser" | "open-preview" | "notify" | "ignore";
|
|
700
796
|
|
|
701
797
|
export interface PortConfig {
|
|
702
798
|
port: number;
|
|
@@ -707,7 +803,7 @@ export interface PortConfig {
|
|
|
707
803
|
}
|
|
708
804
|
export namespace PortConfig {
|
|
709
805
|
export function is(config: any): config is PortConfig {
|
|
710
|
-
return config &&
|
|
806
|
+
return config && "port" in config && typeof config.port === "number";
|
|
711
807
|
}
|
|
712
808
|
}
|
|
713
809
|
|
|
@@ -717,7 +813,7 @@ export interface PortRangeConfig {
|
|
|
717
813
|
}
|
|
718
814
|
export namespace PortRangeConfig {
|
|
719
815
|
export function is(config: any): config is PortRangeConfig {
|
|
720
|
-
return config &&
|
|
816
|
+
return config && "port" in config && (typeof config.port === "string" || config.port instanceof String);
|
|
721
817
|
}
|
|
722
818
|
}
|
|
723
819
|
|
|
@@ -728,32 +824,31 @@ export interface TaskConfig {
|
|
|
728
824
|
prebuild?: string;
|
|
729
825
|
command?: string;
|
|
730
826
|
env?: { [env: string]: any };
|
|
731
|
-
openIn?:
|
|
732
|
-
openMode?:
|
|
827
|
+
openIn?: "bottom" | "main" | "left" | "right";
|
|
828
|
+
openMode?: "split-top" | "split-left" | "split-right" | "split-bottom" | "tab-before" | "tab-after";
|
|
733
829
|
}
|
|
734
830
|
|
|
735
831
|
export namespace TaskConfig {
|
|
736
832
|
export function is(config: any): config is TaskConfig {
|
|
737
|
-
return config
|
|
738
|
-
&& ('command' in config || 'init' in config || 'before' in config);
|
|
833
|
+
return config && ("command" in config || "init" in config || "before" in config);
|
|
739
834
|
}
|
|
740
835
|
}
|
|
741
836
|
|
|
742
837
|
export namespace WorkspaceImageBuild {
|
|
743
|
-
export type Phase =
|
|
838
|
+
export type Phase = "BaseImage" | "GitpodLayer" | "Error" | "Done";
|
|
744
839
|
export interface StateInfo {
|
|
745
|
-
phase: Phase
|
|
746
|
-
currentStep?: number
|
|
747
|
-
maxSteps?: number
|
|
840
|
+
phase: Phase;
|
|
841
|
+
currentStep?: number;
|
|
842
|
+
maxSteps?: number;
|
|
748
843
|
}
|
|
749
844
|
export interface LogContent {
|
|
750
|
-
text: string
|
|
751
|
-
upToLine?: number
|
|
752
|
-
isDiff?: boolean
|
|
845
|
+
text: string;
|
|
846
|
+
upToLine?: number;
|
|
847
|
+
isDiff?: boolean;
|
|
753
848
|
}
|
|
754
849
|
export type LogCallback = (info: StateInfo, content: LogContent | undefined) => void;
|
|
755
850
|
export namespace LogLine {
|
|
756
|
-
export const DELIMITER =
|
|
851
|
+
export const DELIMITER = "\r\n";
|
|
757
852
|
export const DELIMITER_REGEX = /\r?\n/;
|
|
758
853
|
}
|
|
759
854
|
}
|
|
@@ -762,20 +857,18 @@ export type ImageConfig = ImageConfigString | ImageConfigFile;
|
|
|
762
857
|
export type ImageConfigString = string;
|
|
763
858
|
export namespace ImageConfigString {
|
|
764
859
|
export function is(config: ImageConfig | undefined): config is ImageConfigString {
|
|
765
|
-
return typeof config ===
|
|
860
|
+
return typeof config === "string";
|
|
766
861
|
}
|
|
767
|
-
|
|
768
862
|
}
|
|
769
863
|
export interface ImageConfigFile {
|
|
770
864
|
// Path to the Dockerfile relative to repository root
|
|
771
|
-
file: string
|
|
865
|
+
file: string;
|
|
772
866
|
// Path to the docker build context relative to repository root
|
|
773
|
-
context?: string
|
|
867
|
+
context?: string;
|
|
774
868
|
}
|
|
775
869
|
export namespace ImageConfigFile {
|
|
776
870
|
export function is(config: ImageConfig | undefined): config is ImageConfigFile {
|
|
777
|
-
return typeof config ===
|
|
778
|
-
&& 'file' in config;
|
|
871
|
+
return typeof config === "object" && "file" in config;
|
|
779
872
|
}
|
|
780
873
|
}
|
|
781
874
|
export interface ExternalImageConfigFile extends ImageConfigFile {
|
|
@@ -783,14 +876,13 @@ export interface ExternalImageConfigFile extends ImageConfigFile {
|
|
|
783
876
|
}
|
|
784
877
|
export namespace ExternalImageConfigFile {
|
|
785
878
|
export function is(config: any | undefined): config is ExternalImageConfigFile {
|
|
786
|
-
return typeof config ===
|
|
787
|
-
&& 'file' in config
|
|
788
|
-
&& 'externalSource' in config;
|
|
879
|
+
return typeof config === "object" && "file" in config && "externalSource" in config;
|
|
789
880
|
}
|
|
790
881
|
}
|
|
791
882
|
|
|
792
883
|
export interface WorkspaceContext {
|
|
793
884
|
title: string;
|
|
885
|
+
ref?: string;
|
|
794
886
|
/** This contains the URL portion of the contextURL (which might contain other modifiers as well). It's optional because it's not set for older workspaces. */
|
|
795
887
|
normalizedContextURL?: string;
|
|
796
888
|
forceCreateNewWorkspace?: boolean;
|
|
@@ -799,8 +891,7 @@ export interface WorkspaceContext {
|
|
|
799
891
|
|
|
800
892
|
export namespace WorkspaceContext {
|
|
801
893
|
export function is(context: any): context is WorkspaceContext {
|
|
802
|
-
return context
|
|
803
|
-
&& 'title' in context;
|
|
894
|
+
return context && "title" in context;
|
|
804
895
|
}
|
|
805
896
|
}
|
|
806
897
|
|
|
@@ -809,22 +900,17 @@ export interface WithSnapshot {
|
|
|
809
900
|
}
|
|
810
901
|
export namespace WithSnapshot {
|
|
811
902
|
export function is(context: any): context is WithSnapshot {
|
|
812
|
-
return context
|
|
813
|
-
&& 'snapshotBucketId' in context;
|
|
903
|
+
return context && "snapshotBucketId" in context;
|
|
814
904
|
}
|
|
815
905
|
}
|
|
816
906
|
|
|
817
|
-
export interface WithPrebuild {
|
|
818
|
-
snapshotBucketId: string;
|
|
907
|
+
export interface WithPrebuild extends WithSnapshot {
|
|
819
908
|
prebuildWorkspaceId: string;
|
|
820
909
|
wasPrebuilt: true;
|
|
821
910
|
}
|
|
822
911
|
export namespace WithPrebuild {
|
|
823
912
|
export function is(context: any): context is WithPrebuild {
|
|
824
|
-
return context
|
|
825
|
-
&& 'snapshotBucketId' in context
|
|
826
|
-
&& 'prebuildWorkspaceId' in context
|
|
827
|
-
&& 'wasPrebuilt' in context;
|
|
913
|
+
return context && WithSnapshot.is(context) && "prebuildWorkspaceId" in context && "wasPrebuilt" in context;
|
|
828
914
|
}
|
|
829
915
|
}
|
|
830
916
|
|
|
@@ -838,16 +924,14 @@ export interface WithDefaultConfig {
|
|
|
838
924
|
|
|
839
925
|
export namespace WithDefaultConfig {
|
|
840
926
|
export function is(context: any): context is WithDefaultConfig {
|
|
841
|
-
return context
|
|
842
|
-
&& 'withDefaultConfig' in context
|
|
843
|
-
&& context.withDefaultConfig;
|
|
927
|
+
return context && "withDefaultConfig" in context && context.withDefaultConfig;
|
|
844
928
|
}
|
|
845
929
|
|
|
846
930
|
export function mark(ctx: WorkspaceContext): WorkspaceContext & WithDefaultConfig {
|
|
847
931
|
return {
|
|
848
932
|
...ctx,
|
|
849
|
-
withDefaultConfig: true
|
|
850
|
-
}
|
|
933
|
+
withDefaultConfig: true,
|
|
934
|
+
};
|
|
851
935
|
}
|
|
852
936
|
}
|
|
853
937
|
|
|
@@ -857,23 +941,24 @@ export interface SnapshotContext extends WorkspaceContext, WithSnapshot {
|
|
|
857
941
|
|
|
858
942
|
export namespace SnapshotContext {
|
|
859
943
|
export function is(context: any): context is SnapshotContext {
|
|
860
|
-
return context
|
|
861
|
-
&& WithSnapshot.is(context)
|
|
862
|
-
&& 'snapshotId' in context;
|
|
944
|
+
return context && WithSnapshot.is(context) && "snapshotId" in context;
|
|
863
945
|
}
|
|
864
946
|
}
|
|
865
947
|
|
|
866
948
|
export interface StartPrebuildContext extends WorkspaceContext {
|
|
867
949
|
actual: WorkspaceContext;
|
|
868
950
|
commitHistory?: string[];
|
|
951
|
+
additionalRepositoryCommitHistories?: {
|
|
952
|
+
cloneUrl: string;
|
|
953
|
+
commitHistory: string[];
|
|
954
|
+
}[];
|
|
869
955
|
project?: Project;
|
|
870
956
|
branch?: string;
|
|
871
957
|
}
|
|
872
958
|
|
|
873
959
|
export namespace StartPrebuildContext {
|
|
874
960
|
export function is(context: any): context is StartPrebuildContext {
|
|
875
|
-
return context
|
|
876
|
-
&& 'actual' in context;
|
|
961
|
+
return context && "actual" in context;
|
|
877
962
|
}
|
|
878
963
|
}
|
|
879
964
|
|
|
@@ -885,21 +970,18 @@ export interface PrebuiltWorkspaceContext extends WorkspaceContext {
|
|
|
885
970
|
|
|
886
971
|
export namespace PrebuiltWorkspaceContext {
|
|
887
972
|
export function is(context: any): context is PrebuiltWorkspaceContext {
|
|
888
|
-
return context
|
|
889
|
-
&& 'originalContext' in context
|
|
890
|
-
&& 'prebuiltWorkspace' in context;
|
|
973
|
+
return context && "originalContext" in context && "prebuiltWorkspace" in context;
|
|
891
974
|
}
|
|
892
975
|
}
|
|
893
976
|
|
|
894
977
|
export interface WithReferrerContext extends WorkspaceContext {
|
|
895
|
-
referrer: string
|
|
896
|
-
referrerIde?: string
|
|
978
|
+
referrer: string;
|
|
979
|
+
referrerIde?: string;
|
|
897
980
|
}
|
|
898
981
|
|
|
899
982
|
export namespace WithReferrerContext {
|
|
900
983
|
export function is(context: any): context is WithReferrerContext {
|
|
901
|
-
return context
|
|
902
|
-
&& 'referrer' in context;
|
|
984
|
+
return context && "referrer" in context;
|
|
903
985
|
}
|
|
904
986
|
}
|
|
905
987
|
|
|
@@ -909,21 +991,18 @@ export interface WithEnvvarsContext extends WorkspaceContext {
|
|
|
909
991
|
|
|
910
992
|
export namespace WithEnvvarsContext {
|
|
911
993
|
export function is(context: any): context is WithEnvvarsContext {
|
|
912
|
-
return context
|
|
913
|
-
&& 'envvars' in context
|
|
994
|
+
return context && "envvars" in context;
|
|
914
995
|
}
|
|
915
996
|
}
|
|
916
997
|
|
|
917
998
|
export interface WorkspaceProbeContext extends WorkspaceContext {
|
|
918
|
-
responseURL: string
|
|
919
|
-
responseToken: string
|
|
999
|
+
responseURL: string;
|
|
1000
|
+
responseToken: string;
|
|
920
1001
|
}
|
|
921
1002
|
|
|
922
1003
|
export namespace WorkspaceProbeContext {
|
|
923
1004
|
export function is(context: any): context is WorkspaceProbeContext {
|
|
924
|
-
return context
|
|
925
|
-
&& 'responseURL' in context
|
|
926
|
-
&& 'responseToken' in context;
|
|
1005
|
+
return context && "responseURL" in context && "responseToken" in context;
|
|
927
1006
|
}
|
|
928
1007
|
}
|
|
929
1008
|
|
|
@@ -935,32 +1014,30 @@ export namespace RefType {
|
|
|
935
1014
|
}
|
|
936
1015
|
// This fallback is meant to handle the cases where (for historic reasons) ref is present but refType is missing
|
|
937
1016
|
return commit.refType || "branch";
|
|
938
|
-
}
|
|
1017
|
+
};
|
|
939
1018
|
}
|
|
940
1019
|
|
|
941
1020
|
export interface Commit {
|
|
942
|
-
repository: Repository
|
|
943
|
-
revision: string
|
|
1021
|
+
repository: Repository;
|
|
1022
|
+
revision: string;
|
|
944
1023
|
|
|
945
1024
|
// Might contain either a branch or a tag (determined by refType)
|
|
946
|
-
ref?: string
|
|
1025
|
+
ref?: string;
|
|
947
1026
|
|
|
948
1027
|
// refType is only set if ref is present (and not for old workspaces, before this feature was added)
|
|
949
|
-
refType?: RefType
|
|
1028
|
+
refType?: RefType;
|
|
950
1029
|
}
|
|
951
1030
|
|
|
952
1031
|
export interface AdditionalContentContext extends WorkspaceContext {
|
|
953
|
-
|
|
954
1032
|
/**
|
|
955
1033
|
* utf-8 encoded contents that will be copied on top of the workspace's filesystem
|
|
956
1034
|
*/
|
|
957
|
-
additionalFiles: {[filePath: string]: string};
|
|
958
|
-
|
|
1035
|
+
additionalFiles: { [filePath: string]: string };
|
|
959
1036
|
}
|
|
960
1037
|
|
|
961
1038
|
export namespace AdditionalContentContext {
|
|
962
1039
|
export function is(ctx: any): ctx is AdditionalContentContext {
|
|
963
|
-
return
|
|
1040
|
+
return "additionalFiles" in ctx;
|
|
964
1041
|
}
|
|
965
1042
|
|
|
966
1043
|
export function hasDockerConfig(ctx: any, config: WorkspaceConfig): boolean {
|
|
@@ -968,16 +1045,49 @@ export namespace AdditionalContentContext {
|
|
|
968
1045
|
}
|
|
969
1046
|
}
|
|
970
1047
|
|
|
971
|
-
export interface CommitContext extends WorkspaceContext,
|
|
1048
|
+
export interface CommitContext extends WorkspaceContext, GitCheckoutInfo {
|
|
972
1049
|
/** @deprecated Moved to .repository.cloneUrl, left here for backwards-compatibility for old workspace contextes in the DB */
|
|
973
|
-
cloneUrl?: string
|
|
1050
|
+
cloneUrl?: string;
|
|
1051
|
+
|
|
1052
|
+
/**
|
|
1053
|
+
* The clone and checkout information for additional repositories in case of multi-repo projects.
|
|
1054
|
+
*/
|
|
1055
|
+
additionalRepositoryCheckoutInfo?: GitCheckoutInfo[];
|
|
1056
|
+
}
|
|
1057
|
+
|
|
1058
|
+
export namespace CommitContext {
|
|
1059
|
+
/**
|
|
1060
|
+
* Creates a hash for all the commits of the CommitContext and all sub-repo commit infos.
|
|
1061
|
+
* The hash is max 255 chars long.
|
|
1062
|
+
* @param commitContext
|
|
1063
|
+
* @returns hash for commitcontext
|
|
1064
|
+
*/
|
|
1065
|
+
export function computeHash(commitContext: CommitContext): string {
|
|
1066
|
+
// for single commits we use the revision to be backward compatible.
|
|
1067
|
+
if (
|
|
1068
|
+
!commitContext.additionalRepositoryCheckoutInfo ||
|
|
1069
|
+
commitContext.additionalRepositoryCheckoutInfo.length === 0
|
|
1070
|
+
) {
|
|
1071
|
+
return commitContext.revision;
|
|
1072
|
+
}
|
|
1073
|
+
const hasher = createHash("sha256");
|
|
1074
|
+
hasher.update(commitContext.revision);
|
|
1075
|
+
for (const info of commitContext.additionalRepositoryCheckoutInfo) {
|
|
1076
|
+
hasher.update(info.revision);
|
|
1077
|
+
}
|
|
1078
|
+
return hasher.digest("hex");
|
|
1079
|
+
}
|
|
1080
|
+
}
|
|
1081
|
+
|
|
1082
|
+
export interface GitCheckoutInfo extends Commit {
|
|
1083
|
+
checkoutLocation?: string;
|
|
1084
|
+
upstreamRemoteURI?: string;
|
|
1085
|
+
localBranch?: string;
|
|
974
1086
|
}
|
|
975
1087
|
|
|
976
1088
|
export namespace CommitContext {
|
|
977
1089
|
export function is(commit: any): commit is CommitContext {
|
|
978
|
-
return WorkspaceContext.is(commit)
|
|
979
|
-
&& 'repository' in commit
|
|
980
|
-
&& 'revision' in commit
|
|
1090
|
+
return WorkspaceContext.is(commit) && "repository" in commit && "revision" in commit;
|
|
981
1091
|
}
|
|
982
1092
|
}
|
|
983
1093
|
|
|
@@ -985,17 +1095,14 @@ export interface PullRequestContext extends CommitContext {
|
|
|
985
1095
|
nr: number;
|
|
986
1096
|
ref: string;
|
|
987
1097
|
base: {
|
|
988
|
-
repository: Repository
|
|
989
|
-
ref: string
|
|
990
|
-
}
|
|
1098
|
+
repository: Repository;
|
|
1099
|
+
ref: string;
|
|
1100
|
+
};
|
|
991
1101
|
}
|
|
992
1102
|
|
|
993
1103
|
export namespace PullRequestContext {
|
|
994
1104
|
export function is(ctx: any): ctx is PullRequestContext {
|
|
995
|
-
return CommitContext.is(ctx)
|
|
996
|
-
&& 'nr' in ctx
|
|
997
|
-
&& 'ref' in ctx
|
|
998
|
-
&& 'base' in ctx
|
|
1105
|
+
return CommitContext.is(ctx) && "nr" in ctx && "ref" in ctx && "base" in ctx;
|
|
999
1106
|
}
|
|
1000
1107
|
}
|
|
1001
1108
|
|
|
@@ -1007,10 +1114,7 @@ export interface IssueContext extends CommitContext {
|
|
|
1007
1114
|
|
|
1008
1115
|
export namespace IssueContext {
|
|
1009
1116
|
export function is(ctx: any): ctx is IssueContext {
|
|
1010
|
-
return CommitContext.is(ctx)
|
|
1011
|
-
&& 'nr' in ctx
|
|
1012
|
-
&& 'ref' in ctx
|
|
1013
|
-
&& 'localBranch' in ctx
|
|
1117
|
+
return CommitContext.is(ctx) && "nr" in ctx && "ref" in ctx && "localBranch" in ctx;
|
|
1014
1118
|
}
|
|
1015
1119
|
}
|
|
1016
1120
|
|
|
@@ -1021,9 +1125,7 @@ export interface NavigatorContext extends CommitContext {
|
|
|
1021
1125
|
|
|
1022
1126
|
export namespace NavigatorContext {
|
|
1023
1127
|
export function is(ctx: any): ctx is NavigatorContext {
|
|
1024
|
-
return CommitContext.is(ctx)
|
|
1025
|
-
&& 'path' in ctx
|
|
1026
|
-
&& 'isFile' in ctx
|
|
1128
|
+
return CommitContext.is(ctx) && "path" in ctx && "isFile" in ctx;
|
|
1027
1129
|
}
|
|
1028
1130
|
}
|
|
1029
1131
|
|
|
@@ -1032,6 +1134,8 @@ export interface Repository {
|
|
|
1032
1134
|
owner: string;
|
|
1033
1135
|
name: string;
|
|
1034
1136
|
cloneUrl: string;
|
|
1137
|
+
/* Optional kind to differentiate between repositories of orgs/groups/projects and personal repos. */
|
|
1138
|
+
repoKind?: string;
|
|
1035
1139
|
description?: string;
|
|
1036
1140
|
avatarUrl?: string;
|
|
1037
1141
|
webUrl?: string;
|
|
@@ -1040,8 +1144,8 @@ export interface Repository {
|
|
|
1040
1144
|
private?: boolean;
|
|
1041
1145
|
fork?: {
|
|
1042
1146
|
// The direct parent of this fork
|
|
1043
|
-
parent: Repository
|
|
1044
|
-
}
|
|
1147
|
+
parent: Repository;
|
|
1148
|
+
};
|
|
1045
1149
|
}
|
|
1046
1150
|
export interface Branch {
|
|
1047
1151
|
name: string;
|
|
@@ -1066,21 +1170,19 @@ export namespace Repository {
|
|
|
1066
1170
|
export interface WorkspaceInstancePortsChangedEvent {
|
|
1067
1171
|
type: "PortsChanged";
|
|
1068
1172
|
instanceID: string;
|
|
1069
|
-
portsOpened: number[]
|
|
1070
|
-
portsClosed: number[]
|
|
1173
|
+
portsOpened: number[];
|
|
1174
|
+
portsClosed: number[];
|
|
1071
1175
|
}
|
|
1072
1176
|
|
|
1073
1177
|
export namespace WorkspaceInstancePortsChangedEvent {
|
|
1074
|
-
|
|
1075
1178
|
export function is(data: any): data is WorkspaceInstancePortsChangedEvent {
|
|
1076
1179
|
return data && data.type == "PortsChanged";
|
|
1077
1180
|
}
|
|
1078
|
-
|
|
1079
1181
|
}
|
|
1080
1182
|
|
|
1081
1183
|
export interface WorkspaceInfo {
|
|
1082
|
-
workspace: Workspace
|
|
1083
|
-
latestInstance?: WorkspaceInstance
|
|
1184
|
+
workspace: Workspace;
|
|
1185
|
+
latestInstance?: WorkspaceInstance;
|
|
1084
1186
|
}
|
|
1085
1187
|
|
|
1086
1188
|
export namespace WorkspaceInfo {
|
|
@@ -1096,35 +1198,36 @@ export interface WorkspaceCreationResult {
|
|
|
1096
1198
|
workspaceURL?: string;
|
|
1097
1199
|
existingWorkspaces?: WorkspaceInfo[];
|
|
1098
1200
|
runningWorkspacePrebuild?: {
|
|
1099
|
-
prebuildID: string
|
|
1100
|
-
workspaceID: string
|
|
1101
|
-
instanceID: string
|
|
1102
|
-
starting: RunningWorkspacePrebuildStarting
|
|
1103
|
-
sameCluster: boolean
|
|
1104
|
-
}
|
|
1201
|
+
prebuildID: string;
|
|
1202
|
+
workspaceID: string;
|
|
1203
|
+
instanceID: string;
|
|
1204
|
+
starting: RunningWorkspacePrebuildStarting;
|
|
1205
|
+
sameCluster: boolean;
|
|
1206
|
+
};
|
|
1105
1207
|
runningPrebuildWorkspaceID?: string;
|
|
1106
1208
|
}
|
|
1107
|
-
export type RunningWorkspacePrebuildStarting =
|
|
1209
|
+
export type RunningWorkspacePrebuildStarting = "queued" | "starting" | "running";
|
|
1108
1210
|
|
|
1109
1211
|
export enum CreateWorkspaceMode {
|
|
1110
1212
|
// Default returns a running prebuild if there is any, otherwise creates a new workspace (using a prebuild if one is available)
|
|
1111
|
-
Default =
|
|
1213
|
+
Default = "default",
|
|
1112
1214
|
// 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.
|
|
1113
|
-
ForceNew =
|
|
1215
|
+
ForceNew = "force-new",
|
|
1114
1216
|
// UsePrebuild polls the database waiting for a currently running prebuild to become available. This mode exists to handle the db-sync delay.
|
|
1115
|
-
UsePrebuild =
|
|
1217
|
+
UsePrebuild = "use-prebuild",
|
|
1116
1218
|
// SelectIfRunning returns a list of currently running workspaces for the context URL if there are any, otherwise falls back to Default mode
|
|
1117
|
-
SelectIfRunning =
|
|
1219
|
+
SelectIfRunning = "select-if-running",
|
|
1118
1220
|
}
|
|
1119
1221
|
|
|
1120
1222
|
export namespace WorkspaceCreationResult {
|
|
1121
1223
|
export function is(data: any): data is WorkspaceCreationResult {
|
|
1122
|
-
return
|
|
1123
|
-
|
|
1124
|
-
|
|
1125
|
-
|
|
1126
|
-
|
|
1127
|
-
|
|
1224
|
+
return (
|
|
1225
|
+
data &&
|
|
1226
|
+
("createdWorkspaceId" in data ||
|
|
1227
|
+
"existingWorkspaces" in data ||
|
|
1228
|
+
"runningWorkspacePrebuild" in data ||
|
|
1229
|
+
"runningPrebuildWorkspaceID" in data)
|
|
1230
|
+
);
|
|
1128
1231
|
}
|
|
1129
1232
|
}
|
|
1130
1233
|
|
|
@@ -1158,7 +1261,7 @@ export interface AuthProviderInfo {
|
|
|
1158
1261
|
readonly default: string[];
|
|
1159
1262
|
readonly publicRepo: string[];
|
|
1160
1263
|
readonly privateRepo: string[];
|
|
1161
|
-
}
|
|
1264
|
+
};
|
|
1162
1265
|
}
|
|
1163
1266
|
|
|
1164
1267
|
export interface AuthProviderEntry {
|
|
@@ -1170,6 +1273,8 @@ export interface AuthProviderEntry {
|
|
|
1170
1273
|
readonly status: AuthProviderEntry.Status;
|
|
1171
1274
|
|
|
1172
1275
|
readonly oauth: OAuth2Config;
|
|
1276
|
+
/** A random string that is to change whenever oauth changes (enforced on DB level) */
|
|
1277
|
+
readonly oauthRevision?: string;
|
|
1173
1278
|
}
|
|
1174
1279
|
|
|
1175
1280
|
export interface OAuth2Config {
|
|
@@ -1182,23 +1287,27 @@ export interface OAuth2Config {
|
|
|
1182
1287
|
readonly scopeSeparator?: string;
|
|
1183
1288
|
|
|
1184
1289
|
readonly settingsUrl?: string;
|
|
1185
|
-
readonly authorizationParams?: { [key: string]: string }
|
|
1290
|
+
readonly authorizationParams?: { [key: string]: string };
|
|
1186
1291
|
readonly configURL?: string;
|
|
1187
1292
|
}
|
|
1188
1293
|
|
|
1189
1294
|
export namespace AuthProviderEntry {
|
|
1190
1295
|
export type Type = "GitHub" | "GitLab" | string;
|
|
1191
1296
|
export type Status = "pending" | "verified";
|
|
1192
|
-
export type NewEntry = Pick<AuthProviderEntry, "ownerId" | "host" | "type"> & {
|
|
1193
|
-
|
|
1297
|
+
export type NewEntry = Pick<AuthProviderEntry, "ownerId" | "host" | "type"> & {
|
|
1298
|
+
clientId?: string;
|
|
1299
|
+
clientSecret?: string;
|
|
1300
|
+
};
|
|
1301
|
+
export type UpdateEntry = Pick<AuthProviderEntry, "id" | "ownerId"> &
|
|
1302
|
+
Pick<OAuth2Config, "clientId" | "clientSecret">;
|
|
1194
1303
|
export function redact(entry: AuthProviderEntry): AuthProviderEntry {
|
|
1195
1304
|
return {
|
|
1196
1305
|
...entry,
|
|
1197
1306
|
oauth: {
|
|
1198
1307
|
...entry.oauth,
|
|
1199
|
-
clientSecret: "redacted"
|
|
1200
|
-
}
|
|
1201
|
-
}
|
|
1308
|
+
clientSecret: "redacted",
|
|
1309
|
+
},
|
|
1310
|
+
};
|
|
1202
1311
|
}
|
|
1203
1312
|
}
|
|
1204
1313
|
|