@gitpod/gitpod-protocol 0.1.5-main.648 → 0.1.5-main.6480
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 +157 -29
- package/lib/accounting-protocol.d.ts +19 -14
- package/lib/accounting-protocol.d.ts.map +1 -1
- package/lib/accounting-protocol.js +44 -48
- package/lib/accounting-protocol.js.map +1 -1
- package/lib/admin-protocol.d.ts +44 -5
- package/lib/admin-protocol.d.ts.map +1 -1
- package/lib/admin-protocol.js +16 -1
- package/lib/admin-protocol.js.map +1 -1
- package/lib/analytics.d.ts +44 -0
- package/lib/analytics.d.ts.map +1 -0
- package/lib/analytics.js +10 -0
- package/lib/analytics.js.map +1 -0
- 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 +30 -0
- package/lib/context-url.d.ts.map +1 -0
- package/lib/context-url.js +100 -0
- package/lib/context-url.js.map +1 -0
- package/lib/context-url.spec.d.ts +12 -0
- package/lib/context-url.spec.d.ts.map +1 -0
- package/lib/context-url.spec.js +81 -0
- package/lib/context-url.spec.js.map +1 -0
- 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 +5 -5
- 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 +26 -27
- 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 +30 -38
- 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 +31 -45
- 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 +32 -39
- package/lib/encryption/key-provider.js.map +1 -1
- package/lib/env.d.ts +1 -7
- package/lib/env.d.ts.map +1 -1
- package/lib/env.js +8 -28
- 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 +27 -43
- 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 +146 -143
- package/lib/gitpod-file-parser.spec.js.map +1 -1
- package/lib/gitpod-service.d.ts +191 -55
- package/lib/gitpod-service.d.ts.map +1 -1
- package/lib/gitpod-service.js +204 -298
- package/lib/gitpod-service.js.map +1 -1
- package/lib/headless-workspace-log.d.ts +10 -12
- package/lib/headless-workspace-log.d.ts.map +1 -1
- package/lib/headless-workspace-log.js +7 -9
- 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 +126 -0
- package/lib/ide-protocol.d.ts.map +1 -0
- package/lib/ide-protocol.js +18 -0
- package/lib/ide-protocol.js.map +1 -0
- package/lib/index.d.ts +17 -11
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +8 -2
- package/lib/index.js.map +1 -1
- package/lib/installation-admin-protocol.d.ts +30 -0
- package/lib/installation-admin-protocol.d.ts.map +1 -0
- package/lib/installation-admin-protocol.js +31 -0
- package/lib/installation-admin-protocol.js.map +1 -0
- 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 +4 -6
- package/lib/messaging/browser/connection.d.ts.map +1 -1
- package/lib/messaging/browser/connection.js +176 -45
- 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 +43 -60
- package/lib/messaging/browser/window-connection.js.map +1 -1
- package/lib/messaging/client-call-metrics.d.ts +21 -0
- package/lib/messaging/client-call-metrics.d.ts.map +1 -0
- package/lib/messaging/client-call-metrics.js +95 -0
- package/lib/messaging/client-call-metrics.js.map +1 -0
- package/lib/messaging/error.d.ts +13 -3
- package/lib/messaging/error.d.ts.map +1 -1
- package/lib/messaging/error.js +25 -5
- 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 +75 -162
- 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 +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 +14 -4
- package/lib/permission.d.ts.map +1 -1
- package/lib/permission.js +45 -32
- package/lib/permission.js.map +1 -1
- package/lib/plans.d.ts +6 -5
- package/lib/plans.d.ts.map +1 -1
- package/lib/plans.js +230 -210
- package/lib/plans.js.map +1 -1
- package/lib/protocol.d.ts +261 -105
- package/lib/protocol.d.ts.map +1 -1
- package/lib/protocol.js +346 -205
- package/lib/protocol.js.map +1 -1
- package/{src/util/without.ts → lib/protocol.spec.d.ts} +3 -4
- 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 +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/lib/snapshot-url.spec.d.ts +7 -0
- 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 +24 -5
- package/lib/team-subscription-protocol.d.ts.map +1 -1
- package/lib/team-subscription-protocol.js +36 -18
- package/lib/team-subscription-protocol.js.map +1 -1
- package/lib/teams-projects-protocol.d.ts +137 -0
- package/lib/teams-projects-protocol.d.ts.map +1 -0
- package/lib/teams-projects-protocol.js +41 -0
- package/lib/teams-projects-protocol.js.map +1 -0
- 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 +8 -0
- package/lib/util/analytics.d.ts.map +1 -0
- package/lib/util/analytics.js +88 -0
- package/lib/util/analytics.js.map +1 -0
- 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 +58 -136
- package/lib/util/async-iterator.js.map +1 -1
- package/lib/util/cancelable.d.ts +1 -1
- package/lib/util/cancelable.js +18 -60
- package/lib/util/cancelable.js.map +1 -1
- package/lib/util/date-time.d.ts +1 -1
- package/lib/util/date-time.js +12 -12
- 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 +11 -13
- 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 +2 -1
- package/lib/util/garbage-collected-cache.d.ts.map +1 -1
- package/lib/util/garbage-collected-cache.js +33 -48
- package/lib/util/garbage-collected-cache.js.map +1 -1
- package/lib/util/generate-workspace-id.d.ts +6 -1
- package/lib/util/generate-workspace-id.d.ts.map +1 -1
- package/lib/util/generate-workspace-id.js +469 -502
- 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 +69 -79
- 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 +12 -7
- package/lib/util/gitpod-host-url.d.ts.map +1 -1
- package/lib/util/gitpod-host-url.js +132 -110
- package/lib/util/gitpod-host-url.js.map +1 -1
- package/lib/util/gitpod-host-url.spec.d.ts +7 -1
- package/lib/util/gitpod-host-url.spec.d.ts.map +1 -1
- package/lib/util/gitpod-host-url.spec.js +113 -31
- package/lib/util/gitpod-host-url.spec.js.map +1 -1
- package/lib/util/grpc.d.ts +35 -0
- package/lib/util/grpc.d.ts.map +1 -0
- package/lib/util/grpc.js +90 -0
- package/lib/util/grpc.js.map +1 -0
- 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} +2 -2
- package/lib/util/jaeger-client-types.js.map +1 -0
- package/lib/util/logging.d.ts +50 -34
- package/lib/util/logging.d.ts.map +1 -1
- package/lib/util/logging.js +133 -130
- 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 +11 -1
- package/lib/util/parse-workspace-id.d.ts.map +1 -1
- package/lib/util/parse-workspace-id.js +31 -8
- package/lib/util/parse-workspace-id.js.map +1 -1
- package/lib/util/parse-workspace-id.spec.d.ts +5 -1
- package/lib/util/parse-workspace-id.spec.d.ts.map +1 -1
- package/lib/util/parse-workspace-id.spec.js +124 -85
- package/lib/util/parse-workspace-id.spec.js.map +1 -1
- package/lib/util/queue.d.ts +1 -1
- package/lib/util/queue.js +17 -56
- package/lib/util/queue.js.map +1 -1
- package/lib/util/queue.spec.d.ts +1 -1
- package/lib/util/queue.spec.js +148 -289
- 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 +1 -1
- package/lib/util/semaphore.d.ts.map +1 -1
- package/lib/util/semaphore.js +16 -47
- 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 +7 -7
- 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 +30 -18
- 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 +55 -24
- package/lib/util/timeutil.spec.js.map +1 -1
- package/lib/util/tracing.d.ts +53 -7
- package/lib/util/tracing.d.ts.map +1 -1
- package/lib/util/tracing.js +198 -65
- 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 +8 -8
- package/lib/util/workspace-port-authentication.d.ts.map +1 -1
- package/lib/util/workspace-port-authentication.js +10 -13
- 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 +28 -8
- package/lib/workspace-cluster.d.ts.map +1 -1
- package/lib/workspace-cluster.js +20 -5
- package/lib/workspace-cluster.js.map +1 -1
- package/lib/workspace-instance.d.ts +46 -6
- 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 +40 -18
- package/pkg-yarn.lock +23 -10
- package/provenance-bundle.jsonl +2 -0
- package/src/accounting-protocol.ts +67 -58
- package/src/admin-protocol.ts +88 -20
- package/src/analytics.ts +52 -0
- 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 +49 -0
- package/src/context-url.ts +107 -0
- 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 +369 -146
- package/src/headless-workspace-log.ts +13 -15
- package/src/ide-frontend-service.ts +3 -3
- package/src/ide-protocol.ts +147 -0
- package/src/index.ts +17 -11
- package/src/installation-admin-protocol.ts +45 -0
- package/src/license-protocol.ts +13 -7
- package/src/messaging/browser/connection.ts +187 -28
- package/src/messaging/browser/window-connection.ts +40 -30
- package/src/messaging/client-call-metrics.ts +94 -0
- package/src/messaging/error.ts +36 -8
- package/src/messaging/handler.ts +13 -1
- package/src/messaging/node/connection.ts +23 -70
- package/src/messaging/proxy-factory.ts +35 -34
- package/src/oss-allowlist.ts +15 -0
- package/src/payment-protocol.ts +3 -3
- package/src/permission.ts +47 -34
- package/src/plans.ts +250 -199
- package/src/protocol.spec.ts +97 -0
- package/src/protocol.ts +636 -293
- package/src/snapshot-url.spec.ts +27 -0
- package/src/snapshot-url.ts +27 -0
- package/src/team-subscription-protocol.ts +62 -23
- package/src/teams-projects-protocol.ts +181 -0
- package/src/typings/globals.ts +6 -5
- package/src/usage.ts +85 -0
- package/src/util/analytics.ts +109 -0
- 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 +17 -9
- package/src/util/generate-workspace-id.spec.ts +38 -11
- package/src/util/generate-workspace-id.ts +465 -439
- package/src/util/gitpod-cookie.ts +38 -0
- package/src/util/gitpod-host-url.spec.ts +59 -8
- package/src/util/gitpod-host-url.ts +88 -48
- package/src/util/grpc.ts +107 -0
- package/src/util/jaeger-client-types.ts +102 -0
- package/src/util/logging.spec.ts +23 -0
- package/src/util/logging.ts +157 -75
- package/src/util/make-link.ts +7 -8
- package/src/util/nice-grpc.ts +96 -0
- package/src/util/parse-workspace-id.spec.ts +38 -9
- package/src/util/parse-workspace-id.ts +33 -8
- package/src/util/queue.spec.ts +28 -26
- package/src/util/queue.ts +1 -1
- package/src/util/repeat.ts +45 -0
- package/src/util/semaphore.ts +7 -9
- package/src/util/skip-if.ts +11 -8
- package/src/util/timeutil.spec.ts +41 -15
- package/src/util/timeutil.ts +32 -16
- package/src/util/tracing.spec.ts +88 -0
- package/src/util/tracing.ts +201 -32
- 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 +47 -17
- package/src/workspace-instance.ts +106 -32
- package/src/wsready.ts +11 -4
- package/data/builtin-theia-plugins.json +0 -372
- package/lib/email-protocol.d.ts +0 -50
- 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/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/context-url.d.ts +0 -13
- package/lib/util/context-url.d.ts.map +0 -1
- package/lib/util/context-url.js +0 -26
- package/lib/util/context-url.js.map +0 -1
- package/lib/util/context-url.spec.d.ts +0 -10
- package/lib/util/context-url.spec.d.ts.map +0 -1
- package/lib/util/context-url.spec.js +0 -52
- package/lib/util/context-url.spec.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/lib/util/without.d.ts +0 -7
- package/lib/util/without.d.ts.map +0 -1
- package/lib/util/without.js +0 -8
- package/lib/util/without.js.map +0 -1
- package/src/email-protocol.ts +0 -67
- package/src/messaging/connection-error-handler.ts +0 -62
- package/src/theia-plugins.ts +0 -11
- package/src/util/context-url.spec.ts +0 -25
- package/src/util/context-url.ts +0 -23
- package/src/util/jaeger-client.d.ts +0 -105
- package/src/util/repeater.ts +0 -49
- package/src/util/safe-promise.ts +0 -26
|
@@ -1,13 +1,12 @@
|
|
|
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
|
-
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import { oneMonthLater } from './util/timeutil';
|
|
7
|
+
import { v4 as uuidv4 } from "uuid";
|
|
8
|
+
import { User } from "./protocol";
|
|
9
|
+
import { oneMonthLater } from "./util/timeutil";
|
|
11
10
|
|
|
12
11
|
/*
|
|
13
12
|
* Subscription and acocunting data
|
|
@@ -34,7 +33,7 @@ export interface AccountEntry {
|
|
|
34
33
|
/**
|
|
35
34
|
* credit: end of validity
|
|
36
35
|
*/
|
|
37
|
-
expiryDate?: string;
|
|
36
|
+
expiryDate?: string; // exclusive
|
|
38
37
|
|
|
39
38
|
kind: AccountEntryKind;
|
|
40
39
|
|
|
@@ -47,26 +46,26 @@ export interface AccountEntry {
|
|
|
47
46
|
description?: object;
|
|
48
47
|
}
|
|
49
48
|
export namespace AccountEntry {
|
|
50
|
-
export function create<T extends AccountEntry>(entry:
|
|
49
|
+
export function create<T extends AccountEntry>(entry: Omit<T, "uid">): T {
|
|
51
50
|
const result = entry as T;
|
|
52
51
|
result.uid = uuidv4();
|
|
53
52
|
return result;
|
|
54
|
-
}
|
|
53
|
+
}
|
|
55
54
|
}
|
|
56
55
|
|
|
57
|
-
export type DebitAccountEntryKind =
|
|
58
|
-
export type AccountEntryKind =
|
|
56
|
+
export type DebitAccountEntryKind = "session" | "expiry" | "loss";
|
|
57
|
+
export type AccountEntryKind = "credit" | DebitAccountEntryKind | "carry" | "open";
|
|
59
58
|
|
|
60
59
|
export interface Credit extends AccountEntry {
|
|
61
|
-
kind:
|
|
60
|
+
kind: "credit";
|
|
62
61
|
expiryDate: string;
|
|
63
62
|
}
|
|
64
63
|
export type Debit = LossDebit | ExpiryDebit | SessionDebit;
|
|
65
64
|
export interface LossDebit extends AccountEntry {
|
|
66
|
-
kind:
|
|
65
|
+
kind: "loss";
|
|
67
66
|
}
|
|
68
67
|
export interface ExpiryDebit extends AccountEntry {
|
|
69
|
-
kind:
|
|
68
|
+
kind: "expiry";
|
|
70
69
|
creditId: undefined;
|
|
71
70
|
}
|
|
72
71
|
export interface SessionDebit extends AccountEntry {
|
|
@@ -81,9 +80,7 @@ export interface CreditDescription {
|
|
|
81
80
|
}
|
|
82
81
|
export namespace CreditDescription {
|
|
83
82
|
export function is(obj: any): obj is CreditDescription {
|
|
84
|
-
return !!obj
|
|
85
|
-
&& obj.hasOwnProperty('subscriptionId')
|
|
86
|
-
&& obj.hasOwnProperty('planId');
|
|
83
|
+
return !!obj && obj.hasOwnProperty("subscriptionId") && obj.hasOwnProperty("planId");
|
|
87
84
|
}
|
|
88
85
|
}
|
|
89
86
|
export interface SessionDescription {
|
|
@@ -91,16 +88,16 @@ export interface SessionDescription {
|
|
|
91
88
|
contextUrl: string;
|
|
92
89
|
workspaceId: string;
|
|
93
90
|
workspaceInstanceId: string;
|
|
94
|
-
private: boolean;
|
|
95
91
|
}
|
|
96
92
|
export namespace SessionDescription {
|
|
97
93
|
export function is(obj: any): obj is SessionDescription {
|
|
98
|
-
return
|
|
99
|
-
&&
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
94
|
+
return (
|
|
95
|
+
!!obj &&
|
|
96
|
+
obj.hasOwnProperty("contextTitle") &&
|
|
97
|
+
obj.hasOwnProperty("contextUrl") &&
|
|
98
|
+
obj.hasOwnProperty("workspaceId") &&
|
|
99
|
+
obj.hasOwnProperty("workspaceInstanceId")
|
|
100
|
+
);
|
|
104
101
|
}
|
|
105
102
|
}
|
|
106
103
|
|
|
@@ -114,11 +111,11 @@ export namespace SessionDescription {
|
|
|
114
111
|
export interface Subscription {
|
|
115
112
|
uid: string;
|
|
116
113
|
userId: string;
|
|
117
|
-
startDate: string;
|
|
114
|
+
startDate: string; // inclusive
|
|
118
115
|
/** When the subscription will end (must be >= cancellationDate!) */
|
|
119
|
-
endDate?: string;
|
|
116
|
+
endDate?: string; // exclusive
|
|
120
117
|
/** When the subscription was cancelled */
|
|
121
|
-
cancellationDate?: string;
|
|
118
|
+
cancellationDate?: string; // exclusive
|
|
122
119
|
/** Number of granted hours */
|
|
123
120
|
amount: number;
|
|
124
121
|
/** Number of granted hours for the first month: If this is set, use this value for the first month */
|
|
@@ -127,6 +124,7 @@ export interface Subscription {
|
|
|
127
124
|
paymentReference?: string;
|
|
128
125
|
paymentData?: PaymentData;
|
|
129
126
|
teamSubscriptionSlotId?: string;
|
|
127
|
+
teamMembershipId?: string;
|
|
130
128
|
/** marks the subscription as deleted */
|
|
131
129
|
deleted?: boolean;
|
|
132
130
|
}
|
|
@@ -148,8 +146,7 @@ export interface UserPaidSubscription extends Subscription {
|
|
|
148
146
|
}
|
|
149
147
|
export namespace UserPaidSubscription {
|
|
150
148
|
export function is(data: any): data is UserPaidSubscription {
|
|
151
|
-
return !!data
|
|
152
|
-
&& data.hasOwnProperty('paymentReference');
|
|
149
|
+
return !!data && data.hasOwnProperty("paymentReference");
|
|
153
150
|
}
|
|
154
151
|
}
|
|
155
152
|
|
|
@@ -158,44 +155,56 @@ export interface AssignedTeamSubscription extends Subscription {
|
|
|
158
155
|
}
|
|
159
156
|
export namespace AssignedTeamSubscription {
|
|
160
157
|
export function is(data: any): data is AssignedTeamSubscription {
|
|
161
|
-
return !!data
|
|
162
|
-
|
|
158
|
+
return !!data && data.hasOwnProperty("teamSubscriptionSlotId");
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
export interface AssignedTeamSubscription2 extends Subscription {
|
|
163
|
+
teamMembershipId: string;
|
|
164
|
+
}
|
|
165
|
+
export namespace AssignedTeamSubscription2 {
|
|
166
|
+
export function is(data: any): data is AssignedTeamSubscription2 {
|
|
167
|
+
return typeof data === "object" && data.hasOwnProperty("teamMembershipId");
|
|
163
168
|
}
|
|
164
169
|
}
|
|
165
170
|
|
|
166
171
|
export namespace Subscription {
|
|
167
|
-
export function create(newSubscription:
|
|
172
|
+
export function create(newSubscription: Omit<Subscription, "uid">) {
|
|
168
173
|
const subscription = newSubscription as Subscription;
|
|
169
174
|
subscription.uid = uuidv4();
|
|
170
175
|
return subscription;
|
|
171
|
-
}
|
|
176
|
+
}
|
|
172
177
|
export function cancelSubscription(s: Subscription, cancellationDate: string, endDate?: string) {
|
|
173
178
|
s.endDate = endDate || cancellationDate;
|
|
174
179
|
s.cancellationDate = cancellationDate;
|
|
175
|
-
}
|
|
180
|
+
}
|
|
176
181
|
export function isSame(s1: Subscription | undefined, s2: Subscription | undefined): boolean {
|
|
177
|
-
return
|
|
178
|
-
|
|
179
|
-
&&
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
182
|
+
return (
|
|
183
|
+
!!s1 &&
|
|
184
|
+
!!s2 &&
|
|
185
|
+
s1.userId === s2.userId &&
|
|
186
|
+
s1.planId === s2.planId &&
|
|
187
|
+
s1.startDate === s2.startDate &&
|
|
188
|
+
s1.endDate === s2.endDate &&
|
|
189
|
+
s1.amount === s2.amount &&
|
|
190
|
+
s1.cancellationDate === s2.cancellationDate &&
|
|
191
|
+
s1.deleted === s2.deleted &&
|
|
192
|
+
((s1.paymentData === undefined && s2.paymentData === undefined) ||
|
|
193
|
+
(!!s1.paymentData &&
|
|
194
|
+
!!s2.paymentData &&
|
|
195
|
+
s1.paymentData.downgradeDate === s2.paymentData.downgradeDate &&
|
|
196
|
+
s1.paymentData.newPlan === s2.paymentData.newPlan))
|
|
197
|
+
);
|
|
198
|
+
}
|
|
190
199
|
export function isActive(s: Subscription, date: string): boolean {
|
|
191
200
|
return s.startDate <= date && (s.endDate === undefined || date < s.endDate);
|
|
192
|
-
}
|
|
201
|
+
}
|
|
202
|
+
export function isCancelled(s: Subscription, date: string): boolean {
|
|
203
|
+
return (!!s.cancellationDate && s.cancellationDate < date) || (!!s.endDate && s.endDate < date); // This edge case is meant to handle bad data: If for whatever reason cancellationDate has not been set: treat endDate as such
|
|
204
|
+
}
|
|
193
205
|
export function isDowngraded(s: Subscription) {
|
|
194
206
|
return s.paymentData && s.paymentData.downgradeDate;
|
|
195
|
-
}
|
|
196
|
-
export function isCancelled(s: Subscription) {
|
|
197
|
-
return !!s.cancellationDate;
|
|
198
|
-
};
|
|
207
|
+
}
|
|
199
208
|
export function calculateCurrentPeriod(startDate: string, now: Date) {
|
|
200
209
|
let nextStartDate = startDate;
|
|
201
210
|
do {
|
|
@@ -203,19 +212,19 @@ export namespace Subscription {
|
|
|
203
212
|
nextStartDate = oneMonthLater(startDate, new Date(startDate).getDate());
|
|
204
213
|
} while (nextStartDate < now.toISOString());
|
|
205
214
|
return { startDate, endDate: nextStartDate };
|
|
206
|
-
}
|
|
215
|
+
}
|
|
207
216
|
}
|
|
208
217
|
|
|
209
218
|
export type MaybeSubscription = Subscription | undefined;
|
|
210
219
|
|
|
211
220
|
export interface Period {
|
|
212
|
-
startDate: string;
|
|
213
|
-
endDate: string;
|
|
221
|
+
startDate: string; // inclusive
|
|
222
|
+
endDate: string; // exclusive
|
|
214
223
|
}
|
|
215
224
|
|
|
216
225
|
export type MaybePeriod = Period | undefined;
|
|
217
226
|
|
|
218
|
-
export type AccountEntryFixedPeriod =
|
|
227
|
+
export type AccountEntryFixedPeriod = Omit<AccountEntry, "uid"> & { expiryDate: string };
|
|
219
228
|
export interface AccountStatement extends Period {
|
|
220
229
|
userId: string;
|
|
221
230
|
/**
|
|
@@ -227,9 +236,9 @@ export interface AccountStatement extends Period {
|
|
|
227
236
|
/** Remaining valid hours (accumulated from credits) */
|
|
228
237
|
remainingHours: RemainingHours;
|
|
229
238
|
}
|
|
230
|
-
export type RemainingHours = number |
|
|
239
|
+
export type RemainingHours = number | "unlimited";
|
|
231
240
|
|
|
232
241
|
export interface CreditAlert {
|
|
233
|
-
userId: string
|
|
234
|
-
remainingUsageHours: number
|
|
242
|
+
userId: string;
|
|
243
|
+
remainingUsageHours: number;
|
|
235
244
|
}
|
package/src/admin-protocol.ts
CHANGED
|
@@ -1,70 +1,111 @@
|
|
|
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 { User, Workspace, NamedWorkspaceFeatureFlag } from "./protocol";
|
|
8
|
-
import {
|
|
8
|
+
import { BlockedRepository } from "./blocked-repositories-protocol";
|
|
9
|
+
import { FindPrebuildsParams } from "./gitpod-service";
|
|
10
|
+
import { Project, Team, PrebuildWithStatus, TeamMemberInfo, TeamMemberRole } from "./teams-projects-protocol";
|
|
9
11
|
import { WorkspaceInstance, WorkspaceInstancePhase } from "./workspace-instance";
|
|
10
12
|
import { RoleOrPermission } from "./permission";
|
|
11
13
|
import { AccountStatement } from "./accounting-protocol";
|
|
14
|
+
import { BillingMode } from "./billing-mode";
|
|
15
|
+
import { CostCenterJSON, ListUsageRequest, ListUsageResponse } from "./usage";
|
|
16
|
+
import { InstallationAdminSettings, TelemetryData } from "./installation-admin-protocol";
|
|
12
17
|
|
|
13
18
|
export interface AdminServer {
|
|
14
19
|
adminGetUsers(req: AdminGetListRequest<User>): Promise<AdminGetListResult<User>>;
|
|
15
20
|
adminGetUser(id: string): Promise<User>;
|
|
16
21
|
adminBlockUser(req: AdminBlockUserRequest): Promise<User>;
|
|
17
22
|
adminDeleteUser(id: string): Promise<void>;
|
|
23
|
+
adminVerifyUser(id: string): Promise<User>;
|
|
18
24
|
adminModifyRoleOrPermission(req: AdminModifyRoleOrPermissionRequest): Promise<User>;
|
|
19
25
|
adminModifyPermanentWorkspaceFeatureFlag(req: AdminModifyPermanentWorkspaceFeatureFlagRequest): Promise<User>;
|
|
20
26
|
|
|
27
|
+
adminCreateBlockedRepository(urlRegexp: string, blockUser: boolean): Promise<BlockedRepository>;
|
|
28
|
+
adminDeleteBlockedRepository(id: number): Promise<void>;
|
|
29
|
+
adminGetBlockedRepositories(
|
|
30
|
+
req: AdminGetListRequest<BlockedRepository>,
|
|
31
|
+
): Promise<AdminGetListResult<BlockedRepository>>;
|
|
32
|
+
|
|
33
|
+
adminGetTeamMembers(teamId: string): Promise<TeamMemberInfo[]>;
|
|
34
|
+
adminGetTeams(req: AdminGetListRequest<Team>): Promise<AdminGetListResult<Team>>;
|
|
35
|
+
adminGetTeamById(id: string): Promise<Team | undefined>;
|
|
36
|
+
adminSetTeamMemberRole(teamId: string, userId: string, role: TeamMemberRole): Promise<void>;
|
|
37
|
+
|
|
21
38
|
adminGetWorkspaces(req: AdminGetWorkspacesRequest): Promise<AdminGetListResult<WorkspaceAndInstance>>;
|
|
22
39
|
adminGetWorkspace(id: string): Promise<WorkspaceAndInstance>;
|
|
23
40
|
adminForceStopWorkspace(id: string): Promise<void>;
|
|
41
|
+
adminRestoreSoftDeletedWorkspace(id: string): Promise<void>;
|
|
42
|
+
|
|
43
|
+
adminGetProjectsBySearchTerm(req: AdminGetListRequest<Project>): Promise<AdminGetListResult<Project>>;
|
|
44
|
+
adminGetProjectById(id: string): Promise<Project | undefined>;
|
|
24
45
|
|
|
46
|
+
adminFindPrebuilds(params: FindPrebuildsParams): Promise<PrebuildWithStatus[]>;
|
|
25
47
|
adminSetLicense(key: string): Promise<void>;
|
|
26
48
|
|
|
27
49
|
adminGetAccountStatement(userId: string): Promise<AccountStatement>;
|
|
28
50
|
adminSetProfessionalOpenSource(userId: string, shouldGetProfOSS: boolean): Promise<void>;
|
|
29
51
|
adminIsStudent(userId: string): Promise<boolean>;
|
|
30
52
|
adminAddStudentEmailDomain(userId: string, domain: string): Promise<void>;
|
|
53
|
+
adminGrantExtraHours(userId: string, extraHours: number): Promise<void>;
|
|
54
|
+
adminGetBillingMode(attributionId: string): Promise<BillingMode>;
|
|
55
|
+
|
|
56
|
+
adminGetSettings(): Promise<InstallationAdminSettings>;
|
|
57
|
+
adminUpdateSettings(settings: InstallationAdminSettings): Promise<void>;
|
|
58
|
+
|
|
59
|
+
adminGetCostCenter(attributionId: string): Promise<CostCenterJSON | undefined>;
|
|
60
|
+
adminSetUsageLimit(attributionId: string, usageLimit: number): Promise<void>;
|
|
61
|
+
|
|
62
|
+
adminListUsage(req: ListUsageRequest): Promise<ListUsageResponse>;
|
|
63
|
+
adminAddUsageCreditNote(attributionId: string, credits: number, note: string): Promise<void>;
|
|
64
|
+
adminGetUsageBalance(attributionId: string): Promise<number>;
|
|
65
|
+
|
|
66
|
+
// Admin Settings
|
|
67
|
+
adminGetSettings(): Promise<InstallationAdminSettings>;
|
|
68
|
+
adminUpdateSettings(settings: InstallationAdminSettings): Promise<void>;
|
|
69
|
+
adminGetTelemetryData(): Promise<TelemetryData>;
|
|
31
70
|
}
|
|
32
71
|
|
|
33
72
|
export interface AdminGetListRequest<T> {
|
|
34
|
-
offset: number
|
|
35
|
-
limit: number
|
|
36
|
-
orderBy: keyof T
|
|
37
|
-
orderDir: "asc" | "desc"
|
|
73
|
+
offset: number;
|
|
74
|
+
limit: number;
|
|
75
|
+
orderBy: keyof T;
|
|
76
|
+
orderDir: "asc" | "desc";
|
|
38
77
|
searchTerm?: string;
|
|
39
78
|
}
|
|
40
79
|
|
|
41
80
|
export interface AdminGetListResult<T> {
|
|
42
|
-
total: number
|
|
43
|
-
rows: T[]
|
|
81
|
+
total: number;
|
|
82
|
+
rows: T[];
|
|
44
83
|
}
|
|
45
84
|
|
|
46
85
|
export interface AdminBlockUserRequest {
|
|
47
|
-
id: string
|
|
48
|
-
blocked: boolean
|
|
86
|
+
id: string;
|
|
87
|
+
blocked: boolean;
|
|
49
88
|
}
|
|
50
89
|
|
|
51
90
|
export interface AdminModifyRoleOrPermissionRequest {
|
|
52
91
|
id: string;
|
|
53
92
|
rpp: {
|
|
54
|
-
r: RoleOrPermission
|
|
55
|
-
add: boolean
|
|
56
|
-
}[]
|
|
93
|
+
r: RoleOrPermission;
|
|
94
|
+
add: boolean;
|
|
95
|
+
}[];
|
|
57
96
|
}
|
|
58
97
|
|
|
59
98
|
export interface AdminModifyPermanentWorkspaceFeatureFlagRequest {
|
|
60
99
|
id: string;
|
|
61
100
|
changes: {
|
|
62
|
-
featureFlag: NamedWorkspaceFeatureFlag
|
|
63
|
-
add: boolean
|
|
64
|
-
}[]
|
|
101
|
+
featureFlag: NamedWorkspaceFeatureFlag;
|
|
102
|
+
add: boolean;
|
|
103
|
+
}[];
|
|
65
104
|
}
|
|
66
105
|
|
|
67
|
-
export interface WorkspaceAndInstance
|
|
106
|
+
export interface WorkspaceAndInstance
|
|
107
|
+
extends Omit<Workspace, "id" | "creationTime">,
|
|
108
|
+
Omit<WorkspaceInstance, "id" | "creationTime"> {
|
|
68
109
|
workspaceId: string;
|
|
69
110
|
workspaceCreationTime: string;
|
|
70
111
|
instanceId: string;
|
|
@@ -72,6 +113,33 @@ export interface WorkspaceAndInstance extends Without<Workspace, "id"|"creationT
|
|
|
72
113
|
phase: WorkspaceInstancePhase;
|
|
73
114
|
}
|
|
74
115
|
|
|
75
|
-
export
|
|
76
|
-
|
|
77
|
-
|
|
116
|
+
export namespace WorkspaceAndInstance {
|
|
117
|
+
export function toWorkspace(wai: WorkspaceAndInstance): Workspace {
|
|
118
|
+
return {
|
|
119
|
+
id: wai.workspaceId,
|
|
120
|
+
creationTime: wai.workspaceCreationTime,
|
|
121
|
+
...wai,
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
export function toInstance(wai: WorkspaceAndInstance): WorkspaceInstance | undefined {
|
|
126
|
+
if (!wai.instanceId) {
|
|
127
|
+
return undefined;
|
|
128
|
+
}
|
|
129
|
+
return {
|
|
130
|
+
id: wai.instanceId,
|
|
131
|
+
creationTime: wai.instanceCreationTime,
|
|
132
|
+
...wai,
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
export type AdminGetWorkspacesRequest = AdminGetListRequest<WorkspaceAndInstance> & AdminGetWorkspacesQuery;
|
|
138
|
+
/** The fields are meant to be used either OR (not combined) */
|
|
139
|
+
export type AdminGetWorkspacesQuery = {
|
|
140
|
+
/** we use this field in case we have a UUIDv4 and don't know whether it's an (old) workspace or instance id */
|
|
141
|
+
instanceIdOrWorkspaceId?: string;
|
|
142
|
+
instanceId?: string;
|
|
143
|
+
workspaceId?: string;
|
|
144
|
+
ownerId?: string;
|
|
145
|
+
};
|
package/src/analytics.ts
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
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 const IAnalyticsWriter = Symbol("IAnalyticsWriter");
|
|
8
|
+
|
|
9
|
+
type Identity =
|
|
10
|
+
| { userId: string | number; anonymousId?: string | number }
|
|
11
|
+
| { userId?: string | number; anonymousId: string | number };
|
|
12
|
+
|
|
13
|
+
interface Message {
|
|
14
|
+
messageId?: string;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export type IdentifyMessage = Message &
|
|
18
|
+
Identity & {
|
|
19
|
+
traits?: any;
|
|
20
|
+
timestamp?: Date;
|
|
21
|
+
context?: any;
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
export type TrackMessage = Message &
|
|
25
|
+
Identity & {
|
|
26
|
+
event: string;
|
|
27
|
+
properties?: any;
|
|
28
|
+
timestamp?: Date;
|
|
29
|
+
context?: any;
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
export type PageMessage = Message &
|
|
33
|
+
Identity & {
|
|
34
|
+
properties?: any;
|
|
35
|
+
timestamp?: Date;
|
|
36
|
+
context?: any;
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
export type RemoteTrackMessage = Omit<TrackMessage, "timestamp" | "userId">;
|
|
40
|
+
export type RemotePageMessage = Omit<PageMessage, "timestamp" | "userId"> & {
|
|
41
|
+
includePII?: boolean;
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
export type RemoteIdentifyMessage = Omit<IdentifyMessage, "timestamp" | "userId">;
|
|
45
|
+
|
|
46
|
+
export interface IAnalyticsWriter {
|
|
47
|
+
identify(msg: IdentifyMessage): void;
|
|
48
|
+
|
|
49
|
+
track(msg: TrackMessage): void;
|
|
50
|
+
|
|
51
|
+
page(msg: PageMessage): void;
|
|
52
|
+
}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2022 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 { User } from "./protocol";
|
|
8
|
+
import { Team } from "./teams-projects-protocol";
|
|
9
|
+
|
|
10
|
+
export type AttributionId = UserAttributionId | TeamAttributionId;
|
|
11
|
+
export type AttributionTarget = "user" | "team";
|
|
12
|
+
|
|
13
|
+
export interface UserAttributionId {
|
|
14
|
+
kind: "user";
|
|
15
|
+
userId: string;
|
|
16
|
+
}
|
|
17
|
+
export interface TeamAttributionId {
|
|
18
|
+
kind: "team";
|
|
19
|
+
teamId: string;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export namespace AttributionId {
|
|
23
|
+
const SEPARATOR = ":";
|
|
24
|
+
|
|
25
|
+
export function create(userOrTeam: User | Team): AttributionId {
|
|
26
|
+
if (User.is(userOrTeam)) {
|
|
27
|
+
return { kind: "user", userId: userOrTeam.id };
|
|
28
|
+
} else {
|
|
29
|
+
return { kind: "team", teamId: userOrTeam.id };
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export function parse(s: string): UserAttributionId | TeamAttributionId | undefined {
|
|
34
|
+
if (!s) {
|
|
35
|
+
return undefined;
|
|
36
|
+
}
|
|
37
|
+
const parts = s.split(":");
|
|
38
|
+
if (parts.length !== 2) {
|
|
39
|
+
return undefined;
|
|
40
|
+
}
|
|
41
|
+
switch (parts[0]) {
|
|
42
|
+
case "user":
|
|
43
|
+
return { kind: "user", userId: parts[1] };
|
|
44
|
+
case "team":
|
|
45
|
+
return { kind: "team", teamId: parts[1] };
|
|
46
|
+
default:
|
|
47
|
+
return undefined;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
export function render(id: AttributionId): string {
|
|
52
|
+
switch (id.kind) {
|
|
53
|
+
case "user":
|
|
54
|
+
return `user${SEPARATOR}${id.userId}`;
|
|
55
|
+
case "team":
|
|
56
|
+
return `team${SEPARATOR}${id.teamId}`;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
export function equals(a: AttributionId, b: AttributionId): boolean {
|
|
61
|
+
return render(a) === render(b);
|
|
62
|
+
}
|
|
63
|
+
}
|
package/src/auth.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
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
|
export interface SelectAccountPayload {
|
|
@@ -11,14 +11,14 @@ export interface SelectAccountPayload {
|
|
|
11
11
|
authHost: string;
|
|
12
12
|
authName: string;
|
|
13
13
|
authProviderType: string;
|
|
14
|
-
}
|
|
14
|
+
};
|
|
15
15
|
otherUser: {
|
|
16
16
|
name: string;
|
|
17
17
|
avatarUrl: string;
|
|
18
18
|
authHost: string;
|
|
19
19
|
authName: string;
|
|
20
20
|
authProviderType: string;
|
|
21
|
-
}
|
|
21
|
+
};
|
|
22
22
|
}
|
|
23
23
|
export namespace SelectAccountPayload {
|
|
24
24
|
export function is(data: any): data is SelectAccountPayload {
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2022 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
|
+
/**
|
|
8
|
+
* BillingMode is used to answer the following questions:
|
|
9
|
+
* - Should UI piece x be displayed for this user/team? (getBillingModeForUser/Team)
|
|
10
|
+
* - What model should be used to limit this workspace's capabilities (mayStartWorkspace, setTimeout, workspace class, etc...) (getBillingMode(workspaceInstance.attributionId))
|
|
11
|
+
* - How is a workspace session charged for? (getBillingMode(workspaceInstance.attributionId))
|
|
12
|
+
*/
|
|
13
|
+
export type BillingMode = None | Chargebee | UsageBased;
|
|
14
|
+
export namespace BillingMode {
|
|
15
|
+
export const NONE: None = {
|
|
16
|
+
mode: "none",
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
/** Incl. upgrade and status */
|
|
20
|
+
export function showUsageBasedBilling(billingMode?: BillingMode): boolean {
|
|
21
|
+
if (!billingMode) {
|
|
22
|
+
return false;
|
|
23
|
+
}
|
|
24
|
+
return (
|
|
25
|
+
billingMode.mode === "usage-based" || (billingMode.mode === "chargebee" && !!billingMode.canUpgradeToUBB)
|
|
26
|
+
);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export function showTeamSubscriptionUI(billingMode?: BillingMode): boolean {
|
|
30
|
+
if (!billingMode) {
|
|
31
|
+
return false;
|
|
32
|
+
}
|
|
33
|
+
return (
|
|
34
|
+
billingMode.mode === "chargebee" ||
|
|
35
|
+
(billingMode.mode === "usage-based" && !!billingMode.hasChargebeeTeamSubscription)
|
|
36
|
+
);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export function canSetWorkspaceClass(billingMode?: BillingMode): boolean {
|
|
40
|
+
if (!billingMode) {
|
|
41
|
+
return false;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
// if has any Stripe subscription, either directly or per team, OR we're running on a license
|
|
45
|
+
return billingMode.mode === "usage-based" || billingMode.mode === "none";
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
export function canSetCostCenter(billingMode: BillingMode): boolean {
|
|
49
|
+
// if has any Stripe Subscription, either directly or per team
|
|
50
|
+
return billingMode.mode === "usage-based";
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/** Payment is disabled */
|
|
55
|
+
interface None {
|
|
56
|
+
mode: "none";
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/** Sessions is handled with old subscription logic based on Chargebee */
|
|
60
|
+
interface Chargebee {
|
|
61
|
+
mode: "chargebee";
|
|
62
|
+
|
|
63
|
+
/** True iff this is a team, and is based on a paid plan. Currently only set for teams! */
|
|
64
|
+
paid?: boolean;
|
|
65
|
+
|
|
66
|
+
canUpgradeToUBB?: boolean;
|
|
67
|
+
|
|
68
|
+
/** Name of team(s) that block switching to usage-based */
|
|
69
|
+
teamNames?: string[];
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/** Session is handld with new usage-based logic */
|
|
73
|
+
interface UsageBased {
|
|
74
|
+
mode: "usage-based";
|
|
75
|
+
|
|
76
|
+
/** True iff this is a team, and is based on a paid plan. Currently only set for teams! */
|
|
77
|
+
paid?: boolean;
|
|
78
|
+
|
|
79
|
+
/** User is already converted, but is member with at least one Chargebee-based "Team Plan" */
|
|
80
|
+
hasChargebeeTeamPlan?: boolean;
|
|
81
|
+
|
|
82
|
+
/** User is already converted, but is member or owner in at least one Chargebee-based "Team Subscription" */
|
|
83
|
+
hasChargebeeTeamSubscription?: boolean;
|
|
84
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2022 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 BlockedRepository {
|
|
8
|
+
id: number;
|
|
9
|
+
urlRegexp: string;
|
|
10
|
+
blockUser: boolean;
|
|
11
|
+
createdAt: string;
|
|
12
|
+
updatedAt: string;
|
|
13
|
+
}
|