@gitpod/gitpod-protocol 0.1.5-wth-test.80 → 0.1.5-wv-remove-without-ws-flag.5
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 +132 -5
- package/lib/accounting-protocol.d.ts +19 -11
- package/lib/accounting-protocol.d.ts.map +1 -1
- package/lib/accounting-protocol.js +35 -33
- package/lib/accounting-protocol.js.map +1 -1
- package/lib/admin-protocol.d.ts +19 -2
- package/lib/admin-protocol.d.ts.map +1 -1
- package/lib/admin-protocol.js +1 -1
- package/lib/admin-protocol.js.map +1 -1
- package/lib/analytics.d.ts +1 -1
- package/lib/analytics.d.ts.map +1 -1
- package/lib/analytics.js +1 -1
- package/lib/analytics.js.map +1 -1
- package/lib/attribution.d.ts +24 -0
- package/lib/attribution.d.ts.map +1 -0
- package/lib/attribution.js +54 -0
- package/lib/attribution.js.map +1 -0
- package/lib/auth.d.ts +1 -1
- package/lib/auth.d.ts.map +1 -1
- package/lib/auth.js +1 -1
- package/lib/billing-mode.d.ts +45 -0
- package/lib/billing-mode.d.ts.map +1 -0
- package/lib/billing-mode.js +44 -0
- package/lib/billing-mode.js.map +1 -0
- package/lib/blocked-repositories-protocol.d.ts +13 -0
- package/lib/blocked-repositories-protocol.d.ts.map +1 -0
- package/lib/blocked-repositories-protocol.js +8 -0
- package/lib/blocked-repositories-protocol.js.map +1 -0
- package/lib/context-url.d.ts +1 -2
- package/lib/context-url.d.ts.map +1 -1
- package/lib/context-url.js +5 -7
- package/lib/context-url.js.map +1 -1
- package/lib/context-url.spec.d.ts +1 -3
- package/lib/context-url.spec.d.ts.map +1 -1
- package/lib/context-url.spec.js +13 -26
- package/lib/context-url.spec.js.map +1 -1
- package/lib/encryption/container-module.d.ts +1 -1
- package/lib/encryption/container-module.d.ts.map +1 -1
- package/lib/encryption/container-module.js +2 -2
- package/lib/encryption/container-module.js.map +1 -1
- package/lib/encryption/encryption-engine.d.ts +1 -1
- package/lib/encryption/encryption-engine.d.ts.map +1 -1
- package/lib/encryption/encryption-engine.js +10 -10
- package/lib/encryption/encryption-engine.js.map +1 -1
- package/lib/encryption/encryption-engine.spec.d.ts +1 -1
- package/lib/encryption/encryption-engine.spec.d.ts.map +1 -1
- package/lib/encryption/encryption-engine.spec.js +3 -4
- package/lib/encryption/encryption-engine.spec.js.map +1 -1
- package/lib/encryption/encryption-service.d.ts +1 -1
- package/lib/encryption/encryption-service.d.ts.map +1 -1
- package/lib/encryption/encryption-service.js +2 -2
- package/lib/encryption/encryption-service.js.map +1 -1
- package/lib/encryption/key-provider.d.ts +1 -1
- package/lib/encryption/key-provider.d.ts.map +1 -1
- package/lib/encryption/key-provider.js +8 -10
- package/lib/encryption/key-provider.js.map +1 -1
- package/lib/env.d.ts +1 -6
- package/lib/env.d.ts.map +1 -1
- package/lib/env.js +2 -21
- 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 +10 -0
- package/lib/experiments/configcat-server.d.ts.map +1 -0
- package/lib/experiments/configcat-server.js +37 -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 +51 -0
- package/lib/experiments/configcat.js.map +1 -0
- package/lib/experiments/types.d.ts +22 -0
- package/lib/experiments/types.d.ts.map +1 -0
- package/lib/experiments/types.js +10 -0
- package/lib/experiments/types.js.map +1 -0
- package/lib/frontend-dashboard-service.d.ts +90 -0
- package/lib/frontend-dashboard-service.d.ts.map +1 -0
- package/lib/frontend-dashboard-service.js +49 -0
- package/lib/frontend-dashboard-service.js.map +1 -0
- package/lib/gitpod-file-parser.d.ts +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.d.ts +1 -1
- package/lib/gitpod-file-parser.spec.js +43 -40
- package/lib/gitpod-file-parser.spec.js.map +1 -1
- package/lib/gitpod-service.d.ts +73 -55
- package/lib/gitpod-service.d.ts.map +1 -1
- package/lib/gitpod-service.js +61 -34
- package/lib/gitpod-service.js.map +1 -1
- package/lib/headless-workspace-log.d.ts +2 -1
- package/lib/headless-workspace-log.d.ts.map +1 -1
- package/lib/headless-workspace-log.js +3 -2
- package/lib/headless-workspace-log.js.map +1 -1
- package/lib/ide-frontend-service.d.ts +2 -2
- package/lib/ide-frontend-service.js +1 -1
- package/lib/ide-protocol.d.ts +29 -8
- package/lib/ide-protocol.d.ts.map +1 -1
- package/lib/ide-protocol.js +11 -1
- package/lib/ide-protocol.js.map +1 -1
- package/lib/index.d.ts +17 -17
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +2 -2
- package/lib/index.js.map +1 -1
- package/lib/installation-admin-protocol.d.ts +4 -1
- package/lib/installation-admin-protocol.d.ts.map +1 -1
- package/lib/installation-admin-protocol.js +4 -3
- package/lib/installation-admin-protocol.js.map +1 -1
- package/lib/license-protocol.d.ts +8 -1
- package/lib/license-protocol.d.ts.map +1 -1
- package/lib/license-protocol.js +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 +5 -5
- 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 +5 -19
- package/lib/messaging/client-call-metrics.d.ts.map +1 -1
- package/lib/messaging/client-call-metrics.js +35 -23
- package/lib/messaging/client-call-metrics.js.map +1 -1
- package/lib/messaging/error.d.ts +10 -2
- package/lib/messaging/error.d.ts.map +1 -1
- package/lib/messaging/error.js +20 -4
- 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/oss-allowlist.d.ts +1 -1
- package/lib/oss-allowlist.js +1 -1
- package/lib/payment-protocol.d.ts +1 -1
- package/lib/payment-protocol.d.ts.map +1 -1
- package/lib/payment-protocol.js +2 -2
- package/lib/payment-protocol.js.map +1 -1
- package/lib/permission.d.ts +7 -4
- package/lib/permission.d.ts.map +1 -1
- package/lib/permission.js +16 -24
- package/lib/permission.js.map +1 -1
- package/lib/plans.d.ts +5 -4
- package/lib/plans.d.ts.map +1 -1
- package/lib/plans.js +211 -172
- package/lib/plans.js.map +1 -1
- package/lib/protocol.d.ts +167 -61
- package/lib/protocol.d.ts.map +1 -1
- package/lib/protocol.js +282 -106
- package/lib/protocol.js.map +1 -1
- package/lib/protocol.spec.d.ts +7 -0
- package/lib/protocol.spec.d.ts.map +1 -0
- package/lib/protocol.spec.js +127 -0
- package/lib/protocol.spec.js.map +1 -0
- package/lib/snapshot-url.d.ts +1 -1
- package/lib/snapshot-url.js +1 -1
- package/lib/snapshot-url.spec.d.ts +1 -1
- package/lib/snapshot-url.spec.js +1 -1
- package/lib/snapshot-url.spec.js.map +1 -1
- package/lib/team-subscription-protocol.d.ts +23 -4
- package/lib/team-subscription-protocol.d.ts.map +1 -1
- package/lib/team-subscription-protocol.js +21 -6
- package/lib/team-subscription-protocol.js.map +1 -1
- package/lib/teams-projects-protocol.d.ts +29 -6
- 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 +3 -3
- package/lib/typings/globals.d.ts.map +1 -1
- package/lib/typings/globals.js +1 -1
- package/lib/usage.d.ts +73 -0
- package/lib/usage.d.ts.map +1 -0
- package/lib/usage.js +20 -0
- package/lib/usage.js.map +1 -0
- package/lib/util/analytics.d.ts +1 -1
- package/lib/util/analytics.d.ts.map +1 -1
- package/lib/util/analytics.js +7 -7
- package/lib/util/analytics.js.map +1 -1
- package/lib/util/async-iterator.d.ts +1 -1
- package/lib/util/async-iterator.d.ts.map +1 -1
- package/lib/util/async-iterator.js +4 -4
- package/lib/util/async-iterator.js.map +1 -1
- package/lib/util/cancelable.d.ts +1 -1
- package/lib/util/cancelable.js +1 -1
- package/lib/util/cancelable.js.map +1 -1
- package/lib/util/date-time.d.ts +1 -1
- package/lib/util/date-time.js +7 -7
- 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/deep-partial.d.ts +1 -1
- package/lib/util/deep-partial.js +1 -1
- package/lib/util/deferred.d.ts +1 -1
- package/lib/util/deferred.js +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 -1
- package/lib/util/garbage-collected-cache.d.ts.map +1 -1
- package/lib/util/garbage-collected-cache.js +7 -2
- 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.d.ts +1 -1
- package/lib/util/generate-workspace-id.spec.js +19 -8
- package/lib/util/generate-workspace-id.spec.js.map +1 -1
- package/lib/util/gitpod-cookie.d.ts +2 -2
- 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 +12 -3
- package/lib/util/gitpod-host-url.d.ts.map +1 -1
- package/lib/util/gitpod-host-url.js +69 -35
- package/lib/util/gitpod-host-url.js.map +1 -1
- package/lib/util/gitpod-host-url.spec.d.ts +1 -1
- package/lib/util/gitpod-host-url.spec.d.ts.map +1 -1
- package/lib/util/gitpod-host-url.spec.js +16 -6
- package/lib/util/gitpod-host-url.spec.js.map +1 -1
- package/lib/util/grpc.d.ts +21 -1
- package/lib/util/grpc.d.ts.map +1 -1
- package/lib/util/grpc.js +74 -2
- package/lib/util/grpc.js.map +1 -1
- package/lib/util/jaeger-client-types.d.ts +1 -1
- package/lib/util/jaeger-client-types.d.ts.map +1 -1
- package/lib/util/jaeger-client-types.js +1 -1
- package/lib/util/logging.d.ts +2 -2
- package/lib/util/logging.d.ts.map +1 -1
- package/lib/util/logging.js +32 -26
- package/lib/util/logging.js.map +1 -1
- package/lib/util/logging.spec.d.ts +7 -0
- package/lib/util/logging.spec.d.ts.map +1 -0
- package/lib/util/logging.spec.js +52 -0
- package/lib/util/logging.spec.js.map +1 -0
- package/lib/util/make-link.d.ts +1 -1
- package/lib/util/make-link.js +6 -6
- package/lib/util/make-link.js.map +1 -1
- package/lib/util/nice-grpc.d.ts +9 -0
- package/lib/util/nice-grpc.d.ts.map +1 -0
- package/lib/util/nice-grpc.js +121 -0
- package/lib/util/nice-grpc.js.map +1 -0
- package/lib/util/parse-workspace-id.d.ts +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 +1 -1
- package/lib/util/parse-workspace-id.spec.d.ts.map +1 -1
- package/lib/util/parse-workspace-id.spec.js +1 -1
- package/lib/util/parse-workspace-id.spec.js.map +1 -1
- package/lib/util/queue.d.ts +1 -1
- package/lib/util/queue.js +1 -1
- package/lib/util/queue.spec.d.ts +1 -1
- package/lib/util/queue.spec.js +10 -7
- package/lib/util/queue.spec.js.map +1 -1
- package/lib/util/repeat.d.ts +1 -1
- package/lib/util/repeat.js +1 -1
- package/lib/util/semaphore.d.ts +1 -1
- package/lib/util/semaphore.d.ts.map +1 -1
- package/lib/util/semaphore.js +1 -1
- package/lib/util/semaphore.js.map +1 -1
- package/lib/util/skip-if.d.ts +1 -1
- package/lib/util/skip-if.d.ts.map +1 -1
- package/lib/util/skip-if.js +1 -1
- package/lib/util/skip-if.js.map +1 -1
- package/lib/util/timeutil.d.ts +3 -1
- package/lib/util/timeutil.d.ts.map +1 -1
- package/lib/util/timeutil.js +16 -4
- package/lib/util/timeutil.js.map +1 -1
- package/lib/util/timeutil.spec.d.ts +3 -1
- package/lib/util/timeutil.spec.d.ts.map +1 -1
- package/lib/util/timeutil.spec.js +35 -1
- package/lib/util/timeutil.spec.js.map +1 -1
- package/lib/util/tracing.d.ts +7 -7
- package/lib/util/tracing.d.ts.map +1 -1
- package/lib/util/tracing.js +15 -17
- package/lib/util/tracing.js.map +1 -1
- package/lib/util/tracing.spec.d.ts +1 -1
- package/lib/util/tracing.spec.js +4 -4
- package/lib/util/tracing.spec.js.map +1 -1
- package/lib/util/workspace-port-authentication.d.ts +8 -8
- 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/webhook-event.d.ts +44 -0
- package/lib/webhook-event.d.ts.map +1 -0
- package/lib/webhook-event.js +8 -0
- package/lib/webhook-event.js.map +1 -0
- package/lib/workspace-class.d.ts +14 -0
- package/lib/workspace-class.d.ts.map +1 -0
- package/lib/workspace-class.js +8 -0
- package/lib/workspace-class.js.map +1 -0
- package/lib/workspace-cluster.d.ts +13 -14
- package/lib/workspace-cluster.d.ts.map +1 -1
- package/lib/workspace-cluster.js +3 -5
- package/lib/workspace-cluster.js.map +1 -1
- package/lib/workspace-instance.d.ts +22 -4
- package/lib/workspace-instance.d.ts.map +1 -1
- package/lib/workspace-instance.js +1 -1
- package/lib/wsready.d.ts +8 -2
- package/lib/wsready.d.ts.map +1 -1
- package/lib/wsready.js +3 -3
- package/package.json +14 -6
- package/pkg-yarn.lock +10 -5
- package/provenance-bundle.jsonl +1 -1
- package/src/accounting-protocol.ts +67 -52
- package/src/admin-protocol.ts +48 -22
- package/src/analytics.ts +22 -22
- package/src/attribution.ts +63 -0
- package/src/auth.ts +3 -3
- package/src/billing-mode.ts +84 -0
- package/src/blocked-repositories-protocol.ts +13 -0
- package/src/context-url.spec.ts +18 -22
- package/src/context-url.ts +79 -79
- package/src/encryption/container-module.ts +3 -4
- package/src/encryption/encryption-engine.spec.ts +10 -9
- package/src/encryption/encryption-engine.ts +21 -17
- package/src/encryption/encryption-service.ts +5 -6
- package/src/encryption/key-provider.ts +17 -20
- package/src/env.ts +2 -25
- package/src/experiments/always-default.ts +24 -0
- package/src/experiments/configcat-server.ts +42 -0
- package/src/experiments/configcat.ts +56 -0
- package/src/experiments/types.ts +34 -0
- package/src/frontend-dashboard-service.ts +125 -0
- package/src/gitpod-file-parser.spec.ts +56 -62
- package/src/gitpod-file-parser.ts +17 -18
- package/src/gitpod-service.ts +224 -142
- package/src/headless-workspace-log.ts +7 -5
- package/src/ide-frontend-service.ts +3 -3
- package/src/ide-protocol.ts +38 -10
- package/src/index.ts +17 -17
- package/src/installation-admin-protocol.ts +12 -9
- package/src/license-protocol.ts +13 -7
- package/src/messaging/browser/connection.ts +45 -47
- package/src/messaging/browser/window-connection.ts +40 -30
- package/src/messaging/client-call-metrics.ts +79 -82
- package/src/messaging/error.ts +30 -8
- 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 +4 -4
- package/src/payment-protocol.ts +3 -3
- package/src/permission.ts +25 -32
- package/src/plans.ts +241 -190
- package/src/protocol.spec.ts +97 -0
- package/src/protocol.ts +527 -265
- package/src/snapshot-url.spec.ts +10 -8
- package/src/snapshot-url.ts +1 -1
- package/src/team-subscription-protocol.ts +60 -23
- package/src/teams-projects-protocol.ts +42 -12
- package/src/typings/globals.ts +6 -5
- package/src/usage.ts +85 -0
- package/src/util/analytics.ts +47 -43
- package/src/util/async-iterator.ts +5 -6
- package/src/util/cancelable.ts +4 -4
- package/src/util/date-time.ts +9 -9
- package/src/util/debug-app.ts +81 -0
- package/src/util/deep-partial.ts +1 -1
- package/src/util/deferred.ts +7 -7
- package/src/util/disposable.ts +3 -6
- package/src/util/event.ts +9 -11
- package/src/util/garbage-collected-cache.ts +9 -7
- package/src/util/generate-workspace-id.spec.ts +27 -17
- package/src/util/generate-workspace-id.ts +461 -455
- package/src/util/gitpod-cookie.ts +9 -10
- package/src/util/gitpod-host-url.spec.ts +41 -14
- package/src/util/gitpod-host-url.ts +82 -39
- package/src/util/grpc.ts +94 -2
- package/src/util/jaeger-client-types.ts +3 -3
- package/src/util/logging.spec.ts +23 -0
- package/src/util/logging.ts +61 -43
- package/src/util/make-link.ts +7 -8
- package/src/util/nice-grpc.ts +96 -0
- package/src/util/parse-workspace-id.spec.ts +18 -9
- package/src/util/parse-workspace-id.ts +6 -7
- package/src/util/queue.spec.ts +28 -26
- package/src/util/queue.ts +1 -1
- package/src/util/repeat.ts +2 -2
- package/src/util/semaphore.ts +5 -7
- package/src/util/skip-if.ts +10 -7
- package/src/util/timeutil.spec.ts +41 -15
- package/src/util/timeutil.ts +28 -12
- package/src/util/tracing.spec.ts +29 -24
- package/src/util/tracing.ts +55 -52
- package/src/util/workspace-port-authentication.ts +11 -14
- package/src/webhook-event.ts +55 -0
- package/src/workspace-class.ts +14 -0
- package/src/workspace-cluster.ts +25 -19
- package/src/workspace-instance.ts +67 -25
- package/src/wsready.ts +11 -4
- package/data/builtin-theia-plugins.json +0 -372
- package/lib/email-protocol.d.ts +0 -49
- package/lib/email-protocol.d.ts.map +0 -1
- package/lib/email-protocol.js +0 -28
- package/lib/email-protocol.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 +0 -8
- package/lib/theia-plugins.js.map +0 -1
- package/src/email-protocol.ts +0 -66
- package/src/theia-plugins.ts +0 -11
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Copyright (c) 2021 Gitpod GmbH. All rights reserved.
|
|
3
3
|
* Licensed under the GNU Affero General Public License (AGPL).
|
|
4
|
-
* See License
|
|
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
|
+
}
|
|
@@ -1,49 +1,76 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Copyright (c) 2020 Gitpod GmbH. All rights reserved.
|
|
3
3
|
* Licensed under the GNU Affero General Public License (AGPL).
|
|
4
|
-
* See License
|
|
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();
|
|
@@ -1,38 +1,39 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Copyright (c) 2020 Gitpod GmbH. All rights reserved.
|
|
3
3
|
* Licensed under the GNU Affero General Public License (AGPL).
|
|
4
|
-
* See License
|
|
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 baseWorkspaceIDRegex =
|
|
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(`^(?:debug-)?${baseWorkspaceIDRegex}$`);
|
|
19
20
|
|
|
20
21
|
// this pattern matches URL prefixes of workspaces
|
|
21
|
-
const workspaceUrlPrefixRegex = RegExp(`^([0-9]{4,6}-)?${baseWorkspaceIDRegex}\\.`);
|
|
22
|
+
const workspaceUrlPrefixRegex = RegExp(`^(([0-9]{4,6}|debug)-)?${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,67 @@ 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
|
-
withContext(
|
|
80
|
-
|
|
80
|
+
withContext(
|
|
81
|
+
contextUrl: string,
|
|
82
|
+
startOptions?: { showOptions?: boolean; editor?: string; workspaceClass?: string },
|
|
83
|
+
) {
|
|
84
|
+
const searchParams = new URLSearchParams();
|
|
85
|
+
if (startOptions?.showOptions) {
|
|
86
|
+
searchParams.append("showOptions", "true");
|
|
87
|
+
}
|
|
88
|
+
return this.with((url) => ({ hash: contextUrl, search: searchParams.toString() }));
|
|
81
89
|
}
|
|
82
90
|
|
|
83
91
|
asWebsocket(): GitpodHostUrl {
|
|
84
|
-
return this.with(url => ({ protocol: url.protocol ===
|
|
92
|
+
return this.with((url) => ({ protocol: url.protocol === "https:" ? "wss:" : "ws:" }));
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
asWorkspacePage(): GitpodHostUrl {
|
|
96
|
+
return this.with((url) => ({ pathname: "/workspaces" }));
|
|
85
97
|
}
|
|
86
98
|
|
|
87
99
|
asDashboard(): GitpodHostUrl {
|
|
88
|
-
return this.with(url => ({ pathname:
|
|
100
|
+
return this.with((url) => ({ pathname: "/" }));
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
asBilling(): GitpodHostUrl {
|
|
104
|
+
return this.with((url) => ({ pathname: "/billing" }));
|
|
89
105
|
}
|
|
90
106
|
|
|
91
107
|
asLogin(): GitpodHostUrl {
|
|
92
|
-
return this.with(url => ({ pathname:
|
|
108
|
+
return this.with((url) => ({ pathname: "/login" }));
|
|
93
109
|
}
|
|
94
110
|
|
|
95
111
|
asUpgradeSubscription(): GitpodHostUrl {
|
|
96
|
-
return this.with(url => ({ pathname:
|
|
112
|
+
return this.with((url) => ({ pathname: "/plans" }));
|
|
97
113
|
}
|
|
98
114
|
|
|
99
115
|
asAccessControl(): GitpodHostUrl {
|
|
100
|
-
return this.with(url => ({ pathname:
|
|
116
|
+
return this.with((url) => ({ pathname: "/integrations" }));
|
|
101
117
|
}
|
|
102
118
|
|
|
103
119
|
asSettings(): GitpodHostUrl {
|
|
104
|
-
return this.with(url => ({ pathname:
|
|
120
|
+
return this.with((url) => ({ pathname: "/settings" }));
|
|
105
121
|
}
|
|
106
122
|
|
|
107
123
|
asPreferences(): GitpodHostUrl {
|
|
108
|
-
return this.with(url => ({ pathname:
|
|
124
|
+
return this.with((url) => ({ pathname: "/preferences" }));
|
|
109
125
|
}
|
|
110
126
|
|
|
111
127
|
asStart(workspaceId = this.workspaceId): GitpodHostUrl {
|
|
112
128
|
return this.withoutWorkspacePrefix().with({
|
|
113
|
-
pathname:
|
|
114
|
-
hash:
|
|
129
|
+
pathname: "/start/",
|
|
130
|
+
hash: "#" + workspaceId,
|
|
115
131
|
});
|
|
116
132
|
}
|
|
117
133
|
|
|
118
|
-
asWorkspaceAuth(instanceID: string
|
|
119
|
-
return this.with(url => ({
|
|
134
|
+
asWorkspaceAuth(instanceID: string): GitpodHostUrl {
|
|
135
|
+
return this.with((url) => ({
|
|
136
|
+
pathname: `/api/auth/workspace-cookie/${instanceID}`,
|
|
137
|
+
}));
|
|
120
138
|
}
|
|
121
139
|
|
|
122
140
|
toString() {
|
|
@@ -125,12 +143,16 @@ export class GitpodHostUrl {
|
|
|
125
143
|
|
|
126
144
|
toStringWoRootSlash() {
|
|
127
145
|
let result = this.toString();
|
|
128
|
-
if (result.endsWith(
|
|
146
|
+
if (result.endsWith("/")) {
|
|
129
147
|
result = result.slice(0, result.length - 1);
|
|
130
148
|
}
|
|
131
149
|
return result;
|
|
132
150
|
}
|
|
133
151
|
|
|
152
|
+
get debugWorkspace(): boolean {
|
|
153
|
+
return this.url.host.match(workspaceUrlPrefixRegex)?.[2] === "debug";
|
|
154
|
+
}
|
|
155
|
+
|
|
134
156
|
get workspaceId(): string | undefined {
|
|
135
157
|
const hostSegs = this.url.host.split(".");
|
|
136
158
|
if (hostSegs.length > 1) {
|
|
@@ -138,34 +160,55 @@ export class GitpodHostUrl {
|
|
|
138
160
|
if (matchResults) {
|
|
139
161
|
// URL has a workspace prefix
|
|
140
162
|
// port prefixes are excluded
|
|
141
|
-
return matchResults[
|
|
163
|
+
return matchResults[1];
|
|
142
164
|
}
|
|
143
165
|
}
|
|
144
166
|
|
|
145
|
-
const pathSegs = this.url.pathname.split("/")
|
|
167
|
+
const pathSegs = this.url.pathname.split("/");
|
|
146
168
|
if (pathSegs.length > 3 && pathSegs[1] === "workspace") {
|
|
147
169
|
return pathSegs[2];
|
|
148
170
|
}
|
|
149
171
|
|
|
172
|
+
const cleanHash = this.url.hash.replace(/^#/, "");
|
|
173
|
+
if (this.url.pathname == "/start/" && cleanHash.match(workspaceIDRegex)) {
|
|
174
|
+
return cleanHash;
|
|
175
|
+
}
|
|
176
|
+
|
|
150
177
|
return undefined;
|
|
151
178
|
}
|
|
152
179
|
|
|
153
180
|
get blobServe(): boolean {
|
|
154
181
|
const hostSegments = this.url.host.split(".");
|
|
155
|
-
if (hostSegments[0] ===
|
|
182
|
+
if (hostSegments[0] === "blobserve") {
|
|
156
183
|
return true;
|
|
157
184
|
}
|
|
158
185
|
|
|
159
|
-
const pathSegments = this.url.pathname.split("/")
|
|
186
|
+
const pathSegments = this.url.pathname.split("/");
|
|
160
187
|
return pathSegments[0] === "blobserve";
|
|
161
188
|
}
|
|
162
189
|
|
|
163
190
|
asSorry(message: string) {
|
|
164
|
-
return this.with({ pathname:
|
|
191
|
+
return this.with({ pathname: "/sorry", hash: message });
|
|
165
192
|
}
|
|
166
193
|
|
|
167
194
|
asApiLogout(): GitpodHostUrl {
|
|
168
|
-
return this.withApi(url => ({ pathname:
|
|
195
|
+
return this.withApi((url) => ({ pathname: "/logout/" }));
|
|
169
196
|
}
|
|
170
197
|
|
|
198
|
+
asIDEProxy(): GitpodHostUrl {
|
|
199
|
+
const hostSegments = this.url.host.split(".");
|
|
200
|
+
if (hostSegments[0] === "ide") {
|
|
201
|
+
return this;
|
|
202
|
+
}
|
|
203
|
+
return this.with((url) => ({ host: "ide." + url.host }));
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
asIDEMetrics(): GitpodHostUrl {
|
|
207
|
+
let newUrl: GitpodHostUrl = this;
|
|
208
|
+
const hostSegments = this.url.host.split(".");
|
|
209
|
+
if (hostSegments[0] !== "ide") {
|
|
210
|
+
newUrl = newUrl.asIDEProxy();
|
|
211
|
+
}
|
|
212
|
+
return newUrl.with((url) => ({ pathname: "/metrics-api" }));
|
|
213
|
+
}
|
|
171
214
|
}
|
package/src/util/grpc.ts
CHANGED
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Copyright (c) 2021 Gitpod GmbH. All rights reserved.
|
|
3
3
|
* Licensed under the GNU Affero General Public License (AGPL).
|
|
4
|
-
* See License
|
|
4
|
+
* See License.AGPL.txt in the project root for license information.
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
import * as grpc from "@grpc/grpc-js";
|
|
8
|
+
import { Status } from "@grpc/grpc-js/build/src/constants";
|
|
9
|
+
|
|
10
|
+
export const defaultGRPCOptions = {
|
|
8
11
|
"grpc.keepalive_timeout_ms": 10000,
|
|
9
12
|
"grpc.keepalive_time_ms": 60000,
|
|
10
13
|
"grpc.http2.min_time_between_pings_ms": 10000,
|
|
@@ -13,3 +16,92 @@
|
|
|
13
16
|
"grpc.max_reconnect_backoff_ms": 5000,
|
|
14
17
|
"grpc.max_receive_message_length": 1024 * 1024 * 16,
|
|
15
18
|
};
|
|
19
|
+
|
|
20
|
+
export type GrpcMethodType = "unary" | "client_stream" | "server_stream" | "bidi_stream";
|
|
21
|
+
|
|
22
|
+
export interface IGrpcCallMetricsLabels {
|
|
23
|
+
service: string;
|
|
24
|
+
method: string;
|
|
25
|
+
type: GrpcMethodType;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export interface IGrpcCallMetricsLabelsWithCode extends IGrpcCallMetricsLabels {
|
|
29
|
+
code: string;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export const IClientCallMetrics = Symbol("IClientCallMetrics");
|
|
33
|
+
|
|
34
|
+
export interface IClientCallMetrics {
|
|
35
|
+
started(labels: IGrpcCallMetricsLabels): void;
|
|
36
|
+
sent(labels: IGrpcCallMetricsLabels): void;
|
|
37
|
+
received(labels: IGrpcCallMetricsLabels): void;
|
|
38
|
+
handled(labels: IGrpcCallMetricsLabelsWithCode): void;
|
|
39
|
+
startHandleTimer(
|
|
40
|
+
labels: IGrpcCallMetricsLabels,
|
|
41
|
+
): (labels?: Partial<Record<string, string | number>> | undefined) => number;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
export function getGrpcMethodType(requestStream: boolean, responseStream: boolean): GrpcMethodType {
|
|
45
|
+
if (requestStream) {
|
|
46
|
+
if (responseStream) {
|
|
47
|
+
return "bidi_stream";
|
|
48
|
+
} else {
|
|
49
|
+
return "client_stream";
|
|
50
|
+
}
|
|
51
|
+
} else {
|
|
52
|
+
if (responseStream) {
|
|
53
|
+
return "server_stream";
|
|
54
|
+
} else {
|
|
55
|
+
return "unary";
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
export function createClientCallMetricsInterceptor(metrics: IClientCallMetrics): grpc.Interceptor {
|
|
61
|
+
return (options, nextCall): grpc.InterceptingCall => {
|
|
62
|
+
const methodDef = options.method_definition;
|
|
63
|
+
const method = methodDef.path.substring(methodDef.path.lastIndexOf("/") + 1);
|
|
64
|
+
const service = methodDef.path.substring(1, methodDef.path.length - method.length - 1);
|
|
65
|
+
const labels = {
|
|
66
|
+
service,
|
|
67
|
+
method,
|
|
68
|
+
type: getGrpcMethodType(options.method_definition.requestStream, options.method_definition.responseStream),
|
|
69
|
+
};
|
|
70
|
+
const requester = new grpc.RequesterBuilder()
|
|
71
|
+
.withStart((metadata, listener, next) => {
|
|
72
|
+
const newListener = new grpc.ListenerBuilder()
|
|
73
|
+
.withOnReceiveStatus((status, next) => {
|
|
74
|
+
try {
|
|
75
|
+
metrics.handled({
|
|
76
|
+
...labels,
|
|
77
|
+
code: Status[status.code],
|
|
78
|
+
});
|
|
79
|
+
} finally {
|
|
80
|
+
next(status);
|
|
81
|
+
}
|
|
82
|
+
})
|
|
83
|
+
.withOnReceiveMessage((message, next) => {
|
|
84
|
+
try {
|
|
85
|
+
metrics.received(labels);
|
|
86
|
+
} finally {
|
|
87
|
+
next(message);
|
|
88
|
+
}
|
|
89
|
+
})
|
|
90
|
+
.build();
|
|
91
|
+
try {
|
|
92
|
+
metrics.started(labels);
|
|
93
|
+
} finally {
|
|
94
|
+
next(metadata, newListener);
|
|
95
|
+
}
|
|
96
|
+
})
|
|
97
|
+
.withSendMessage((message, next) => {
|
|
98
|
+
try {
|
|
99
|
+
metrics.sent(labels);
|
|
100
|
+
} finally {
|
|
101
|
+
next(message);
|
|
102
|
+
}
|
|
103
|
+
})
|
|
104
|
+
.build();
|
|
105
|
+
return new grpc.InterceptingCall(nextCall(options), requester);
|
|
106
|
+
};
|
|
107
|
+
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Copyright (c) 2020 Gitpod GmbH. All rights reserved.
|
|
3
3
|
* Licensed under the GNU Affero General Public License (AGPL).
|
|
4
|
-
* See License
|
|
4
|
+
* See License.AGPL.txt in the project root for license information.
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
7
|
import { opentracing } from "jaeger-client";
|
|
@@ -93,10 +93,10 @@ export interface SamplingDecision {
|
|
|
93
93
|
|
|
94
94
|
// added by TypeFox
|
|
95
95
|
export interface Sampler {
|
|
96
|
-
name(): string
|
|
96
|
+
name(): string;
|
|
97
97
|
isSampled(operation: string, tags: any): boolean;
|
|
98
98
|
onCreateSpan(span: opentracing.Span): SamplingDecision;
|
|
99
99
|
onSetOperationName(span: opentracing.Span, operationName: string): SamplingDecision;
|
|
100
100
|
onSetTag(span: opentracing.Span, key: string, value: any): SamplingDecision;
|
|
101
|
-
close(callback: () => void): void
|
|
101
|
+
close(callback: () => void): void;
|
|
102
102
|
}
|
|
@@ -0,0 +1,23 @@
|
|
|
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
|
+
import { suite, test } from "mocha-typescript";
|
|
8
|
+
import { log } from "./logging";
|
|
9
|
+
|
|
10
|
+
@suite
|
|
11
|
+
class TestLogging {
|
|
12
|
+
@test public async testLogInfo_output() {
|
|
13
|
+
const testObj = {
|
|
14
|
+
null: null,
|
|
15
|
+
undefined: undefined,
|
|
16
|
+
empty: "",
|
|
17
|
+
foo: "bar",
|
|
18
|
+
number: 0,
|
|
19
|
+
};
|
|
20
|
+
log.info("info logging test", testObj);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
module.exports = new TestLogging();
|