@gitpod/gitpod-protocol 0.1.5-server-vscode-ouath2.18 → 0.1.5-server-vscode-oauth2.24
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 +31 -41
- package/lib/accounting-protocol.js.map +1 -1
- package/lib/admin-protocol.d.ts +20 -2
- package/lib/admin-protocol.d.ts.map +1 -1
- package/lib/admin-protocol.js +2 -13
- package/lib/admin-protocol.js.map +1 -1
- package/lib/analytics.d.ts +12 -1
- 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 +63 -10
- 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 +81 -48
- 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 +4 -4
- package/lib/email-protocol.js.map +1 -1
- package/lib/encryption/container-module.d.ts.map +1 -1
- package/lib/encryption/container-module.js +4 -4
- 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 +25 -26
- 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 +29 -37
- 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 +30 -44
- 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 +31 -38
- package/lib/encryption/key-provider.js.map +1 -1
- package/lib/env.d.ts +1 -2
- package/lib/env.d.ts.map +1 -1
- package/lib/env.js +17 -19
- package/lib/env.js.map +1 -1
- package/lib/gitpod-file-parser.d.ts.map +1 -1
- package/lib/gitpod-file-parser.js +26 -42
- package/lib/gitpod-file-parser.js.map +1 -1
- package/lib/gitpod-file-parser.spec.js +145 -142
- package/lib/gitpod-file-parser.spec.js.map +1 -1
- package/lib/gitpod-service.d.ts +67 -31
- package/lib/gitpod-service.d.ts.map +1 -1
- package/lib/gitpod-service.js +162 -309
- 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 +3 -3
- package/lib/messaging/browser/connection.d.ts.map +1 -1
- package/lib/messaging/browser/connection.js +173 -36
- 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 +42 -59
- 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 +37 -38
- 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 +10 -0
- 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 +24 -60
- package/lib/messaging/node/connection.js.map +1 -1
- package/lib/messaging/proxy-factory.d.ts +3 -1
- package/lib/messaging/proxy-factory.d.ts.map +1 -1
- package/lib/messaging/proxy-factory.js +74 -163
- 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 -4
- package/lib/permission.d.ts.map +1 -1
- package/lib/permission.js +39 -31
- 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 +225 -209
- 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 +131 -190
- 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 +17 -17
- package/lib/team-subscription-protocol.js.map +1 -1
- package/lib/teams-projects-protocol.d.ts +16 -3
- package/lib/teams-projects-protocol.d.ts.map +1 -1
- package/lib/teams-projects-protocol.js +11 -15
- 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 +44 -26
- package/lib/util/analytics.js.map +1 -1
- package/lib/util/async-iterator.d.ts.map +1 -1
- package/lib/util/async-iterator.js +57 -135
- package/lib/util/async-iterator.js.map +1 -1
- package/lib/util/cancelable.js +17 -59
- package/lib/util/cancelable.js.map +1 -1
- package/lib/util/date-time.js +11 -11
- package/lib/util/date-time.js.map +1 -1
- package/lib/util/deferred.js +10 -12
- package/lib/util/deferred.js.map +1 -1
- package/lib/util/disposable.d.ts.map +1 -1
- package/lib/util/disposable.js +27 -40
- package/lib/util/disposable.js.map +1 -1
- package/lib/util/event.d.ts.map +1 -1
- package/lib/util/event.js +63 -77
- 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 +27 -47
- 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 +460 -499
- package/lib/util/generate-workspace-id.js.map +1 -1
- package/lib/util/generate-workspace-id.spec.js +61 -78
- package/lib/util/generate-workspace-id.spec.js.map +1 -1
- package/lib/util/gitpod-cookie.d.ts +20 -0
- package/lib/util/gitpod-cookie.d.ts.map +1 -0
- package/lib/util/gitpod-cookie.js +41 -0
- package/lib/util/gitpod-cookie.js.map +1 -0
- 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 +106 -114
- 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 +97 -135
- 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 +3 -3
- 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 +87 -129
- 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 +10 -0
- package/lib/util/parse-workspace-id.d.ts.map +1 -1
- package/lib/util/parse-workspace-id.js +30 -7
- package/lib/util/parse-workspace-id.js.map +1 -1
- package/lib/util/parse-workspace-id.spec.d.ts +4 -0
- package/lib/util/parse-workspace-id.spec.d.ts.map +1 -1
- package/lib/util/parse-workspace-id.spec.js +123 -84
- package/lib/util/parse-workspace-id.spec.js.map +1 -1
- package/lib/util/queue.js +16 -55
- package/lib/util/queue.js.map +1 -1
- package/lib/util/queue.spec.js +147 -288
- 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 +15 -46
- package/lib/util/semaphore.js.map +1 -1
- package/lib/util/skip-if.d.ts.map +1 -1
- package/lib/util/skip-if.js +6 -6
- package/lib/util/skip-if.js.map +1 -1
- package/lib/util/timeutil.d.ts.map +1 -1
- package/lib/util/timeutil.js +16 -16
- package/lib/util/timeutil.js.map +1 -1
- package/lib/util/timeutil.spec.d.ts.map +1 -1
- package/lib/util/timeutil.spec.js +21 -24
- 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 +199 -64
- 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 +9 -12
- package/lib/util/workspace-port-authentication.js.map +1 -1
- package/lib/workspace-cluster.d.ts +15 -3
- package/lib/workspace-cluster.d.ts.map +1 -1
- package/lib/workspace-cluster.js +19 -4
- package/lib/workspace-cluster.js.map +1 -1
- package/lib/workspace-instance.d.ts +25 -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 +22 -13
- package/pkg-yarn.lock +12 -7
- package/provenance-bundle.jsonl +2 -0
- package/src/accounting-protocol.ts +53 -53
- package/src/admin-protocol.ts +43 -20
- package/src/analytics.ts +28 -15
- 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 -10
- package/src/gitpod-file-parser.spec.ts +55 -61
- package/src/gitpod-file-parser.ts +16 -17
- package/src/gitpod-service.ts +174 -109
- 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 +185 -21
- 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 +13 -1
- package/src/messaging/node/connection.ts +23 -70
- package/src/messaging/proxy-factory.ts +32 -33
- package/src/oss-allowlist.ts +15 -0
- package/src/payment-protocol.ts +2 -2
- package/src/permission.ts +40 -33
- 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 +27 -9
- package/src/typings/globals.ts +4 -4
- package/src/util/analytics.ts +56 -18
- 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 +38 -0
- package/src/util/gitpod-host-url.spec.ts +40 -13
- package/src/util/gitpod-host-url.ts +41 -38
- package/src/util/grpc.ts +4 -4
- package/src/util/jaeger-client-types.ts +102 -0
- package/src/util/logging.ts +109 -86
- package/src/util/make-link.ts +6 -7
- package/src/util/parse-workspace-id.spec.ts +37 -8
- package/src/util/parse-workspace-id.ts +32 -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 -8
- package/src/workspace-instance.ts +53 -23
- 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 -46
- 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 -118
- 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 -34
- 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
|
@@ -4,94 +4,93 @@
|
|
|
4
4
|
* See License-AGPL.txt in the project root for license information.
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
import { injectable } from
|
|
8
|
-
import * as prometheusClient from
|
|
7
|
+
import { injectable } from "inversify";
|
|
8
|
+
import * as prometheusClient from "prom-client";
|
|
9
9
|
|
|
10
|
-
type GrpcMethodType =
|
|
10
|
+
type GrpcMethodType = "unary" | "client_stream" | "server_stream" | "bidi_stream";
|
|
11
11
|
export interface IGrpcCallMetricsLabels {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
12
|
+
service: string;
|
|
13
|
+
method: string;
|
|
14
|
+
type: GrpcMethodType;
|
|
15
15
|
}
|
|
16
16
|
|
|
17
17
|
export interface IGrpcCallMetricsLabelsWithCode extends IGrpcCallMetricsLabels {
|
|
18
|
-
|
|
18
|
+
code: string;
|
|
19
19
|
}
|
|
20
20
|
|
|
21
21
|
export const IClientCallMetrics = Symbol("IClientCallMetrics");
|
|
22
22
|
|
|
23
23
|
export interface IClientCallMetrics {
|
|
24
|
-
|
|
25
|
-
sent(labels: IGrpcCallMetricsLabels)
|
|
26
|
-
received(labels: IGrpcCallMetricsLabels)
|
|
27
|
-
handled(labels: IGrpcCallMetricsLabelsWithCode)
|
|
24
|
+
started(labels: IGrpcCallMetricsLabels): void;
|
|
25
|
+
sent(labels: IGrpcCallMetricsLabels): void;
|
|
26
|
+
received(labels: IGrpcCallMetricsLabels): void;
|
|
27
|
+
handled(labels: IGrpcCallMetricsLabelsWithCode): void;
|
|
28
28
|
}
|
|
29
29
|
|
|
30
30
|
@injectable()
|
|
31
31
|
export class PrometheusClientCallMetrics implements IClientCallMetrics {
|
|
32
|
+
readonly startedCounter: prometheusClient.Counter<string>;
|
|
33
|
+
readonly sentCounter: prometheusClient.Counter<string>;
|
|
34
|
+
readonly receivedCounter: prometheusClient.Counter<string>;
|
|
35
|
+
readonly handledCounter: prometheusClient.Counter<string>;
|
|
32
36
|
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
+
constructor() {
|
|
38
|
+
this.startedCounter = new prometheusClient.Counter({
|
|
39
|
+
name: "grpc_client_started_total",
|
|
40
|
+
help: "Total number of RPCs started on the client.",
|
|
41
|
+
labelNames: ["grpc_service", "grpc_method", "grpc_type"],
|
|
42
|
+
registers: [prometheusClient.register],
|
|
43
|
+
});
|
|
44
|
+
this.sentCounter = new prometheusClient.Counter({
|
|
45
|
+
name: "grpc_client_msg_sent_total",
|
|
46
|
+
help: " Total number of gRPC stream messages sent by the client.",
|
|
47
|
+
labelNames: ["grpc_service", "grpc_method", "grpc_type"],
|
|
48
|
+
registers: [prometheusClient.register],
|
|
49
|
+
});
|
|
50
|
+
this.receivedCounter = new prometheusClient.Counter({
|
|
51
|
+
name: "grpc_client_msg_received_total",
|
|
52
|
+
help: "Total number of RPC stream messages received by the client.",
|
|
53
|
+
labelNames: ["grpc_service", "grpc_method", "grpc_type"],
|
|
54
|
+
registers: [prometheusClient.register],
|
|
55
|
+
});
|
|
56
|
+
this.handledCounter = new prometheusClient.Counter({
|
|
57
|
+
name: "grpc_client_handled_total",
|
|
58
|
+
help: "Total number of RPCs completed by the client, regardless of success or failure.",
|
|
59
|
+
labelNames: ["grpc_service", "grpc_method", "grpc_type", "grpc_code"],
|
|
60
|
+
registers: [prometheusClient.register],
|
|
61
|
+
});
|
|
62
|
+
}
|
|
37
63
|
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
this.sentCounter = new prometheusClient.Counter({
|
|
46
|
-
name: 'grpc_client_msg_sent_total',
|
|
47
|
-
help: ' Total number of gRPC stream messages sent by the client.',
|
|
48
|
-
labelNames: ['grpc_service', 'grpc_method', 'grpc_type'],
|
|
49
|
-
registers: [prometheusClient.register]
|
|
50
|
-
});
|
|
51
|
-
this.receivedCounter = new prometheusClient.Counter({
|
|
52
|
-
name: 'grpc_client_msg_received_total',
|
|
53
|
-
help: 'Total number of RPC stream messages received by the client.',
|
|
54
|
-
labelNames: ['grpc_service', 'grpc_method', 'grpc_type'],
|
|
55
|
-
registers: [prometheusClient.register]
|
|
56
|
-
});
|
|
57
|
-
this.handledCounter = new prometheusClient.Counter({
|
|
58
|
-
name: 'grpc_client_handled_total',
|
|
59
|
-
help: 'Total number of RPCs completed by the client, regardless of success or failure.',
|
|
60
|
-
labelNames: ['grpc_service', 'grpc_method', 'grpc_type', 'grpc_code'],
|
|
61
|
-
registers: [prometheusClient.register]
|
|
62
|
-
});
|
|
63
|
-
}
|
|
64
|
+
started(labels: IGrpcCallMetricsLabels): void {
|
|
65
|
+
this.startedCounter.inc({
|
|
66
|
+
grpc_service: labels.service,
|
|
67
|
+
grpc_method: labels.method,
|
|
68
|
+
grpc_type: labels.type,
|
|
69
|
+
});
|
|
70
|
+
}
|
|
64
71
|
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
+
sent(labels: IGrpcCallMetricsLabels): void {
|
|
73
|
+
this.sentCounter.inc({
|
|
74
|
+
grpc_service: labels.service,
|
|
75
|
+
grpc_method: labels.method,
|
|
76
|
+
grpc_type: labels.type,
|
|
77
|
+
});
|
|
78
|
+
}
|
|
72
79
|
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
+
received(labels: IGrpcCallMetricsLabels): void {
|
|
81
|
+
this.receivedCounter.inc({
|
|
82
|
+
grpc_service: labels.service,
|
|
83
|
+
grpc_method: labels.method,
|
|
84
|
+
grpc_type: labels.type,
|
|
85
|
+
});
|
|
86
|
+
}
|
|
80
87
|
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
handled(labels: IGrpcCallMetricsLabelsWithCode): void {
|
|
90
|
-
this.handledCounter.inc({
|
|
91
|
-
grpc_service: labels.service,
|
|
92
|
-
grpc_method: labels.method,
|
|
93
|
-
grpc_type: labels.type,
|
|
94
|
-
grpc_code: labels.code
|
|
95
|
-
});
|
|
96
|
-
}
|
|
88
|
+
handled(labels: IGrpcCallMetricsLabelsWithCode): void {
|
|
89
|
+
this.handledCounter.inc({
|
|
90
|
+
grpc_service: labels.service,
|
|
91
|
+
grpc_method: labels.method,
|
|
92
|
+
grpc_type: labels.type,
|
|
93
|
+
grpc_code: labels.code,
|
|
94
|
+
});
|
|
95
|
+
}
|
|
97
96
|
}
|
package/src/messaging/error.ts
CHANGED
|
@@ -4,8 +4,6 @@
|
|
|
4
4
|
* See License-AGPL.txt in the project root for license information.
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
9
7
|
export namespace ErrorCodes {
|
|
10
8
|
// 401 Unauthorized
|
|
11
9
|
export const NOT_AUTHENTICATED = 401;
|
|
@@ -76,6 +74,9 @@ export namespace ErrorCodes {
|
|
|
76
74
|
// 620 Team Subscription Assignment Failed
|
|
77
75
|
export const TEAM_SUBSCRIPTION_ASSIGNMENT_FAILED = 620;
|
|
78
76
|
|
|
79
|
-
//
|
|
80
|
-
export const
|
|
81
|
-
|
|
77
|
+
// 630 Snapshot Error
|
|
78
|
+
export const SNAPSHOT_ERROR = 630;
|
|
79
|
+
|
|
80
|
+
// 640 Headless logs are not available (yet)
|
|
81
|
+
export const HEADLESS_LOG_NOT_YET_AVAILABLE = 640;
|
|
82
|
+
}
|
package/src/messaging/handler.ts
CHANGED
|
@@ -7,9 +7,21 @@
|
|
|
7
7
|
|
|
8
8
|
import { MessageConnection } from "vscode-jsonrpc";
|
|
9
9
|
|
|
10
|
-
export const ConnectionHandler = Symbol(
|
|
10
|
+
export const ConnectionHandler = Symbol("ConnectionHandler");
|
|
11
11
|
|
|
12
12
|
export interface ConnectionHandler {
|
|
13
13
|
readonly path: string;
|
|
14
14
|
onConnection(connection: MessageConnection, session?: object): void;
|
|
15
15
|
}
|
|
16
|
+
|
|
17
|
+
export interface ConnectionEventHandler {
|
|
18
|
+
/**
|
|
19
|
+
* Called when the transport underpinning the connection got closed
|
|
20
|
+
*/
|
|
21
|
+
onTransportDidClose(): void;
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Called when the transport underpinning the connection is (re-)opened
|
|
25
|
+
*/
|
|
26
|
+
onTransportDidOpen(): void;
|
|
27
|
+
}
|
|
@@ -6,82 +6,35 @@
|
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
8
|
import * as ws from "ws";
|
|
9
|
-
import
|
|
10
|
-
import * as https from "https";
|
|
11
|
-
import * as url from "url";
|
|
12
|
-
import * as net from "net";
|
|
13
|
-
import { MessageConnection } from "vscode-jsonrpc";
|
|
14
|
-
import { createWebSocketConnection, IWebSocket } from "vscode-ws-jsonrpc";
|
|
15
|
-
import { log } from '../../util/logging';
|
|
9
|
+
import { IWebSocket } from "vscode-ws-jsonrpc";
|
|
16
10
|
|
|
17
|
-
export
|
|
18
|
-
readonly server: http.Server | https.Server;
|
|
19
|
-
readonly path?: string;
|
|
20
|
-
matches?(request: http.IncomingMessage): boolean;
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
export function createServerWebSocketConnection(options: IServerOptions, onConnect: (connection: MessageConnection) => void): void {
|
|
24
|
-
openJsonRpcSocket(options, socket => {
|
|
25
|
-
onConnect(createWebSocketConnection(socket, console));
|
|
26
|
-
});
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
export function openJsonRpcSocket(options: IServerOptions, onOpen: (socket: IWebSocket) => void): void {
|
|
30
|
-
openSocket(options, socket => {
|
|
31
|
-
const webSocket = toIWebSocket(socket);
|
|
32
|
-
onOpen(webSocket);
|
|
33
|
-
});
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
export interface OnOpen {
|
|
37
|
-
(webSocket: ws, request: http.IncomingMessage, socket: net.Socket, head: Buffer): void;
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
export function openSocket(options: IServerOptions, onOpen: OnOpen): void {
|
|
41
|
-
const wss = new ws.Server({
|
|
42
|
-
noServer: true,
|
|
43
|
-
perMessageDeflate: {
|
|
44
|
-
// don't compress if a message is less than 256kb
|
|
45
|
-
threshold: 256 * 1024
|
|
46
|
-
}
|
|
47
|
-
});
|
|
48
|
-
options.server.on('upgrade', (request: http.IncomingMessage, socket: net.Socket, head: Buffer) => {
|
|
49
|
-
const pathname = request.url ? url.parse(request.url).pathname : undefined;
|
|
50
|
-
if (options.path && pathname === options.path || options.matches && options.matches(request)) {
|
|
51
|
-
wss.handleUpgrade(request, socket, head, webSocket => {
|
|
52
|
-
if (webSocket.readyState === webSocket.OPEN) {
|
|
53
|
-
onOpen(webSocket, request, socket, head);
|
|
54
|
-
} else {
|
|
55
|
-
webSocket.on('open', () => onOpen(webSocket, request, socket, head));
|
|
56
|
-
}
|
|
57
|
-
});
|
|
58
|
-
}
|
|
59
|
-
});
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
export function toIWebSocket(webSocket: ws) {
|
|
63
|
-
let sendsAfterOpen = 0;
|
|
11
|
+
export function toIWebSocket(ws: ws) {
|
|
64
12
|
return <IWebSocket>{
|
|
65
|
-
send: content => {
|
|
66
|
-
if (
|
|
67
|
-
|
|
68
|
-
//log.debug(`Repeated try to send on closed web socket (readyState was ${webSocket.readyState})`, { ws });
|
|
69
|
-
}
|
|
13
|
+
send: (content) => {
|
|
14
|
+
if (ws.readyState >= ws.CLOSING) {
|
|
15
|
+
// ws is already CLOSING/CLOSED, send() would just return an error.
|
|
70
16
|
return;
|
|
71
17
|
}
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
18
|
+
|
|
19
|
+
// in general send-errors should trigger an 'error' event already, we just make sure it actually happens.
|
|
20
|
+
try {
|
|
21
|
+
ws.send(content, (err) => {
|
|
22
|
+
if (!err) {
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
ws.emit("error", err);
|
|
26
|
+
});
|
|
27
|
+
} catch (err) {
|
|
28
|
+
ws.emit("error", err);
|
|
29
|
+
}
|
|
77
30
|
},
|
|
78
|
-
onMessage: cb =>
|
|
79
|
-
onError: cb =>
|
|
80
|
-
onClose: cb =>
|
|
31
|
+
onMessage: (cb) => ws.on("message", cb),
|
|
32
|
+
onError: (cb) => ws.on("error", cb),
|
|
33
|
+
onClose: (cb) => ws.on("close", cb),
|
|
81
34
|
dispose: () => {
|
|
82
|
-
if (
|
|
83
|
-
|
|
35
|
+
if (ws.readyState < ws.CLOSING) {
|
|
36
|
+
ws.close();
|
|
84
37
|
}
|
|
85
|
-
}
|
|
38
|
+
},
|
|
86
39
|
};
|
|
87
40
|
}
|
|
@@ -8,8 +8,8 @@
|
|
|
8
8
|
import { MessageConnection, ResponseError } from "vscode-jsonrpc";
|
|
9
9
|
import { Event, Emitter } from "../util/event";
|
|
10
10
|
import { Disposable } from "../util/disposable";
|
|
11
|
-
import { ConnectionHandler } from
|
|
12
|
-
import { log } from
|
|
11
|
+
import { ConnectionHandler } from "./handler";
|
|
12
|
+
import { log } from "../util/logging";
|
|
13
13
|
|
|
14
14
|
export type JsonRpcServer<Client> = Disposable & {
|
|
15
15
|
/**
|
|
@@ -27,10 +27,7 @@ export interface JsonRpcConnectionEventEmitter {
|
|
|
27
27
|
export type JsonRpcProxy<T> = T & JsonRpcConnectionEventEmitter;
|
|
28
28
|
|
|
29
29
|
export class JsonRpcConnectionHandler<T extends object> implements ConnectionHandler {
|
|
30
|
-
constructor(
|
|
31
|
-
readonly path: string,
|
|
32
|
-
readonly targetFactory: (proxy: JsonRpcProxy<T>, request?: object) => any
|
|
33
|
-
) { }
|
|
30
|
+
constructor(readonly path: string, readonly targetFactory: (proxy: JsonRpcProxy<T>, request?: object) => any) {}
|
|
34
31
|
|
|
35
32
|
onConnection(connection: MessageConnection, request?: object): void {
|
|
36
33
|
const factory = new JsonRpcProxyFactory<T>();
|
|
@@ -83,7 +80,6 @@ export class JsonRpcConnectionHandler<T extends object> implements ConnectionHan
|
|
|
83
80
|
* @param <T> - The type of the object to expose to JSON-RPC.
|
|
84
81
|
*/
|
|
85
82
|
export class JsonRpcProxyFactory<T extends object> implements ProxyHandler<T> {
|
|
86
|
-
|
|
87
83
|
protected readonly onDidOpenConnectionEmitter = new Emitter<void>();
|
|
88
84
|
protected readonly onDidCloseConnectionEmitter = new Emitter<void>();
|
|
89
85
|
|
|
@@ -101,17 +97,21 @@ export class JsonRpcProxyFactory<T extends object> implements ProxyHandler<T> {
|
|
|
101
97
|
}
|
|
102
98
|
|
|
103
99
|
protected waitForConnection(): void {
|
|
104
|
-
this.connectionPromise = new Promise(resolve =>
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
connection.onClose(() =>
|
|
109
|
-
this.onDidCloseConnectionEmitter.fire(undefined)
|
|
110
|
-
);
|
|
111
|
-
this.onDidOpenConnectionEmitter.fire(undefined);
|
|
100
|
+
this.connectionPromise = new Promise((resolve) => (this.connectionPromiseResolve = resolve));
|
|
101
|
+
this.connectionPromise.then((connection) => {
|
|
102
|
+
connection.onClose(() => this.fireConnectionClosed());
|
|
103
|
+
this.fireConnectionOpened();
|
|
112
104
|
});
|
|
113
105
|
}
|
|
114
106
|
|
|
107
|
+
fireConnectionClosed() {
|
|
108
|
+
this.onDidCloseConnectionEmitter.fire(undefined);
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
fireConnectionOpened() {
|
|
112
|
+
this.onDidOpenConnectionEmitter.fire(undefined);
|
|
113
|
+
}
|
|
114
|
+
|
|
115
115
|
/**
|
|
116
116
|
* Connect a MessageConnection to the factory.
|
|
117
117
|
*
|
|
@@ -198,35 +198,34 @@ export class JsonRpcProxyFactory<T extends object> implements ProxyHandler<T> {
|
|
|
198
198
|
* @returns A callable that executes the JSON-RPC call.
|
|
199
199
|
*/
|
|
200
200
|
get(target: T, p: PropertyKey, receiver: any): any {
|
|
201
|
-
if (p ===
|
|
201
|
+
if (p === "setClient") {
|
|
202
202
|
return (client: any) => {
|
|
203
203
|
this.target = client;
|
|
204
204
|
};
|
|
205
205
|
}
|
|
206
|
-
if (p ===
|
|
206
|
+
if (p === "onDidOpenConnection") {
|
|
207
207
|
return this.onDidOpenConnectionEmitter.event;
|
|
208
208
|
}
|
|
209
|
-
if (p ===
|
|
209
|
+
if (p === "onDidCloseConnection") {
|
|
210
210
|
return this.onDidCloseConnectionEmitter.event;
|
|
211
211
|
}
|
|
212
212
|
const isNotify = this.isNotification(p);
|
|
213
213
|
return (...args: any[]) =>
|
|
214
|
-
this.connectionPromise.then(
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
.catch((err: any) => reject(err))
|
|
224
|
-
|
|
214
|
+
this.connectionPromise.then(
|
|
215
|
+
(connection) =>
|
|
216
|
+
new Promise((resolve, reject) => {
|
|
217
|
+
try {
|
|
218
|
+
if (isNotify) {
|
|
219
|
+
connection.sendNotification(p.toString(), ...args);
|
|
220
|
+
resolve(undefined);
|
|
221
|
+
} else {
|
|
222
|
+
const resultPromise = connection.sendRequest(p.toString(), ...args) as Promise<any>;
|
|
223
|
+
resultPromise.catch((err: any) => reject(err)).then((result: any) => resolve(result));
|
|
224
|
+
}
|
|
225
|
+
} catch (err) {
|
|
226
|
+
reject(err);
|
|
225
227
|
}
|
|
226
|
-
}
|
|
227
|
-
reject(err);
|
|
228
|
-
}
|
|
229
|
-
})
|
|
228
|
+
}),
|
|
230
229
|
);
|
|
231
230
|
}
|
|
232
231
|
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2021 Gitpod GmbH. All rights reserved.
|
|
3
|
+
* Licensed under the GNU Affero General Public License (AGPL).
|
|
4
|
+
* See License-AGPL.txt in the project root for license information.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
export interface OssAllowList {
|
|
8
|
+
/**
|
|
9
|
+
* A string that identifies a GitHub/GitLab/Bitbucket identity of the form "<host>/<profilename>"
|
|
10
|
+
* E.g., "github.com/geropl"
|
|
11
|
+
*/
|
|
12
|
+
identity: string;
|
|
13
|
+
|
|
14
|
+
deleted?: boolean;
|
|
15
|
+
}
|
package/src/payment-protocol.ts
CHANGED
|
@@ -4,8 +4,8 @@
|
|
|
4
4
|
* See License-AGPL.txt in the project root for license information.
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
export const UPDATE_GITPOD_SUBSCRIPTION_PATH =
|
|
7
|
+
export namespace PaymentProtocol {
|
|
8
|
+
export const UPDATE_GITPOD_SUBSCRIPTION_PATH = "/payment/chargebee";
|
|
9
9
|
}
|
|
10
10
|
|
|
11
11
|
export interface PlanCoupon {
|
package/src/permission.ts
CHANGED
|
@@ -4,35 +4,49 @@
|
|
|
4
4
|
* See License-AGPL.txt in the project root for license information.
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
|
|
8
7
|
// see below for explanation
|
|
9
8
|
export const Permissions = {
|
|
10
|
-
|
|
11
|
-
|
|
9
|
+
monitor: undefined,
|
|
10
|
+
enforcement: undefined,
|
|
12
11
|
"privileged-ws": undefined,
|
|
13
12
|
"registry-access": undefined,
|
|
14
13
|
"admin-users": undefined,
|
|
15
14
|
"admin-workspaces": undefined,
|
|
15
|
+
"admin-projects": undefined,
|
|
16
16
|
"admin-api": undefined,
|
|
17
17
|
"ide-settings": undefined,
|
|
18
18
|
"new-workspace-cluster": undefined,
|
|
19
|
-
"teams-and-projects": undefined,
|
|
20
19
|
};
|
|
21
|
-
export type PermissionName = keyof
|
|
22
|
-
export const Roles = {
|
|
23
|
-
export type RoleName = keyof
|
|
20
|
+
export type PermissionName = keyof typeof Permissions;
|
|
21
|
+
export const Roles = { devops: undefined, viewer: undefined, admin: undefined };
|
|
22
|
+
export type RoleName = keyof typeof Roles;
|
|
24
23
|
export type RoleOrPermission = RoleName | PermissionName;
|
|
25
24
|
|
|
26
25
|
export namespace RoleName {
|
|
27
26
|
export const is = (o: any): o is RoleName => {
|
|
28
|
-
return typeof(
|
|
29
|
-
|
|
30
|
-
}
|
|
27
|
+
return typeof o === "string" && Role.all().some((r) => r.name === o);
|
|
28
|
+
};
|
|
31
29
|
}
|
|
32
30
|
|
|
33
31
|
export interface Role {
|
|
34
|
-
name: RoleName
|
|
35
|
-
permissions: PermissionName[]
|
|
32
|
+
name: RoleName;
|
|
33
|
+
permissions: PermissionName[];
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export namespace RolesOrPermissions {
|
|
37
|
+
export function toPermissionSet(rolesOrPermissions: RoleOrPermission[] | undefined): Set<PermissionName> {
|
|
38
|
+
rolesOrPermissions = rolesOrPermissions || [];
|
|
39
|
+
|
|
40
|
+
const permissions = new Set<PermissionName>();
|
|
41
|
+
for (const rop of rolesOrPermissions) {
|
|
42
|
+
if (Permission.is(rop)) {
|
|
43
|
+
permissions.add(rop);
|
|
44
|
+
} else if (RoleName.is(rop)) {
|
|
45
|
+
Role.getByName(rop).permissions.forEach((p) => permissions.add(p));
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
return permissions;
|
|
49
|
+
}
|
|
36
50
|
}
|
|
37
51
|
|
|
38
52
|
export namespace Permission {
|
|
@@ -51,6 +65,9 @@ export namespace Permission {
|
|
|
51
65
|
/** The permission for accessing all workspace data */
|
|
52
66
|
export const ADMIN_WORKSPACES: PermissionName = "admin-workspaces";
|
|
53
67
|
|
|
68
|
+
/** The permission for accessing all projects data */
|
|
69
|
+
export const ADMIN_PROJECTS: PermissionName = "admin-projects";
|
|
70
|
+
|
|
54
71
|
/** The permission to access the admin API */
|
|
55
72
|
export const ADMIN_API: PermissionName = "admin-api";
|
|
56
73
|
|
|
@@ -58,14 +75,11 @@ export namespace Permission {
|
|
|
58
75
|
export const IDE_SETTINGS: PermissionName = "ide-settings";
|
|
59
76
|
|
|
60
77
|
export const is = (o: any): o is PermissionName => {
|
|
61
|
-
return typeof(
|
|
62
|
-
|
|
63
|
-
}
|
|
78
|
+
return typeof o === "string" && Permission.all().some((p) => p === o);
|
|
79
|
+
};
|
|
64
80
|
|
|
65
81
|
export const all = (): PermissionName[] => {
|
|
66
|
-
return Object.keys(
|
|
67
|
-
.map(k => (Permission as any)[k])
|
|
68
|
-
.filter(k => typeof(k) === 'string');
|
|
82
|
+
return Object.keys(Permissions) as PermissionName[];
|
|
69
83
|
};
|
|
70
84
|
}
|
|
71
85
|
|
|
@@ -73,21 +87,13 @@ export namespace Role {
|
|
|
73
87
|
/** The default role for all Gitpod developers */
|
|
74
88
|
export const DEVOPS: Role = {
|
|
75
89
|
name: "devops",
|
|
76
|
-
permissions: [
|
|
77
|
-
Permission.MONITOR,
|
|
78
|
-
Permission.ENFORCEMENT,
|
|
79
|
-
Permission.REGISTRY_ACCESS,
|
|
80
|
-
Permission.IDE_SETTINGS
|
|
81
|
-
]
|
|
90
|
+
permissions: [Permission.MONITOR, Permission.ENFORCEMENT, Permission.REGISTRY_ACCESS, Permission.IDE_SETTINGS],
|
|
82
91
|
};
|
|
83
92
|
|
|
84
93
|
/** A role for people that are allowed to view Gitpod internals */
|
|
85
94
|
export const VIEWER: Role = {
|
|
86
95
|
name: "viewer",
|
|
87
|
-
permissions: [
|
|
88
|
-
Permission.MONITOR,
|
|
89
|
-
Permission.REGISTRY_ACCESS,
|
|
90
|
-
]
|
|
96
|
+
permissions: [Permission.MONITOR, Permission.REGISTRY_ACCESS],
|
|
91
97
|
};
|
|
92
98
|
|
|
93
99
|
export const ADMIN: Role = {
|
|
@@ -95,13 +101,14 @@ export namespace Role {
|
|
|
95
101
|
permissions: [
|
|
96
102
|
Permission.ADMIN_USERS,
|
|
97
103
|
Permission.ADMIN_WORKSPACES,
|
|
104
|
+
Permission.ADMIN_PROJECTS,
|
|
98
105
|
Permission.ADMIN_API,
|
|
99
106
|
Permission.ENFORCEMENT,
|
|
100
|
-
]
|
|
101
|
-
}
|
|
107
|
+
],
|
|
108
|
+
};
|
|
102
109
|
|
|
103
110
|
export const getByName = (name: RoleName): Role => {
|
|
104
|
-
const result = Role.all().find(r => r.name === name)
|
|
111
|
+
const result = Role.all().find((r) => r.name === name);
|
|
105
112
|
if (!result) {
|
|
106
113
|
throw Error("Unknown RoleName: " + name);
|
|
107
114
|
}
|
|
@@ -110,7 +117,7 @@ export namespace Role {
|
|
|
110
117
|
|
|
111
118
|
export const all = (): Role[] => {
|
|
112
119
|
return Object.keys(Role)
|
|
113
|
-
.map(k => (Role as any)[k])
|
|
114
|
-
.filter(k => typeof
|
|
120
|
+
.map((k) => (Role as any)[k])
|
|
121
|
+
.filter((k) => typeof k === "object");
|
|
115
122
|
};
|
|
116
123
|
}
|