@gitpod/gitpod-protocol 0.1.5-wth-update-mysql-dependencies-2.30 → 0.1.5-wth-test.41
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/builtin-theia-plugins.json +9 -9
- package/data/gitpod-schema.json +8 -22
- package/lib/accounting-protocol.d.ts +155 -0
- package/lib/accounting-protocol.d.ts.map +1 -0
- package/lib/accounting-protocol.js +109 -0
- package/lib/accounting-protocol.js.map +1 -0
- package/lib/admin-protocol.d.ts +20 -4
- package/lib/admin-protocol.d.ts.map +1 -1
- package/lib/admin-protocol.js +15 -0
- package/lib/admin-protocol.js.map +1 -1
- package/lib/analytics.d.ts +45 -0
- package/lib/analytics.d.ts.map +1 -0
- package/lib/{util/without.js → analytics.js} +4 -2
- package/lib/analytics.js.map +1 -0
- package/lib/context-url.d.ts +18 -0
- package/lib/context-url.d.ts.map +1 -0
- package/lib/context-url.js +49 -0
- package/lib/context-url.js.map +1 -0
- package/lib/{util/context-url.spec.d.ts → context-url.spec.d.ts} +3 -1
- package/lib/context-url.spec.d.ts.map +1 -0
- package/lib/context-url.spec.js +73 -0
- package/lib/context-url.spec.js.map +1 -0
- package/lib/email-protocol.d.ts +1 -2
- 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.js +5 -4
- package/lib/encryption/container-module.js.map +1 -1
- package/lib/encryption/encryption-engine.js +19 -20
- package/lib/encryption/encryption-engine.js.map +1 -1
- package/lib/encryption/encryption-engine.spec.js +29 -36
- package/lib/encryption/encryption-engine.spec.js.map +1 -1
- package/lib/encryption/encryption-service.js +29 -43
- package/lib/encryption/encryption-service.js.map +1 -1
- package/lib/encryption/key-provider.js +25 -30
- 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 +20 -21
- package/lib/env.js.map +1 -1
- package/lib/gitpod-file-parser.js +25 -41
- package/lib/gitpod-file-parser.js.map +1 -1
- package/lib/gitpod-file-parser.spec.js +116 -116
- package/lib/gitpod-file-parser.spec.js.map +1 -1
- package/lib/gitpod-service.d.ts +132 -18
- package/lib/gitpod-service.d.ts.map +1 -1
- package/lib/gitpod-service.js +168 -256
- package/lib/gitpod-service.js.map +1 -1
- package/lib/headless-workspace-log.d.ts +8 -11
- package/lib/headless-workspace-log.d.ts.map +1 -1
- package/lib/headless-workspace-log.js +4 -7
- package/lib/headless-workspace-log.js.map +1 -1
- package/lib/index.d.ts +4 -0
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +5 -1
- package/lib/index.js.map +1 -1
- package/lib/messaging/browser/connection.d.ts +5 -3
- package/lib/messaging/browser/connection.d.ts.map +1 -1
- package/lib/messaging/browser/connection.js +183 -33
- package/lib/messaging/browser/connection.js.map +1 -1
- package/lib/messaging/browser/window-connection.js +35 -55
- package/lib/messaging/browser/window-connection.js.map +1 -1
- package/lib/messaging/client-call-metrics.d.ts +35 -0
- package/lib/messaging/client-call-metrics.d.ts.map +1 -0
- package/lib/messaging/client-call-metrics.js +83 -0
- package/lib/messaging/client-call-metrics.js.map +1 -0
- package/lib/messaging/connection-error-handler.js +11 -23
- package/lib/messaging/connection-error-handler.js.map +1 -1
- package/lib/messaging/error.d.ts +3 -1
- package/lib/messaging/error.d.ts.map +1 -1
- package/lib/messaging/error.js +6 -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/node/connection.js +22 -22
- package/lib/messaging/node/connection.js.map +1 -1
- package/lib/messaging/proxy-factory.d.ts +2 -0
- package/lib/messaging/proxy-factory.d.ts.map +1 -1
- package/lib/messaging/proxy-factory.js +74 -159
- package/lib/messaging/proxy-factory.js.map +1 -1
- package/lib/payment-protocol.d.ts +18 -0
- package/lib/payment-protocol.d.ts.map +1 -0
- package/lib/payment-protocol.js +13 -0
- package/lib/payment-protocol.js.map +1 -0
- package/lib/permission.d.ts +2 -1
- package/lib/permission.d.ts.map +1 -1
- package/lib/permission.js +14 -13
- package/lib/permission.js.map +1 -1
- package/lib/plans.d.ts +210 -0
- package/lib/plans.d.ts.map +1 -0
- package/lib/plans.js +570 -0
- package/lib/plans.js.map +1 -0
- package/lib/protocol.d.ts +94 -15
- package/lib/protocol.d.ts.map +1 -1
- package/lib/protocol.js +104 -130
- 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/util/without.ts → lib/snapshot-url.spec.d.ts} +2 -3
- 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 +73 -0
- package/lib/team-subscription-protocol.d.ts.map +1 -0
- package/lib/team-subscription-protocol.js +63 -0
- package/lib/team-subscription-protocol.js.map +1 -0
- package/lib/teams-projects-protocol.d.ts +103 -0
- package/lib/teams-projects-protocol.d.ts.map +1 -0
- package/lib/teams-projects-protocol.js +23 -0
- package/lib/teams-projects-protocol.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 +79 -0
- package/lib/util/analytics.js.map +1 -0
- package/lib/util/async-iterator.js +55 -133
- 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 +8 -8
- 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.js +26 -39
- package/lib/util/disposable.js.map +1 -1
- package/lib/util/event.js +58 -74
- package/lib/util/event.js.map +1 -1
- package/lib/util/garbage-collected-cache.js +22 -46
- package/lib/util/garbage-collected-cache.js.map +1 -1
- package/lib/util/generate-workspace-id.d.ts.map +1 -1
- package/lib/util/generate-workspace-id.js +13 -67
- package/lib/util/generate-workspace-id.js.map +1 -1
- package/lib/util/generate-workspace-id.spec.js +34 -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 +44 -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 +98 -98
- 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 +103 -31
- package/lib/util/gitpod-host-url.spec.js.map +1 -1
- package/lib/util/grpc.d.ts +15 -0
- package/lib/util/grpc.d.ts.map +1 -0
- package/lib/util/grpc.js +18 -0
- package/lib/util/grpc.js.map +1 -0
- package/lib/util/logging.d.ts +49 -33
- package/lib/util/logging.d.ts.map +1 -1
- package/lib/util/logging.js +107 -110
- package/lib/util/logging.js.map +1 -1
- package/lib/util/make-link.js +2 -2
- 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 +32 -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 +144 -288
- package/lib/util/queue.spec.js.map +1 -1
- package/lib/util/repeater.js +35 -88
- package/lib/util/repeater.js.map +1 -1
- package/lib/util/safe-promise.js +9 -12
- package/lib/util/safe-promise.js.map +1 -1
- package/lib/util/semaphore.js +15 -46
- package/lib/util/semaphore.js.map +1 -1
- package/lib/util/skip-if.js +6 -6
- package/lib/util/skip-if.js.map +1 -1
- package/lib/util/timeutil.js +28 -16
- package/lib/util/timeutil.js.map +1 -1
- package/lib/util/timeutil.spec.js +21 -24
- package/lib/util/timeutil.spec.js.map +1 -1
- package/lib/util/tracing.js +43 -47
- package/lib/util/tracing.js.map +1 -1
- package/lib/util/workspace-port-authentication.js +3 -2
- package/lib/util/workspace-port-authentication.js.map +1 -1
- package/lib/workspace-cluster.d.ts +74 -0
- package/lib/workspace-cluster.d.ts.map +1 -0
- package/lib/workspace-cluster.js +16 -0
- package/lib/workspace-cluster.js.map +1 -0
- package/lib/workspace-instance.d.ts +5 -2
- package/lib/workspace-instance.d.ts.map +1 -1
- package/lib/wsready.d.ts +1 -1
- package/lib/wsready.js +2 -2
- package/package.json +28 -16
- package/pkg-yarn.lock +17 -9
- package/src/accounting-protocol.ts +229 -0
- package/src/admin-protocol.ts +39 -5
- package/src/analytics.ts +54 -0
- package/src/context-url.spec.ts +39 -0
- package/src/context-url.ts +51 -0
- package/src/email-protocol.ts +2 -3
- package/src/env.ts +10 -10
- package/src/gitpod-service.ts +198 -33
- package/src/headless-workspace-log.ts +7 -11
- package/src/index.ts +5 -1
- package/src/messaging/browser/connection.ts +195 -14
- package/src/messaging/client-call-metrics.ts +97 -0
- package/src/messaging/error.ts +8 -2
- package/src/messaging/handler.ts +12 -0
- package/src/messaging/node/connection.ts +2 -2
- package/src/messaging/proxy-factory.ts +14 -6
- package/src/payment-protocol.ts +20 -0
- package/src/permission.ts +2 -1
- package/src/plans.ts +632 -0
- package/src/protocol.ts +153 -43
- package/src/snapshot-url.spec.ts +25 -0
- package/src/snapshot-url.ts +27 -0
- package/src/team-subscription-protocol.ts +113 -0
- package/src/teams-projects-protocol.ts +132 -0
- package/src/util/analytics.ts +87 -0
- package/src/util/deferred.ts +1 -1
- package/src/util/garbage-collected-cache.ts +2 -2
- package/src/util/generate-workspace-id.spec.ts +3 -3
- package/src/util/generate-workspace-id.ts +2 -0
- package/src/util/gitpod-cookie.ts +39 -0
- package/src/util/gitpod-host-url.spec.ts +25 -1
- package/src/util/gitpod-host-url.ts +23 -10
- package/src/util/grpc.ts +15 -0
- package/src/util/logging.ts +102 -38
- package/src/util/parse-workspace-id.spec.ts +21 -1
- package/src/util/parse-workspace-id.ts +32 -6
- package/src/util/queue.spec.ts +1 -1
- package/src/util/semaphore.ts +2 -2
- package/src/util/skip-if.ts +1 -1
- package/src/util/timeutil.ts +4 -4
- package/src/workspace-cluster.ts +96 -0
- package/src/workspace-instance.ts +25 -13
- package/src/wsready.ts +2 -2
- 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.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/without.d.ts +0 -7
- package/lib/util/without.d.ts.map +0 -1
- package/lib/util/without.js.map +0 -1
- package/src/util/context-url.spec.ts +0 -25
- package/src/util/context-url.ts +0 -23
package/lib/plans.js
ADDED
|
@@ -0,0 +1,570 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Copyright (c) 2021 Gitpod GmbH. All rights reserved.
|
|
4
|
+
* Licensed under the GNU Affero General Public License (AGPL).
|
|
5
|
+
* See License-AGPL.txt in the project root for license information.
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.Plans = exports.ABSOLUTE_MAX_USAGE = exports.Coupons = exports.Coupon = exports.MAX_PARALLEL_WORKSPACES = exports.Plan = exports.Currency = void 0;
|
|
9
|
+
var Currency;
|
|
10
|
+
(function (Currency) {
|
|
11
|
+
Currency.getAll = () => {
|
|
12
|
+
return ['USD', 'EUR'];
|
|
13
|
+
};
|
|
14
|
+
Currency.getSymbol = (c) => {
|
|
15
|
+
return c === 'USD' ? '$' : '€';
|
|
16
|
+
};
|
|
17
|
+
})(Currency = exports.Currency || (exports.Currency = {}));
|
|
18
|
+
var Plan;
|
|
19
|
+
(function (Plan) {
|
|
20
|
+
Plan.is = (o) => {
|
|
21
|
+
return 'chargebeeId' in o
|
|
22
|
+
&& 'name' in o
|
|
23
|
+
&& 'currency' in o
|
|
24
|
+
&& 'pricePerMonth' in o
|
|
25
|
+
&& 'hoursPerMonth' in o
|
|
26
|
+
&& 'type' in o;
|
|
27
|
+
};
|
|
28
|
+
})(Plan = exports.Plan || (exports.Plan = {}));
|
|
29
|
+
exports.MAX_PARALLEL_WORKSPACES = 16;
|
|
30
|
+
var Coupon;
|
|
31
|
+
(function (Coupon) {
|
|
32
|
+
Coupon.is = (o) => {
|
|
33
|
+
return 'id' in o;
|
|
34
|
+
};
|
|
35
|
+
})(Coupon = exports.Coupon || (exports.Coupon = {}));
|
|
36
|
+
var Coupons;
|
|
37
|
+
(function (Coupons) {
|
|
38
|
+
Coupons.INTERNAL_GITPOD_GHSP = {
|
|
39
|
+
id: "INTERNAL_GITPOD_GHSP",
|
|
40
|
+
isGithubStudentCoupon: true
|
|
41
|
+
};
|
|
42
|
+
Coupons.INTERNAL_GITPOD_GHSP_2 = {
|
|
43
|
+
id: "INTERNAL_GITPOD_GHSP_2",
|
|
44
|
+
isGithubStudentCoupon: true
|
|
45
|
+
};
|
|
46
|
+
Coupons.GITHUBSTUDENTPACKFORFACULTY = {
|
|
47
|
+
id: "GITHUBSTUDENTPACKFORFACULTY",
|
|
48
|
+
isGithubStudentCoupon: true
|
|
49
|
+
};
|
|
50
|
+
Coupons.isGithubStudentCoupon = (id) => {
|
|
51
|
+
const c = Coupons.getAllCoupons().find(ic => ic.id === id);
|
|
52
|
+
if (!c) {
|
|
53
|
+
return undefined;
|
|
54
|
+
}
|
|
55
|
+
return !!c.isGithubStudentCoupon;
|
|
56
|
+
};
|
|
57
|
+
Coupons.getAllCoupons = () => {
|
|
58
|
+
return Object.keys(Coupons)
|
|
59
|
+
.map(k => Coupons[k])
|
|
60
|
+
.filter(a => typeof a === 'object' && Coupon.is(a));
|
|
61
|
+
};
|
|
62
|
+
})(Coupons = exports.Coupons || (exports.Coupons = {}));
|
|
63
|
+
// Theoretical maximum of workspace hours: 16 workspaces for 24h a day for 31 days as permitted by the v3 unlimited plan
|
|
64
|
+
// Other unlimited hour plans are restricted by the number of Parallel Workspaces they can start.
|
|
65
|
+
exports.ABSOLUTE_MAX_USAGE = exports.MAX_PARALLEL_WORKSPACES * 24 * 31;
|
|
66
|
+
/**
|
|
67
|
+
* Version history:
|
|
68
|
+
* - v1:
|
|
69
|
+
* - Free
|
|
70
|
+
* - Basic
|
|
71
|
+
* - Professional
|
|
72
|
+
* - Team Professional
|
|
73
|
+
* - v2:
|
|
74
|
+
* - Free
|
|
75
|
+
* - Personal
|
|
76
|
+
* - Unlimited: rebranded professional with unlimited hours
|
|
77
|
+
* - Team Unlimited: rebranded professional with unlimited hours
|
|
78
|
+
* - dropped: Basic
|
|
79
|
+
* - v2.5:
|
|
80
|
+
* + Student Unlimited
|
|
81
|
+
* + Team Unlimited Student
|
|
82
|
+
* - V3:
|
|
83
|
+
* - Free: reduced to 50h (stays default, but not advertised directly anymore)
|
|
84
|
+
* - Personal (8/9)
|
|
85
|
+
* - Professional (23/25)
|
|
86
|
+
* - Unlimited (35/39)
|
|
87
|
+
* - v4:
|
|
88
|
+
* - Professional Open Source (free)
|
|
89
|
+
* - v5:
|
|
90
|
+
* - Unleashed: rebranded Unlimited
|
|
91
|
+
*/
|
|
92
|
+
var Plans;
|
|
93
|
+
(function (Plans) {
|
|
94
|
+
/**
|
|
95
|
+
* The old default plan (v1): 100h hours for public repos
|
|
96
|
+
*/
|
|
97
|
+
Plans.FREE = {
|
|
98
|
+
chargebeeId: 'free',
|
|
99
|
+
githubId: 2034,
|
|
100
|
+
githubPlanNumber: 1,
|
|
101
|
+
type: 'free',
|
|
102
|
+
name: 'Open Source',
|
|
103
|
+
currency: 'USD',
|
|
104
|
+
pricePerMonth: 0,
|
|
105
|
+
hoursPerMonth: 100
|
|
106
|
+
};
|
|
107
|
+
/**
|
|
108
|
+
* The new default plan (v3): 50h hours for public repos
|
|
109
|
+
*/
|
|
110
|
+
Plans.FREE_50 = {
|
|
111
|
+
chargebeeId: 'free-50',
|
|
112
|
+
githubId: 4902,
|
|
113
|
+
githubPlanNumber: 5,
|
|
114
|
+
type: 'free-50',
|
|
115
|
+
name: 'Open Source',
|
|
116
|
+
currency: 'USD',
|
|
117
|
+
pricePerMonth: 0,
|
|
118
|
+
hoursPerMonth: 50
|
|
119
|
+
};
|
|
120
|
+
/**
|
|
121
|
+
* Users created after this date get the FREE_50 plan (v3) instead of the (old) FREE plan (v1)
|
|
122
|
+
*/
|
|
123
|
+
Plans.FREE_50_START_DATE = '2019-12-19T00:00:00.000Z';
|
|
124
|
+
/**
|
|
125
|
+
* The 'Professional Open Source' plan was introduced to offer professional open-souce developers unlimited hours.
|
|
126
|
+
*/
|
|
127
|
+
Plans.FREE_OPEN_SOURCE = {
|
|
128
|
+
chargebeeId: 'free-open-source',
|
|
129
|
+
type: 'free-open-source',
|
|
130
|
+
name: 'Professional Open Source',
|
|
131
|
+
currency: 'USD',
|
|
132
|
+
pricePerMonth: 0,
|
|
133
|
+
hoursPerMonth: 'unlimited'
|
|
134
|
+
};
|
|
135
|
+
/**
|
|
136
|
+
* The 'Student Unleashed' plans were introduced to give students access to the highly-priced unlimited plans.
|
|
137
|
+
*/
|
|
138
|
+
Plans.PROFESSIONAL_STUDENT_EUR = {
|
|
139
|
+
chargebeeId: 'professional-student-eur',
|
|
140
|
+
type: 'student',
|
|
141
|
+
name: 'Student Unleashed',
|
|
142
|
+
currency: 'EUR',
|
|
143
|
+
pricePerMonth: 8,
|
|
144
|
+
hoursPerMonth: 'unlimited'
|
|
145
|
+
};
|
|
146
|
+
/**
|
|
147
|
+
* The 'Student Unleashed' plans were introduced to give students access to the highly-priced unlimited plans.
|
|
148
|
+
*/
|
|
149
|
+
Plans.PROFESSIONAL_STUDENT_USD = {
|
|
150
|
+
chargebeeId: 'professional-student-usd',
|
|
151
|
+
type: 'student',
|
|
152
|
+
name: 'Student Unleashed',
|
|
153
|
+
currency: 'USD',
|
|
154
|
+
pricePerMonth: 9,
|
|
155
|
+
hoursPerMonth: 'unlimited'
|
|
156
|
+
};
|
|
157
|
+
/**
|
|
158
|
+
* The 'Student Unleashed' plans were introduced to give students access to the highly-priced unlimited plans.
|
|
159
|
+
*/
|
|
160
|
+
Plans.TEAM_PROFESSIONAL_STUDENT_EUR = {
|
|
161
|
+
chargebeeId: 'team-professional-student-eur',
|
|
162
|
+
type: 'student',
|
|
163
|
+
name: 'Team Student Unleashed',
|
|
164
|
+
team: true,
|
|
165
|
+
currency: 'EUR',
|
|
166
|
+
pricePerMonth: 8,
|
|
167
|
+
hoursPerMonth: 'unlimited'
|
|
168
|
+
};
|
|
169
|
+
/**
|
|
170
|
+
* The 'Student Unleashed' plans were introduced to give students access to the highly-priced unlimited plans.
|
|
171
|
+
*/
|
|
172
|
+
Plans.TEAM_PROFESSIONAL_STUDENT_USD = {
|
|
173
|
+
chargebeeId: 'team-professional-student-usd',
|
|
174
|
+
type: 'student',
|
|
175
|
+
name: 'Team Student Unleashed',
|
|
176
|
+
team: true,
|
|
177
|
+
currency: 'USD',
|
|
178
|
+
pricePerMonth: 9,
|
|
179
|
+
hoursPerMonth: 'unlimited'
|
|
180
|
+
};
|
|
181
|
+
/**
|
|
182
|
+
* The 'basic' plan was the original differentiator between FREE and Professional (v1) but got discarded soon.
|
|
183
|
+
*/
|
|
184
|
+
Plans.BASIC_EUR = {
|
|
185
|
+
chargebeeId: 'basic-eur',
|
|
186
|
+
type: 'basic',
|
|
187
|
+
name: 'Standard',
|
|
188
|
+
currency: 'EUR',
|
|
189
|
+
pricePerMonth: 17,
|
|
190
|
+
hoursPerMonth: 100
|
|
191
|
+
};
|
|
192
|
+
/**
|
|
193
|
+
* The 'basic' plan was the original differentiator between FREE and Professional (v1) but got discarded soon.
|
|
194
|
+
*/
|
|
195
|
+
Plans.BASIC_USD = {
|
|
196
|
+
chargebeeId: 'basic-usd',
|
|
197
|
+
githubId: 2035,
|
|
198
|
+
githubPlanNumber: 2,
|
|
199
|
+
type: 'basic',
|
|
200
|
+
name: 'Standard',
|
|
201
|
+
currency: 'USD',
|
|
202
|
+
pricePerMonth: 19,
|
|
203
|
+
hoursPerMonth: 100
|
|
204
|
+
};
|
|
205
|
+
/**
|
|
206
|
+
* The 'personal' plan was introduced to superseed the 'basic' plan (introduced with v2) to be more attractive to hobbyists.
|
|
207
|
+
*/
|
|
208
|
+
Plans.PERSONAL_EUR = {
|
|
209
|
+
chargebeeId: 'personal-eur',
|
|
210
|
+
type: 'personal',
|
|
211
|
+
name: 'Personal',
|
|
212
|
+
currency: 'EUR',
|
|
213
|
+
pricePerMonth: 8,
|
|
214
|
+
hoursPerMonth: 100
|
|
215
|
+
};
|
|
216
|
+
/**
|
|
217
|
+
* The 'personal' plan was introduced to superseed the 'basic' plan (introduced with v2) to be more attractive to hobbyists.
|
|
218
|
+
*/
|
|
219
|
+
Plans.PERSONAL_USD = {
|
|
220
|
+
chargebeeId: 'personal-usd',
|
|
221
|
+
githubId: 2274,
|
|
222
|
+
githubPlanNumber: 4,
|
|
223
|
+
type: 'personal',
|
|
224
|
+
name: 'Personal',
|
|
225
|
+
currency: 'USD',
|
|
226
|
+
pricePerMonth: 9,
|
|
227
|
+
hoursPerMonth: 100
|
|
228
|
+
};
|
|
229
|
+
/**
|
|
230
|
+
* This is the 'new' Professional plan (v3), which is meant to fit well between Personal (9$/8€) on the left and
|
|
231
|
+
* Unleashed (39$/35€) on the right.
|
|
232
|
+
*/
|
|
233
|
+
Plans.PROFESSIONAL_NEW_EUR = {
|
|
234
|
+
chargebeeId: 'professional-new-eur',
|
|
235
|
+
type: 'professional-new',
|
|
236
|
+
name: 'Professional',
|
|
237
|
+
currency: 'EUR',
|
|
238
|
+
pricePerMonth: 23,
|
|
239
|
+
hoursPerMonth: 'unlimited'
|
|
240
|
+
};
|
|
241
|
+
/**
|
|
242
|
+
* This is the 'new' Professional plan (v3), which is meant to fit well between Personal (9$/8€) on the left and
|
|
243
|
+
* Unleashed (39$/35€) on the right.
|
|
244
|
+
*/
|
|
245
|
+
Plans.PROFESSIONAL_NEW_USD = {
|
|
246
|
+
chargebeeId: 'professional-new-usd',
|
|
247
|
+
type: 'professional-new',
|
|
248
|
+
name: 'Professional',
|
|
249
|
+
currency: 'USD',
|
|
250
|
+
pricePerMonth: 25,
|
|
251
|
+
hoursPerMonth: 'unlimited'
|
|
252
|
+
};
|
|
253
|
+
/**
|
|
254
|
+
* This is the 'new' Team Professional plan (v3), which is meant to fit well between Personal (9$/8€) on the left and
|
|
255
|
+
* Unleashed (39$/35€) on the right.
|
|
256
|
+
*/
|
|
257
|
+
Plans.TEAM_PROFESSIONAL_NEW_EUR = {
|
|
258
|
+
chargebeeId: 'team-professional-new-eur',
|
|
259
|
+
type: 'professional-new',
|
|
260
|
+
name: 'Team Professional',
|
|
261
|
+
currency: 'EUR',
|
|
262
|
+
team: true,
|
|
263
|
+
pricePerMonth: 23,
|
|
264
|
+
hoursPerMonth: 'unlimited'
|
|
265
|
+
};
|
|
266
|
+
/**
|
|
267
|
+
* This is the 'new' Team Professional plan (v3), which is meant to fit well between Personal (9$/8€) on the left and
|
|
268
|
+
* Unleashed (39$/35€) on the right.
|
|
269
|
+
*/
|
|
270
|
+
Plans.TEAM_PROFESSIONAL_NEW_USD = {
|
|
271
|
+
chargebeeId: 'team-professional-new-usd',
|
|
272
|
+
type: 'professional-new',
|
|
273
|
+
name: 'Team Professional',
|
|
274
|
+
currency: 'USD',
|
|
275
|
+
team: true,
|
|
276
|
+
pricePerMonth: 25,
|
|
277
|
+
hoursPerMonth: 'unlimited'
|
|
278
|
+
};
|
|
279
|
+
/**
|
|
280
|
+
* This is the 'Unleashed' plan (v1, rebranded v2, v5)
|
|
281
|
+
* It was originally introduced as 'Professional', and we cannot update the ids, so it stays that way in the code.
|
|
282
|
+
*/
|
|
283
|
+
Plans.PROFESSIONAL_EUR = {
|
|
284
|
+
chargebeeId: 'professional-eur',
|
|
285
|
+
type: 'professional',
|
|
286
|
+
name: 'Unleashed',
|
|
287
|
+
currency: 'EUR',
|
|
288
|
+
pricePerMonth: 35,
|
|
289
|
+
hoursPerMonth: 'unlimited'
|
|
290
|
+
};
|
|
291
|
+
/**
|
|
292
|
+
* This is the 'Unleashed' plan (v1, rebranded v2, v5)
|
|
293
|
+
* It was originally introduced as 'Professional', and we cannot update the ids, so it stays that way in the code.
|
|
294
|
+
*/
|
|
295
|
+
Plans.PROFESSIONAL_USD = {
|
|
296
|
+
chargebeeId: 'professional-usd',
|
|
297
|
+
githubId: 2036,
|
|
298
|
+
githubPlanNumber: 3,
|
|
299
|
+
type: 'professional',
|
|
300
|
+
name: 'Unleashed',
|
|
301
|
+
currency: 'USD',
|
|
302
|
+
pricePerMonth: 39,
|
|
303
|
+
hoursPerMonth: 'unlimited'
|
|
304
|
+
};
|
|
305
|
+
/**
|
|
306
|
+
* This is the Team-'Unleashed' plan (v1, rebranded v2, v5)
|
|
307
|
+
* It was originally introduced as 'Professional', and we cannot update the ids, so it stays that way in the code.
|
|
308
|
+
*/
|
|
309
|
+
Plans.TEAM_PROFESSIONAL_USD = {
|
|
310
|
+
chargebeeId: 'team-professional-usd',
|
|
311
|
+
type: 'professional',
|
|
312
|
+
name: 'Team Unleashed',
|
|
313
|
+
currency: 'USD',
|
|
314
|
+
team: true,
|
|
315
|
+
pricePerMonth: 39,
|
|
316
|
+
hoursPerMonth: 'unlimited'
|
|
317
|
+
};
|
|
318
|
+
/**
|
|
319
|
+
* This is the Team-'Unleashed' plan (v1, rebranded v2, v5)
|
|
320
|
+
* It was originally introduced as 'Professional', and we cannot update the ids, so it stays that way in the code.
|
|
321
|
+
*/
|
|
322
|
+
Plans.TEAM_PROFESSIONAL_EUR = {
|
|
323
|
+
chargebeeId: 'team-professional-eur',
|
|
324
|
+
type: 'professional',
|
|
325
|
+
name: 'Team Unleashed',
|
|
326
|
+
currency: 'EUR',
|
|
327
|
+
team: true,
|
|
328
|
+
pricePerMonth: 35,
|
|
329
|
+
hoursPerMonth: 'unlimited'
|
|
330
|
+
};
|
|
331
|
+
const getAllPlans = () => {
|
|
332
|
+
return Object.keys(Plans)
|
|
333
|
+
.map(k => Plans[k])
|
|
334
|
+
.filter(a => typeof a === 'object' && Plan.is(a));
|
|
335
|
+
};
|
|
336
|
+
/**
|
|
337
|
+
* This function returns all individual plans that might be active (= we have subscriptions for) at the moment
|
|
338
|
+
*/
|
|
339
|
+
function getAvailablePlans(currency) {
|
|
340
|
+
const availablePaidPlans = [
|
|
341
|
+
Plans.BASIC_EUR,
|
|
342
|
+
Plans.BASIC_USD,
|
|
343
|
+
Plans.PERSONAL_EUR,
|
|
344
|
+
Plans.PERSONAL_USD,
|
|
345
|
+
Plans.PROFESSIONAL_NEW_EUR,
|
|
346
|
+
Plans.PROFESSIONAL_NEW_USD,
|
|
347
|
+
Plans.PROFESSIONAL_EUR,
|
|
348
|
+
Plans.PROFESSIONAL_USD
|
|
349
|
+
];
|
|
350
|
+
return [
|
|
351
|
+
Plans.FREE,
|
|
352
|
+
Plans.FREE_50,
|
|
353
|
+
Plans.FREE_OPEN_SOURCE,
|
|
354
|
+
...availablePaidPlans.filter(p => p.currency)
|
|
355
|
+
];
|
|
356
|
+
}
|
|
357
|
+
Plans.getAvailablePlans = getAvailablePlans;
|
|
358
|
+
;
|
|
359
|
+
Plans.getAvailableTeamPlans = (currency) => {
|
|
360
|
+
const teamPlans = getAllPlans().filter(p => !!p.team);
|
|
361
|
+
return currency ? teamPlans.filter(p => p.currency === currency) : teamPlans;
|
|
362
|
+
};
|
|
363
|
+
function getById(id) {
|
|
364
|
+
if (id === undefined) {
|
|
365
|
+
return undefined;
|
|
366
|
+
}
|
|
367
|
+
return getAllPlans()
|
|
368
|
+
.find(p => p.chargebeeId === id) || undefined;
|
|
369
|
+
}
|
|
370
|
+
Plans.getById = getById;
|
|
371
|
+
;
|
|
372
|
+
function getByTypeAndCurrency(type, currency) {
|
|
373
|
+
return getAllPlans()
|
|
374
|
+
.filter(p => p.type)
|
|
375
|
+
.find(p => p.currency === currency);
|
|
376
|
+
}
|
|
377
|
+
Plans.getByTypeAndCurrency = getByTypeAndCurrency;
|
|
378
|
+
function getProPlan(currency) {
|
|
379
|
+
switch (currency) {
|
|
380
|
+
case "EUR": return Plans.PROFESSIONAL_EUR;
|
|
381
|
+
case "USD": return Plans.PROFESSIONAL_USD;
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
Plans.getProPlan = getProPlan;
|
|
385
|
+
function getNewProPlan(currency) {
|
|
386
|
+
switch (currency) {
|
|
387
|
+
case "EUR": return Plans.PROFESSIONAL_NEW_EUR;
|
|
388
|
+
case "USD": return Plans.PROFESSIONAL_NEW_USD;
|
|
389
|
+
}
|
|
390
|
+
}
|
|
391
|
+
Plans.getNewProPlan = getNewProPlan;
|
|
392
|
+
function getStudentProPlan(currency) {
|
|
393
|
+
switch (currency) {
|
|
394
|
+
case "EUR": return Plans.PROFESSIONAL_STUDENT_EUR;
|
|
395
|
+
case "USD": return Plans.PROFESSIONAL_STUDENT_USD;
|
|
396
|
+
}
|
|
397
|
+
}
|
|
398
|
+
Plans.getStudentProPlan = getStudentProPlan;
|
|
399
|
+
function getBasicPlan(currency) {
|
|
400
|
+
switch (currency) {
|
|
401
|
+
case "EUR": return Plans.BASIC_EUR;
|
|
402
|
+
case "USD": return Plans.BASIC_USD;
|
|
403
|
+
}
|
|
404
|
+
}
|
|
405
|
+
Plans.getBasicPlan = getBasicPlan;
|
|
406
|
+
function getPersonalPlan(currency) {
|
|
407
|
+
switch (currency) {
|
|
408
|
+
case "EUR": return Plans.PERSONAL_EUR;
|
|
409
|
+
case "USD": return Plans.PERSONAL_USD;
|
|
410
|
+
}
|
|
411
|
+
}
|
|
412
|
+
Plans.getPersonalPlan = getPersonalPlan;
|
|
413
|
+
function getFreePlan(userCreationDate) {
|
|
414
|
+
return userCreationDate < Plans.FREE_50_START_DATE ? Plans.FREE : Plans.FREE_50;
|
|
415
|
+
}
|
|
416
|
+
Plans.getFreePlan = getFreePlan;
|
|
417
|
+
function isFreePlan(chargebeeId) {
|
|
418
|
+
return chargebeeId === Plans.FREE.chargebeeId
|
|
419
|
+
|| chargebeeId === Plans.FREE_50.chargebeeId
|
|
420
|
+
|| chargebeeId === Plans.FREE_OPEN_SOURCE.chargebeeId;
|
|
421
|
+
}
|
|
422
|
+
Plans.isFreePlan = isFreePlan;
|
|
423
|
+
function isFreeNonTransientPlan(chargebeeId) {
|
|
424
|
+
return chargebeeId === Plans.FREE_OPEN_SOURCE.chargebeeId;
|
|
425
|
+
}
|
|
426
|
+
Plans.isFreeNonTransientPlan = isFreeNonTransientPlan;
|
|
427
|
+
function getHoursPerMonth(plan) {
|
|
428
|
+
return plan.hoursPerMonth == 'unlimited' ? exports.ABSOLUTE_MAX_USAGE : plan.hoursPerMonth;
|
|
429
|
+
}
|
|
430
|
+
Plans.getHoursPerMonth = getHoursPerMonth;
|
|
431
|
+
/**
|
|
432
|
+
* Returns the maximum number of parallel workspaces for the given plan
|
|
433
|
+
* @param plan
|
|
434
|
+
*/
|
|
435
|
+
function getParallelWorkspacesById(planId) {
|
|
436
|
+
return getParallelWorkspaces(Plans.getById(planId));
|
|
437
|
+
}
|
|
438
|
+
Plans.getParallelWorkspacesById = getParallelWorkspacesById;
|
|
439
|
+
/**
|
|
440
|
+
* Returns the maximum number of parallel workspaces for the given plan
|
|
441
|
+
* @param plan
|
|
442
|
+
*/
|
|
443
|
+
function getParallelWorkspaces(plan) {
|
|
444
|
+
const DEFAULT = 4;
|
|
445
|
+
if (!plan) {
|
|
446
|
+
return DEFAULT;
|
|
447
|
+
}
|
|
448
|
+
switch (plan.type) {
|
|
449
|
+
case "professional-new":
|
|
450
|
+
return 8;
|
|
451
|
+
case "professional":
|
|
452
|
+
case "student":
|
|
453
|
+
return 16;
|
|
454
|
+
}
|
|
455
|
+
return DEFAULT;
|
|
456
|
+
}
|
|
457
|
+
Plans.getParallelWorkspaces = getParallelWorkspaces;
|
|
458
|
+
/**
|
|
459
|
+
* This declares the plan structure we have in Gitpod: All entries in a sub-array have the same arity in this structure.
|
|
460
|
+
* This is used to impose a partial order on plan types (cmp. compareTypes(...)).
|
|
461
|
+
* The order inside the sub-array carries meaning, too: The first one is the current, preferred plan (we advertise) for the given arity.
|
|
462
|
+
* This is used to be able to get the next "higher" plan (cmp. getNextHigherPlanType).
|
|
463
|
+
*/
|
|
464
|
+
const planStructure = [
|
|
465
|
+
["free-50", "free", "free-open-source"],
|
|
466
|
+
["personal", "basic"],
|
|
467
|
+
["professional-new"],
|
|
468
|
+
["professional", "student"]
|
|
469
|
+
];
|
|
470
|
+
function getPlanTypeArity(type) {
|
|
471
|
+
return planStructure.findIndex((types) => types.includes(type));
|
|
472
|
+
}
|
|
473
|
+
function getPlanTypeForArity(arity) {
|
|
474
|
+
if (arity >= planStructure.length) {
|
|
475
|
+
return undefined;
|
|
476
|
+
}
|
|
477
|
+
return planStructure[arity][0];
|
|
478
|
+
}
|
|
479
|
+
/**
|
|
480
|
+
* Returns the preferred plan type with the next higher arity
|
|
481
|
+
* @param type
|
|
482
|
+
*/
|
|
483
|
+
function getNextHigherPlanType(type) {
|
|
484
|
+
const arity = getPlanTypeArity(type);
|
|
485
|
+
const nextHigherType = getPlanTypeForArity(arity + 1);
|
|
486
|
+
return nextHigherType || "professional";
|
|
487
|
+
}
|
|
488
|
+
Plans.getNextHigherPlanType = getNextHigherPlanType;
|
|
489
|
+
/**
|
|
490
|
+
* This imposes a partial order on the plan types
|
|
491
|
+
* @param planTypeA
|
|
492
|
+
* @param planTypeB
|
|
493
|
+
*/
|
|
494
|
+
function compareTypes(planTypeA, planTypeB) {
|
|
495
|
+
const va = getPlanTypeArity(planTypeA);
|
|
496
|
+
const vb = getPlanTypeArity(planTypeB);
|
|
497
|
+
return va < vb ? -1 : va > vb ? 1 : 0;
|
|
498
|
+
}
|
|
499
|
+
Plans.compareTypes = compareTypes;
|
|
500
|
+
function subscriptionChange(fromType, toType) {
|
|
501
|
+
const cmp = Plans.compareTypes(fromType, toType);
|
|
502
|
+
if (cmp < 0) {
|
|
503
|
+
return "upgrade";
|
|
504
|
+
}
|
|
505
|
+
else if (cmp > 0) {
|
|
506
|
+
return "downgrade";
|
|
507
|
+
}
|
|
508
|
+
else {
|
|
509
|
+
return "none";
|
|
510
|
+
}
|
|
511
|
+
}
|
|
512
|
+
Plans.subscriptionChange = subscriptionChange;
|
|
513
|
+
let Feature;
|
|
514
|
+
(function (Feature) {
|
|
515
|
+
Feature.getFeaturesFor = (p) => {
|
|
516
|
+
switch (p.type) {
|
|
517
|
+
case "free":
|
|
518
|
+
return [
|
|
519
|
+
{ title: 'Public repositories' }
|
|
520
|
+
];
|
|
521
|
+
case "free-50":
|
|
522
|
+
return [
|
|
523
|
+
{ title: 'Public repositories' }
|
|
524
|
+
];
|
|
525
|
+
case "free-open-source":
|
|
526
|
+
return [
|
|
527
|
+
{ title: 'Public repositories' },
|
|
528
|
+
];
|
|
529
|
+
case "student":
|
|
530
|
+
return [
|
|
531
|
+
{ title: 'Private & Public repos' },
|
|
532
|
+
{ title: `${Plans.getParallelWorkspaces(p)} Parallel Workspaces`, tooltip: 'The number of workspaces running at the same time' },
|
|
533
|
+
{ title: 'Team Manageable', link: "/teams/", tooltip: 'Setup Gitpod for an entire Team with a single invoice and credit card' },
|
|
534
|
+
{ title: '1h Timeout', tooltip: 'Workspaces without user activity are stopped after 1 hour' },
|
|
535
|
+
{ title: '3h Timeout Boost', tooltip: 'You can manually boost the timeout to 3 hours within a running workspace' }
|
|
536
|
+
];
|
|
537
|
+
case "basic":
|
|
538
|
+
return [
|
|
539
|
+
{ title: 'Private & Public repos' },
|
|
540
|
+
{ title: `${Plans.getParallelWorkspaces(p)} Parallel Workspaces`, tooltip: 'The number of workspaces running at the same time.' },
|
|
541
|
+
];
|
|
542
|
+
// Personal
|
|
543
|
+
case "personal":
|
|
544
|
+
return [
|
|
545
|
+
{ title: 'Private & Public repos' },
|
|
546
|
+
{ title: `${Plans.getParallelWorkspaces(p)} Parallel Workspaces`, tooltip: 'The number of workspaces running at the same time' },
|
|
547
|
+
{ title: '30min Timeout', tooltip: 'Workspaces without user activity are stopped after 30 minutes' }
|
|
548
|
+
];
|
|
549
|
+
// Professional
|
|
550
|
+
case "professional-new":
|
|
551
|
+
return [
|
|
552
|
+
{ title: 'Private & Public repos' },
|
|
553
|
+
{ title: `${Plans.getParallelWorkspaces(p)} Parallel Workspaces`, tooltip: 'The number of workspaces running at the same time' },
|
|
554
|
+
{ title: 'Team Manageable', link: "/teams/", tooltip: 'Setup Gitpod for an entire Team with a single invoice and credit card' },
|
|
555
|
+
{ title: '30min Timeout', tooltip: 'Workspaces without user activity are stopped after 30 minutes' }
|
|
556
|
+
];
|
|
557
|
+
// Unleashed
|
|
558
|
+
case "professional":
|
|
559
|
+
return [
|
|
560
|
+
{ title: 'Private & Public repos' },
|
|
561
|
+
{ title: `${Plans.getParallelWorkspaces(p)} Parallel Workspaces`, tooltip: 'The number of workspaces running at the same time' },
|
|
562
|
+
{ title: 'Team Manageable', link: "/teams/", tooltip: 'Setup Gitpod for an entire Team with a single invoice and credit card' },
|
|
563
|
+
{ title: '1h Timeout', tooltip: 'Workspaces without user activity are stopped after 1 hour' },
|
|
564
|
+
{ title: '3h Timeout Boost', tooltip: 'You can manually boost the timeout to 3 hours within a running workspace' }
|
|
565
|
+
];
|
|
566
|
+
}
|
|
567
|
+
};
|
|
568
|
+
})(Feature = Plans.Feature || (Plans.Feature = {}));
|
|
569
|
+
})(Plans = exports.Plans || (exports.Plans = {}));
|
|
570
|
+
//# sourceMappingURL=plans.js.map
|
package/lib/plans.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plans.js","sourceRoot":"","sources":["../src/plans.ts"],"names":[],"mappings":"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"}
|