@@ -57,6 +57,7 @@ import {
57
57
Project ,
58
58
GitpodServer ,
59
59
IDESettings ,
60
+ WorkspaceTimeoutDuration ,
60
61
} from "@gitpod/gitpod-protocol" ;
61
62
import { IAnalyticsWriter } from "@gitpod/gitpod-protocol/lib/analytics" ;
62
63
import { log } from "@gitpod/gitpod-protocol/lib/util/logging" ;
@@ -1437,6 +1438,7 @@ export class WorkspaceStarter {
1437
1438
lastValidWorkspaceInstanceId ,
1438
1439
) ;
1439
1440
const userTimeoutPromise = this . entitlementService . getDefaultWorkspaceTimeout ( user , new Date ( ) ) ;
1441
+ const allowSetTimeoutPromise = this . entitlementService . maySetTimeout ( user , new Date ( ) ) ;
1440
1442
1441
1443
let featureFlags = instance . configuration ! . featureFlags || [ ] ;
1442
1444
@@ -1467,7 +1469,19 @@ export class WorkspaceStarter {
1467
1469
spec . setClass ( instance . workspaceClass ! ) ;
1468
1470
1469
1471
if ( workspace . type === "regular" ) {
1470
- spec . setTimeout ( await userTimeoutPromise ) ;
1472
+ const [ defaultTimeout , allowSetTimeout ] = await Promise . all ( [ userTimeoutPromise , allowSetTimeoutPromise ] ) ;
1473
+ spec . setTimeout ( defaultTimeout ) ;
1474
+ if ( allowSetTimeout ) {
1475
+ if ( user . additionalData ?. workspaceTimeout ) {
1476
+ try {
1477
+ let timeout = WorkspaceTimeoutDuration . validate ( user . additionalData ?. workspaceTimeout ) ;
1478
+ spec . setTimeout ( timeout ) ;
1479
+ } catch ( err ) { }
1480
+ }
1481
+ if ( user . additionalData ?. disabledClosedTimeout === true ) {
1482
+ spec . setClosedTimeout ( "0" ) ;
1483
+ }
1484
+ }
1471
1485
}
1472
1486
spec . setAdmission ( admissionLevel ) ;
1473
1487
const sshKeys = await this . userDB . trace ( traceCtx ) . getSSHPublicKeys ( user . id ) ;
0 commit comments