@gitpod/gitpod-protocol 0.1.5-server-vscode-oauth2.11 → 0.1.5-server-vscode-oauth2.14
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 +49 -4
- package/lib/accounting-protocol.d.ts +10 -11
- package/lib/accounting-protocol.d.ts.map +1 -1
- package/lib/accounting-protocol.js +26 -36
- package/lib/accounting-protocol.js.map +1 -1
- package/lib/admin-protocol.d.ts +12 -0
- package/lib/admin-protocol.d.ts.map +1 -1
- package/lib/admin-protocol.js.map +1 -1
- package/lib/analytics.d.ts +4 -4
- 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 +18 -5
- package/lib/context-url.d.ts.map +1 -1
- package/lib/context-url.js +59 -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 +2 -2
- 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 +8 -8
- 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 +4 -4
- 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 +9 -11
- package/lib/encryption/key-provider.js.map +1 -1
- package/lib/env.d.ts +1 -1
- package/lib/env.d.ts.map +1 -1
- package/lib/env.js +6 -6
- package/lib/env.js.map +1 -1
- package/lib/gitpod-file-parser.d.ts.map +1 -1
- package/lib/gitpod-file-parser.js +7 -7
- 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 +57 -31
- package/lib/gitpod-service.d.ts.map +1 -1
- package/lib/gitpod-service.js +26 -27
- 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 +105 -0
- package/lib/ide-protocol.d.ts.map +1 -0
- package/lib/ide-protocol.js +8 -0
- package/lib/ide-protocol.js.map +1 -0
- package/lib/index.d.ts +16 -13
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +3 -0
- package/lib/index.js.map +1 -1
- package/lib/installation-admin-protocol.d.ts +27 -0
- package/lib/installation-admin-protocol.d.ts.map +1 -0
- package/lib/installation-admin-protocol.js +30 -0
- package/lib/installation-admin-protocol.js.map +1 -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 +21 -21
- 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 +10 -7
- 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 +21 -21
- package/lib/messaging/client-call-metrics.js.map +1 -1
- package/lib/messaging/error.d.ts +2 -1
- package/lib/messaging/error.d.ts.map +1 -1
- package/lib/messaging/error.js +4 -2
- 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.d.ts +1 -17
- package/lib/messaging/node/connection.d.ts.map +1 -1
- package/lib/messaging/node/connection.js +23 -59
- 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/oss-allowlist.d.ts +14 -0
- package/lib/oss-allowlist.d.ts.map +1 -0
- package/lib/oss-allowlist.js +8 -0
- package/lib/oss-allowlist.js.map +1 -0
- 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 +4 -4
- 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 +83 -78
- package/lib/protocol.d.ts.map +1 -1
- package/lib/protocol.js +96 -85
- package/lib/protocol.js.map +1 -1
- package/lib/snapshot-url.d.ts +14 -0
- package/lib/snapshot-url.d.ts.map +1 -0
- package/lib/snapshot-url.js +26 -0
- package/lib/snapshot-url.js.map +1 -0
- package/{src/theia-plugins.ts → lib/snapshot-url.spec.d.ts} +2 -6
- package/lib/snapshot-url.spec.d.ts.map +1 -0
- package/lib/snapshot-url.spec.js +41 -0
- package/lib/snapshot-url.spec.js.map +1 -0
- package/lib/team-subscription-protocol.d.ts +5 -3
- package/lib/team-subscription-protocol.d.ts.map +1 -1
- package/lib/team-subscription-protocol.js +7 -7
- package/lib/team-subscription-protocol.js.map +1 -1
- package/lib/teams-projects-protocol.d.ts +13 -2
- package/lib/teams-projects-protocol.d.ts.map +1 -1
- package/lib/teams-projects-protocol.js +10 -3
- 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/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 +1 -0
- package/lib/util/garbage-collected-cache.d.ts.map +1 -1
- package/lib/util/garbage-collected-cache.js +6 -2
- package/lib/util/garbage-collected-cache.js.map +1 -1
- package/lib/util/generate-workspace-id.d.ts +1 -1
- package/lib/util/generate-workspace-id.d.ts.map +1 -1
- package/lib/util/generate-workspace-id.js +452 -435
- package/lib/util/generate-workspace-id.js.map +1 -1
- package/lib/util/generate-workspace-id.spec.js +29 -1
- 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 +1 -4
- package/lib/util/gitpod-cookie.js.map +1 -1
- package/lib/util/gitpod-host-url.d.ts +1 -1
- package/lib/util/gitpod-host-url.d.ts.map +1 -1
- package/lib/util/gitpod-host-url.js +35 -33
- 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 +68 -0
- package/lib/util/jaeger-client-types.d.ts.map +1 -0
- package/lib/{theia-plugins.js → util/jaeger-client-types.js} +1 -1
- package/lib/util/jaeger-client-types.js.map +1 -0
- package/lib/util/logging.d.ts +33 -33
- package/lib/util/logging.d.ts.map +1 -1
- package/lib/util/logging.js +22 -23
- 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 +2 -3
- 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 +12 -12
- package/lib/util/parse-workspace-id.spec.js.map +1 -1
- package/lib/util/queue.spec.js +13 -10
- package/lib/util/queue.spec.js.map +1 -1
- package/lib/util/repeat.d.ts +15 -0
- package/lib/util/repeat.d.ts.map +1 -0
- package/lib/util/repeat.js +55 -0
- package/lib/util/repeat.js.map +1 -0
- 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.map +1 -1
- package/lib/util/timeutil.js +8 -8
- package/lib/util/timeutil.js.map +1 -1
- package/lib/util/timeutil.spec.d.ts.map +1 -1
- package/lib/util/timeutil.spec.js +2 -2
- package/lib/util/timeutil.spec.js.map +1 -1
- package/lib/util/tracing.d.ts +52 -6
- package/lib/util/tracing.d.ts.map +1 -1
- package/lib/util/tracing.js +161 -22
- package/lib/util/tracing.js.map +1 -1
- package/lib/util/tracing.spec.d.ts +7 -0
- package/lib/util/tracing.spec.d.ts.map +1 -0
- package/lib/util/tracing.spec.js +121 -0
- package/lib/util/tracing.spec.js.map +1 -0
- 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 +17 -2
- package/lib/workspace-cluster.js.map +1 -1
- package/lib/workspace-instance.d.ts +23 -4
- 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 +21 -14
- package/pkg-yarn.lock +12 -8
- package/provenance-bundle.jsonl +2 -0
- package/src/accounting-protocol.ts +53 -53
- package/src/admin-protocol.ts +35 -18
- package/src/analytics.ts +27 -27
- package/src/auth.ts +2 -2
- package/src/context-url.spec.ts +37 -9
- package/src/context-url.ts +94 -36
- 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 +9 -9
- package/src/gitpod-file-parser.spec.ts +55 -61
- package/src/gitpod-file-parser.ts +16 -17
- package/src/gitpod-service.ts +167 -113
- package/src/headless-workspace-log.ts +6 -4
- package/src/ide-frontend-service.ts +2 -2
- package/src/ide-protocol.ts +119 -0
- package/src/index.ts +16 -13
- package/src/installation-admin-protocol.ts +42 -0
- package/src/license-protocol.ts +5 -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 +6 -5
- package/src/messaging/handler.ts +6 -6
- package/src/messaging/node/connection.ts +23 -70
- package/src/messaging/proxy-factory.ts +23 -30
- package/src/oss-allowlist.ts +15 -0
- package/src/payment-protocol.ts +2 -2
- package/src/permission.ts +40 -32
- package/src/plans.ts +236 -189
- package/src/protocol.ts +280 -277
- package/src/snapshot-url.spec.ts +27 -0
- package/src/snapshot-url.ts +27 -0
- package/src/team-subscription-protocol.ts +33 -23
- package/src/teams-projects-protocol.ts +24 -8
- 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/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 +9 -6
- package/src/util/generate-workspace-id.spec.ts +26 -6
- package/src/util/generate-workspace-id.ts +458 -440
- 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 +41 -38
- package/src/util/grpc.ts +1 -1
- package/src/util/jaeger-client-types.ts +102 -0
- package/src/util/logging.ts +81 -71
- 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 +6 -7
- package/src/util/queue.spec.ts +27 -25
- package/src/util/repeat.ts +45 -0
- 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 +15 -11
- package/src/util/tracing.spec.ts +88 -0
- package/src/util/tracing.ts +202 -31
- package/src/util/workspace-port-authentication.ts +10 -13
- package/src/workspace-cluster.ts +26 -15
- package/src/workspace-instance.ts +48 -24
- 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/repeater.d.ts +0 -22
- package/lib/util/repeater.d.ts.map +0 -1
- package/lib/util/repeater.js +0 -65
- package/lib/util/repeater.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/util/jaeger-client.d.ts +0 -105
- package/src/util/repeater.ts +0 -49
- package/src/util/safe-promise.ts +0 -26
|
@@ -3,8 +3,7 @@
|
|
|
3
3
|
* Licensed under the GNU Affero General Public License (AGPL).
|
|
4
4
|
* See License-AGPL.txt in the project root for license information.
|
|
5
5
|
*/
|
|
6
|
-
import * as cookie from
|
|
7
|
-
|
|
6
|
+
import * as cookie from "cookie";
|
|
8
7
|
|
|
9
8
|
/**
|
|
10
9
|
* This cookie indicates whether the connected client is a Gitpod user (= "has logged in within the last year") or not.
|
|
@@ -20,20 +19,20 @@ export const VALUE = "true";
|
|
|
20
19
|
export function options(domain: string): cookie.CookieSerializeOptions {
|
|
21
20
|
// Reference: https://developer.mozilla.org/en-US/docs/Web/HTTP/Cookies
|
|
22
21
|
return {
|
|
23
|
-
path: "/",
|
|
22
|
+
path: "/", // make sure we send the cookie to all sub-pages
|
|
24
23
|
httpOnly: false,
|
|
25
24
|
secure: false,
|
|
26
|
-
maxAge: 60 * 60 * 24 * 365,
|
|
27
|
-
sameSite: "lax",
|
|
28
|
-
domain: `.${domain}`,
|
|
25
|
+
maxAge: 60 * 60 * 24 * 365, // 1 year
|
|
26
|
+
sameSite: "lax", // default: true. "Lax" needed to ensure we see cookies from users that neavigate to gitpod.io from external sites
|
|
27
|
+
domain: `.${domain}`, // explicilty include subdomains to not only cover "gitpod.io", but also "www.gitpod.io" or workspaces
|
|
29
28
|
};
|
|
30
|
-
}
|
|
29
|
+
}
|
|
31
30
|
|
|
32
31
|
export function generateCookie(domain: string): string {
|
|
33
32
|
return cookie.serialize(NAME, VALUE, options(domain));
|
|
34
|
-
}
|
|
33
|
+
}
|
|
35
34
|
|
|
36
35
|
export function isPresent(cookies: string): boolean {
|
|
37
36
|
// needs to match the old (gitpod-user=loggedIn) and new (gitpod-user=true) values to ensure a smooth transition during rollout.
|
|
38
37
|
return !!cookies.match(`${NAME}=`);
|
|
39
|
-
}
|
|
38
|
+
}
|
|
@@ -4,46 +4,73 @@
|
|
|
4
4
|
* See License-AGPL.txt in the project root for license information.
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
import * as chai from
|
|
8
|
-
import { suite, test } from
|
|
9
|
-
import { GitpodHostUrl } from
|
|
7
|
+
import * as chai from "chai";
|
|
8
|
+
import { suite, test } from "mocha-typescript";
|
|
9
|
+
import { GitpodHostUrl } from "./gitpod-host-url";
|
|
10
10
|
const expect = chai.expect;
|
|
11
11
|
|
|
12
12
|
@suite
|
|
13
13
|
export class GitpodHostUrlTest {
|
|
14
|
-
|
|
15
14
|
@test public parseWorkspaceId_pathBased() {
|
|
16
|
-
const actual = GitpodHostUrl.fromWorkspaceUrl(
|
|
15
|
+
const actual = GitpodHostUrl.fromWorkspaceUrl(
|
|
16
|
+
"http://35.223.201.195/workspace/bc77e03d-c781-4235-bca0-e24087f5e472/",
|
|
17
|
+
).workspaceId;
|
|
17
18
|
expect(actual).to.equal("bc77e03d-c781-4235-bca0-e24087f5e472");
|
|
18
19
|
}
|
|
19
20
|
|
|
20
21
|
@test public parseWorkspaceId_hosts_withEnvVarsInjected() {
|
|
21
|
-
const actual = GitpodHostUrl.fromWorkspaceUrl(
|
|
22
|
+
const actual = GitpodHostUrl.fromWorkspaceUrl(
|
|
23
|
+
"https://gray-grasshopper-nfbitfia.ws-eu02.gitpod-staging.com/#passedin=test%20value/https://github.com/gitpod-io/gitpod-test-repo",
|
|
24
|
+
).workspaceId;
|
|
22
25
|
expect(actual).to.equal("gray-grasshopper-nfbitfia");
|
|
23
26
|
}
|
|
24
27
|
|
|
25
28
|
@test public async testWithoutWorkspacePrefix() {
|
|
26
|
-
expect(
|
|
29
|
+
expect(
|
|
30
|
+
GitpodHostUrl.fromWorkspaceUrl("https://3000-moccasin-ferret-155799b3.ws-eu02.gitpod-staging.com/")
|
|
31
|
+
.withoutWorkspacePrefix()
|
|
32
|
+
.toString(),
|
|
33
|
+
).to.equal("https://gitpod-staging.com/");
|
|
27
34
|
}
|
|
28
35
|
|
|
29
36
|
@test public async testWithoutWorkspacePrefix2() {
|
|
30
|
-
expect(
|
|
37
|
+
expect(
|
|
38
|
+
GitpodHostUrl.fromWorkspaceUrl("https://gitpod-staging.com/").withoutWorkspacePrefix().toString(),
|
|
39
|
+
).to.equal("https://gitpod-staging.com/");
|
|
31
40
|
}
|
|
32
41
|
|
|
33
42
|
@test public async testWithoutWorkspacePrefix3() {
|
|
34
|
-
expect(
|
|
43
|
+
expect(
|
|
44
|
+
GitpodHostUrl.fromWorkspaceUrl("https://gray-rook-5523v5d8.ws-dev.my-branch-1234.staging.gitpod-dev.com/")
|
|
45
|
+
.withoutWorkspacePrefix()
|
|
46
|
+
.toString(),
|
|
47
|
+
).to.equal("https://my-branch-1234.staging.gitpod-dev.com/");
|
|
35
48
|
}
|
|
36
49
|
|
|
37
50
|
@test public async testWithoutWorkspacePrefix4() {
|
|
38
|
-
expect(
|
|
51
|
+
expect(
|
|
52
|
+
GitpodHostUrl.fromWorkspaceUrl("https://my-branch-1234.staging.gitpod-dev.com/")
|
|
53
|
+
.withoutWorkspacePrefix()
|
|
54
|
+
.toString(),
|
|
55
|
+
).to.equal("https://my-branch-1234.staging.gitpod-dev.com/");
|
|
39
56
|
}
|
|
40
57
|
|
|
41
58
|
@test public async testWithoutWorkspacePrefix5() {
|
|
42
|
-
expect(
|
|
59
|
+
expect(
|
|
60
|
+
GitpodHostUrl.fromWorkspaceUrl("https://abc-nice-brunch-4224.staging.gitpod-dev.com/")
|
|
61
|
+
.withoutWorkspacePrefix()
|
|
62
|
+
.toString(),
|
|
63
|
+
).to.equal("https://abc-nice-brunch-4224.staging.gitpod-dev.com/");
|
|
43
64
|
}
|
|
44
65
|
|
|
45
66
|
@test public async testWithoutWorkspacePrefix6() {
|
|
46
|
-
expect(
|
|
67
|
+
expect(
|
|
68
|
+
GitpodHostUrl.fromWorkspaceUrl(
|
|
69
|
+
"https://gray-rook-5523v5d8.ws-dev.abc-nice-brunch-4224.staging.gitpod-dev.com/",
|
|
70
|
+
)
|
|
71
|
+
.withoutWorkspacePrefix()
|
|
72
|
+
.toString(),
|
|
73
|
+
).to.equal("https://abc-nice-brunch-4224.staging.gitpod-dev.com/");
|
|
47
74
|
}
|
|
48
75
|
}
|
|
49
|
-
module.exports = new GitpodHostUrlTest()
|
|
76
|
+
module.exports = new GitpodHostUrlTest();
|
|
@@ -4,35 +4,36 @@
|
|
|
4
4
|
* See License-AGPL.txt in the project root for license information.
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
const URL = require(
|
|
8
|
-
import { log } from
|
|
7
|
+
const URL = require("url").URL || window.URL;
|
|
8
|
+
import { log } from "./logging";
|
|
9
9
|
|
|
10
10
|
export interface UrlChange {
|
|
11
|
-
(old: URL): Partial<URL
|
|
11
|
+
(old: URL): Partial<URL>;
|
|
12
12
|
}
|
|
13
13
|
export type UrlUpdate = UrlChange | Partial<URL>;
|
|
14
14
|
|
|
15
|
-
const
|
|
15
|
+
const baseWorkspaceIDRegex =
|
|
16
|
+
"(([a-f][0-9a-f]{7}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})|([0-9a-z]{2,16}-[0-9a-z]{2,16}-[0-9a-z]{8,11}))";
|
|
16
17
|
|
|
17
18
|
// this pattern matches v4 UUIDs as well as the new generated workspace ids (e.g. pink-panda-ns35kd21)
|
|
18
|
-
const workspaceIDRegex = RegExp(`^${
|
|
19
|
+
const workspaceIDRegex = RegExp(`^${baseWorkspaceIDRegex}$`);
|
|
19
20
|
|
|
20
21
|
// this pattern matches URL prefixes of workspaces
|
|
21
|
-
const workspaceUrlPrefixRegex = RegExp(`^([0-9]{4,6}-)?${
|
|
22
|
+
const workspaceUrlPrefixRegex = RegExp(`^([0-9]{4,6}-)?${baseWorkspaceIDRegex}\\.`);
|
|
22
23
|
|
|
23
24
|
export class GitpodHostUrl {
|
|
24
25
|
readonly url: URL;
|
|
25
26
|
|
|
26
27
|
constructor(urlParam?: string | URL) {
|
|
27
|
-
if (urlParam === undefined || typeof urlParam ===
|
|
28
|
-
this.url = new URL(urlParam ||
|
|
29
|
-
this.url.search =
|
|
30
|
-
this.url.hash =
|
|
31
|
-
this.url.pathname =
|
|
28
|
+
if (urlParam === undefined || typeof urlParam === "string") {
|
|
29
|
+
this.url = new URL(urlParam || "https://gitpod.io");
|
|
30
|
+
this.url.search = "";
|
|
31
|
+
this.url.hash = "";
|
|
32
|
+
this.url.pathname = "";
|
|
32
33
|
} else if (urlParam instanceof URL) {
|
|
33
34
|
this.url = urlParam;
|
|
34
35
|
} else {
|
|
35
|
-
log.error(
|
|
36
|
+
log.error("Unexpected urlParam", { urlParam });
|
|
36
37
|
}
|
|
37
38
|
}
|
|
38
39
|
|
|
@@ -45,7 +46,7 @@ export class GitpodHostUrl {
|
|
|
45
46
|
}
|
|
46
47
|
|
|
47
48
|
withDomainPrefix(prefix: string): GitpodHostUrl {
|
|
48
|
-
return this.with(url => ({ host: prefix + url.host }))
|
|
49
|
+
return this.with((url) => ({ host: prefix + url.host }));
|
|
49
50
|
}
|
|
50
51
|
|
|
51
52
|
withoutWorkspacePrefix(): GitpodHostUrl {
|
|
@@ -58,14 +59,14 @@ export class GitpodHostUrl {
|
|
|
58
59
|
}
|
|
59
60
|
|
|
60
61
|
withoutDomainPrefix(removeSegmentsCount: number): GitpodHostUrl {
|
|
61
|
-
return this.with(url => ({ host: url.host.split(
|
|
62
|
+
return this.with((url) => ({ host: url.host.split(".").splice(removeSegmentsCount).join(".") }));
|
|
62
63
|
}
|
|
63
64
|
|
|
64
65
|
with(urlUpdate: UrlUpdate) {
|
|
65
|
-
const update = typeof urlUpdate ===
|
|
66
|
-
const addSlashToPath = update.pathname && update.pathname.length > 0 && !update.pathname.startsWith(
|
|
66
|
+
const update = typeof urlUpdate === "function" ? urlUpdate(this.url) : urlUpdate;
|
|
67
|
+
const addSlashToPath = update.pathname && update.pathname.length > 0 && !update.pathname.startsWith("/");
|
|
67
68
|
if (addSlashToPath) {
|
|
68
|
-
update.pathname =
|
|
69
|
+
update.pathname = "/" + update.pathname;
|
|
69
70
|
}
|
|
70
71
|
const result = Object.assign(new URL(this.toString()), update);
|
|
71
72
|
return new GitpodHostUrl(result);
|
|
@@ -73,50 +74,53 @@ export class GitpodHostUrl {
|
|
|
73
74
|
|
|
74
75
|
withApi(urlUpdate?: UrlUpdate) {
|
|
75
76
|
const updated = urlUpdate ? this.with(urlUpdate) : this;
|
|
76
|
-
return updated.with(url => ({ pathname: `/api${url.pathname}` }));
|
|
77
|
+
return updated.with((url) => ({ pathname: `/api${url.pathname}` }));
|
|
77
78
|
}
|
|
78
79
|
|
|
79
80
|
withContext(contextUrl: string) {
|
|
80
|
-
return this.with(url => ({ hash: contextUrl }));
|
|
81
|
+
return this.with((url) => ({ hash: contextUrl }));
|
|
81
82
|
}
|
|
82
83
|
|
|
83
84
|
asWebsocket(): GitpodHostUrl {
|
|
84
|
-
return this.with(url => ({ protocol: url.protocol ===
|
|
85
|
+
return this.with((url) => ({ protocol: url.protocol === "https:" ? "wss:" : "ws:" }));
|
|
85
86
|
}
|
|
86
87
|
|
|
87
88
|
asDashboard(): GitpodHostUrl {
|
|
88
|
-
return this.with(url => ({ pathname:
|
|
89
|
+
return this.with((url) => ({ pathname: "/" }));
|
|
89
90
|
}
|
|
90
91
|
|
|
91
92
|
asLogin(): GitpodHostUrl {
|
|
92
|
-
return this.with(url => ({ pathname:
|
|
93
|
+
return this.with((url) => ({ pathname: "/login" }));
|
|
93
94
|
}
|
|
94
95
|
|
|
95
96
|
asUpgradeSubscription(): GitpodHostUrl {
|
|
96
|
-
return this.with(url => ({ pathname:
|
|
97
|
+
return this.with((url) => ({ pathname: "/plans" }));
|
|
97
98
|
}
|
|
98
99
|
|
|
99
100
|
asAccessControl(): GitpodHostUrl {
|
|
100
|
-
return this.with(url => ({ pathname:
|
|
101
|
+
return this.with((url) => ({ pathname: "/integrations" }));
|
|
101
102
|
}
|
|
102
103
|
|
|
103
104
|
asSettings(): GitpodHostUrl {
|
|
104
|
-
return this.with(url => ({ pathname:
|
|
105
|
+
return this.with((url) => ({ pathname: "/settings" }));
|
|
105
106
|
}
|
|
106
107
|
|
|
107
|
-
|
|
108
|
-
return this.with(url => ({ pathname:
|
|
108
|
+
asPreferences(): GitpodHostUrl {
|
|
109
|
+
return this.with((url) => ({ pathname: "/preferences" }));
|
|
109
110
|
}
|
|
110
111
|
|
|
111
112
|
asStart(workspaceId = this.workspaceId): GitpodHostUrl {
|
|
112
113
|
return this.withoutWorkspacePrefix().with({
|
|
113
|
-
pathname:
|
|
114
|
-
hash:
|
|
114
|
+
pathname: "/start/",
|
|
115
|
+
hash: "#" + workspaceId,
|
|
115
116
|
});
|
|
116
117
|
}
|
|
117
118
|
|
|
118
119
|
asWorkspaceAuth(instanceID: string, redirect?: boolean): GitpodHostUrl {
|
|
119
|
-
return this.with(url => ({
|
|
120
|
+
return this.with((url) => ({
|
|
121
|
+
pathname: `/api/auth/workspace-cookie/${instanceID}`,
|
|
122
|
+
search: redirect ? "redirect" : "",
|
|
123
|
+
}));
|
|
120
124
|
}
|
|
121
125
|
|
|
122
126
|
toString() {
|
|
@@ -125,7 +129,7 @@ export class GitpodHostUrl {
|
|
|
125
129
|
|
|
126
130
|
toStringWoRootSlash() {
|
|
127
131
|
let result = this.toString();
|
|
128
|
-
if (result.endsWith(
|
|
132
|
+
if (result.endsWith("/")) {
|
|
129
133
|
result = result.slice(0, result.length - 1);
|
|
130
134
|
}
|
|
131
135
|
return result;
|
|
@@ -142,7 +146,7 @@ export class GitpodHostUrl {
|
|
|
142
146
|
}
|
|
143
147
|
}
|
|
144
148
|
|
|
145
|
-
const pathSegs = this.url.pathname.split("/")
|
|
149
|
+
const pathSegs = this.url.pathname.split("/");
|
|
146
150
|
if (pathSegs.length > 3 && pathSegs[1] === "workspace") {
|
|
147
151
|
return pathSegs[2];
|
|
148
152
|
}
|
|
@@ -150,22 +154,21 @@ export class GitpodHostUrl {
|
|
|
150
154
|
return undefined;
|
|
151
155
|
}
|
|
152
156
|
|
|
153
|
-
get blobServe(): boolean
|
|
157
|
+
get blobServe(): boolean {
|
|
154
158
|
const hostSegments = this.url.host.split(".");
|
|
155
|
-
if (hostSegments[0] ===
|
|
159
|
+
if (hostSegments[0] === "blobserve") {
|
|
156
160
|
return true;
|
|
157
161
|
}
|
|
158
162
|
|
|
159
|
-
const pathSegments = this.url.pathname.split("/")
|
|
163
|
+
const pathSegments = this.url.pathname.split("/");
|
|
160
164
|
return pathSegments[0] === "blobserve";
|
|
161
165
|
}
|
|
162
166
|
|
|
163
167
|
asSorry(message: string) {
|
|
164
|
-
return this.with({ pathname:
|
|
168
|
+
return this.with({ pathname: "/sorry", hash: message });
|
|
165
169
|
}
|
|
166
170
|
|
|
167
171
|
asApiLogout(): GitpodHostUrl {
|
|
168
|
-
return this.withApi(url => ({ pathname:
|
|
172
|
+
return this.withApi((url) => ({ pathname: "/logout/" }));
|
|
169
173
|
}
|
|
170
|
-
|
|
171
174
|
}
|
package/src/util/grpc.ts
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* See License-AGPL.txt in the project root for license information.
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
export const defaultGRPCOptions = {
|
|
8
8
|
"grpc.keepalive_timeout_ms": 10000,
|
|
9
9
|
"grpc.keepalive_time_ms": 60000,
|
|
10
10
|
"grpc.http2.min_time_between_pings_ms": 10000,
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2020 Gitpod GmbH. All rights reserved.
|
|
3
|
+
* Licensed under the GNU Affero General Public License (AGPL).
|
|
4
|
+
* See License-AGPL.txt in the project root for license information.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { opentracing } from "jaeger-client";
|
|
8
|
+
|
|
9
|
+
// Type definitions for jaeger-client which are not exported by @types/jaeger-client
|
|
10
|
+
// Project: https://github.com/uber/jaeger-client-node
|
|
11
|
+
// Definitions by: Julian Steger <https://github.com/julianste>
|
|
12
|
+
// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
|
|
13
|
+
|
|
14
|
+
export interface TracingConfig {
|
|
15
|
+
serviceName?: string;
|
|
16
|
+
disable?: boolean;
|
|
17
|
+
sampler?: SamplerConfig;
|
|
18
|
+
reporter?: ReporterConfig;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export interface TracingOptions {
|
|
22
|
+
reporter?: Reporter;
|
|
23
|
+
metrics?: MetricsFactory;
|
|
24
|
+
logger?: Logger;
|
|
25
|
+
tags?: any;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export interface ReporterConfig {
|
|
29
|
+
logSpans?: boolean;
|
|
30
|
+
agentHost?: string;
|
|
31
|
+
agentPort?: number;
|
|
32
|
+
flushIntervalMs?: number;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
export interface SamplerConfig {
|
|
36
|
+
type: string;
|
|
37
|
+
param: number;
|
|
38
|
+
host?: string;
|
|
39
|
+
port?: number;
|
|
40
|
+
refreshIntervalMs?: number;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
export interface Logger {
|
|
44
|
+
info(msg: string): void;
|
|
45
|
+
error(msg: string): void;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
export interface Reporter {
|
|
49
|
+
report(span: opentracing.Span): void;
|
|
50
|
+
close(callback?: () => void): void;
|
|
51
|
+
setProcess(serviceName: string, tags: any): void;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
export interface MetricsFactory {
|
|
55
|
+
createCounter(name: string, tags: any): Counter;
|
|
56
|
+
createTimer(name: string, tags: any): Timer;
|
|
57
|
+
createGauge(name: string, tags: any): Gauge;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
// Counter tracks the number of times an event has occurred
|
|
61
|
+
export interface Counter {
|
|
62
|
+
// Adds the given value to the counter.
|
|
63
|
+
increment(delta: number): void;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
// Timer tracks how long an operation took and also computes percentiles.
|
|
67
|
+
export interface Timer {
|
|
68
|
+
// Records the time passed in.
|
|
69
|
+
record(value: number): void;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
// Gauge returns instantaneous measurements of something as an int64 value
|
|
73
|
+
export interface Gauge {
|
|
74
|
+
// Update the gauge to the value passed in.
|
|
75
|
+
update(value: number): void;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
// export function initTracer(
|
|
79
|
+
// tracingConfig: TracingConfig,
|
|
80
|
+
// tracingOptions: TracingOptions,
|
|
81
|
+
// ): opentracing.Tracer;
|
|
82
|
+
|
|
83
|
+
// export function initTracerFromEnv(
|
|
84
|
+
// tracingConfig: TracingConfig,
|
|
85
|
+
// tracingOptions: TracingOptions,
|
|
86
|
+
// ): opentracing.Tracer;
|
|
87
|
+
|
|
88
|
+
export interface SamplingDecision {
|
|
89
|
+
sample: boolean;
|
|
90
|
+
retryable: boolean;
|
|
91
|
+
tags: any;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
// added by TypeFox
|
|
95
|
+
export interface Sampler {
|
|
96
|
+
name(): string;
|
|
97
|
+
isSampled(operation: string, tags: any): boolean;
|
|
98
|
+
onCreateSpan(span: opentracing.Span): SamplingDecision;
|
|
99
|
+
onSetOperationName(span: opentracing.Span, operationName: string): SamplingDecision;
|
|
100
|
+
onSetTag(span: opentracing.Span, key: string, value: any): SamplingDecision;
|
|
101
|
+
close(callback: () => void): void;
|
|
102
|
+
}
|