@theia/core 1.75.0-next.29 → 1.75.0-next.34

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.
Files changed (142) hide show
  1. package/lib/browser/authentication-service.js +1 -1
  2. package/lib/browser/authentication-service.js.map +1 -1
  3. package/lib/browser/browser-clipboard-service.js +1 -0
  4. package/lib/browser/browser-clipboard-service.js.map +1 -1
  5. package/lib/browser/catalog.json +33 -2
  6. package/lib/browser/connection-status-service.d.ts +1 -0
  7. package/lib/browser/connection-status-service.d.ts.map +1 -1
  8. package/lib/browser/connection-status-service.js +7 -0
  9. package/lib/browser/connection-status-service.js.map +1 -1
  10. package/lib/browser/frontend-application-state.js +1 -0
  11. package/lib/browser/frontend-application-state.js.map +1 -1
  12. package/lib/browser/icon-theme-service.d.ts +5 -3
  13. package/lib/browser/icon-theme-service.d.ts.map +1 -1
  14. package/lib/browser/icon-theme-service.js +7 -1
  15. package/lib/browser/icon-theme-service.js.map +1 -1
  16. package/lib/browser/keyboard/browser-keyboard-layout-provider.js +1 -0
  17. package/lib/browser/keyboard/browser-keyboard-layout-provider.js.map +1 -1
  18. package/lib/browser/open-with-service.d.ts +2 -1
  19. package/lib/browser/open-with-service.d.ts.map +1 -1
  20. package/lib/browser/open-with-service.js +6 -1
  21. package/lib/browser/open-with-service.js.map +1 -1
  22. package/lib/browser/performance/frontend-stopwatch.d.ts +2 -1
  23. package/lib/browser/performance/frontend-stopwatch.d.ts.map +1 -1
  24. package/lib/browser/performance/frontend-stopwatch.js +6 -1
  25. package/lib/browser/performance/frontend-stopwatch.js.map +1 -1
  26. package/lib/browser/perspective-service.js +1 -1
  27. package/lib/browser/perspective-service.js.map +1 -1
  28. package/lib/browser/preferences/preference-proxy.spec.js +3 -0
  29. package/lib/browser/preferences/preference-proxy.spec.js.map +1 -1
  30. package/lib/browser/preferences/preference-service.spec.js +3 -0
  31. package/lib/browser/preferences/preference-service.spec.js.map +1 -1
  32. package/lib/browser/preferences/preference-validation-service.js +1 -1
  33. package/lib/browser/preferences/preference-validation-service.js.map +1 -1
  34. package/lib/browser/saveable-service.d.ts +2 -1
  35. package/lib/browser/saveable-service.d.ts.map +1 -1
  36. package/lib/browser/saveable-service.js +6 -1
  37. package/lib/browser/saveable-service.js.map +1 -1
  38. package/lib/browser/shell/shell-layout-restorer.d.ts +1 -1
  39. package/lib/browser/shell/shell-layout-restorer.d.ts.map +1 -1
  40. package/lib/browser/shell/shell-layout-restorer.js +5 -4
  41. package/lib/browser/shell/shell-layout-restorer.js.map +1 -1
  42. package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-registry.d.ts +2 -1
  43. package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-registry.d.ts.map +1 -1
  44. package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-registry.js +6 -1
  45. package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-registry.js.map +1 -1
  46. package/lib/browser/status-bar/status-bar-view-model.d.ts +2 -1
  47. package/lib/browser/status-bar/status-bar-view-model.d.ts.map +1 -1
  48. package/lib/browser/status-bar/status-bar-view-model.js +6 -1
  49. package/lib/browser/status-bar/status-bar-view-model.js.map +1 -1
  50. package/lib/browser/storage-service.d.ts +1 -1
  51. package/lib/browser/storage-service.d.ts.map +1 -1
  52. package/lib/browser/storage-service.js +1 -0
  53. package/lib/browser/storage-service.js.map +1 -1
  54. package/lib/browser/tree/tree-model.d.ts.map +1 -1
  55. package/lib/browser/tree/tree-model.js +1 -0
  56. package/lib/browser/tree/tree-model.js.map +1 -1
  57. package/lib/browser/widget-manager.js +1 -0
  58. package/lib/browser/widget-manager.js.map +1 -1
  59. package/lib/browser/window/default-secondary-window-service.d.ts +2 -1
  60. package/lib/browser/window/default-secondary-window-service.d.ts.map +1 -1
  61. package/lib/browser/window/default-secondary-window-service.js +9 -4
  62. package/lib/browser/window/default-secondary-window-service.js.map +1 -1
  63. package/lib/common/message-service-protocol.d.ts +2 -0
  64. package/lib/common/message-service-protocol.d.ts.map +1 -1
  65. package/lib/common/message-service-protocol.js +8 -2
  66. package/lib/common/message-service-protocol.js.map +1 -1
  67. package/lib/common/performance/stopwatch.js +1 -0
  68. package/lib/common/performance/stopwatch.js.map +1 -1
  69. package/lib/common/preferences/preference-schema-service.d.ts +2 -0
  70. package/lib/common/preferences/preference-schema-service.d.ts.map +1 -1
  71. package/lib/common/preferences/preference-schema-service.js +11 -5
  72. package/lib/common/preferences/preference-schema-service.js.map +1 -1
  73. package/lib/common/preferences/preference-service.d.ts +2 -0
  74. package/lib/common/preferences/preference-service.d.ts.map +1 -1
  75. package/lib/common/preferences/preference-service.js +7 -1
  76. package/lib/common/preferences/preference-service.js.map +1 -1
  77. package/lib/node/backend-application.js +5 -5
  78. package/lib/node/backend-application.js.map +1 -1
  79. package/lib/node/backend-application.spec.js +6 -3
  80. package/lib/node/backend-application.spec.js.map +1 -1
  81. package/lib/node/env-variables/env-variables-server.d.ts +2 -0
  82. package/lib/node/env-variables/env-variables-server.d.ts.map +1 -1
  83. package/lib/node/env-variables/env-variables-server.js +7 -1
  84. package/lib/node/env-variables/env-variables-server.js.map +1 -1
  85. package/lib/node/hosting/browser-connection-token.d.ts +2 -0
  86. package/lib/node/hosting/browser-connection-token.d.ts.map +1 -1
  87. package/lib/node/hosting/browser-connection-token.js +14 -1
  88. package/lib/node/hosting/browser-connection-token.js.map +1 -1
  89. package/lib/node/hosting/browser-connection-token.spec.js +25 -2
  90. package/lib/node/hosting/browser-connection-token.spec.js.map +1 -1
  91. package/lib/node/key-store-server.d.ts +2 -0
  92. package/lib/node/key-store-server.d.ts.map +1 -1
  93. package/lib/node/key-store-server.js +6 -1
  94. package/lib/node/key-store-server.js.map +1 -1
  95. package/lib/node/messaging/default-messaging-service.js +1 -1
  96. package/lib/node/messaging/default-messaging-service.js.map +1 -1
  97. package/lib/node/messaging/ipc-connection-provider.js +1 -0
  98. package/lib/node/messaging/ipc-connection-provider.js.map +1 -1
  99. package/lib/node/messaging/websocket-endpoint.js +1 -1
  100. package/lib/node/messaging/websocket-endpoint.js.map +1 -1
  101. package/lib/node/messaging/websocket-frontend-connection-service.d.ts +2 -1
  102. package/lib/node/messaging/websocket-frontend-connection-service.d.ts.map +1 -1
  103. package/lib/node/messaging/websocket-frontend-connection-service.js +11 -6
  104. package/lib/node/messaging/websocket-frontend-connection-service.js.map +1 -1
  105. package/lib/node/setting-service.js +1 -0
  106. package/lib/node/setting-service.js.map +1 -1
  107. package/package.json +4 -4
  108. package/src/browser/authentication-service.ts +1 -1
  109. package/src/browser/browser-clipboard-service.ts +2 -2
  110. package/src/browser/connection-status-service.ts +7 -3
  111. package/src/browser/frontend-application-state.ts +2 -2
  112. package/src/browser/icon-theme-service.ts +6 -2
  113. package/src/browser/keyboard/browser-keyboard-layout-provider.ts +2 -2
  114. package/src/browser/open-with-service.ts +6 -3
  115. package/src/browser/performance/frontend-stopwatch.ts +6 -3
  116. package/src/browser/perspective-service.ts +1 -1
  117. package/src/browser/preferences/preference-proxy.spec.ts +3 -0
  118. package/src/browser/preferences/preference-service.spec.ts +3 -0
  119. package/src/browser/preferences/preference-validation-service.ts +1 -1
  120. package/src/browser/saveable-service.ts +5 -2
  121. package/src/browser/shell/shell-layout-restorer.ts +6 -5
  122. package/src/browser/shell/tab-bar-toolbar/tab-bar-toolbar-registry.ts +5 -2
  123. package/src/browser/status-bar/status-bar-view-model.ts +7 -3
  124. package/src/browser/storage-service.ts +4 -2
  125. package/src/browser/tree/tree-model.ts +4 -2
  126. package/src/browser/widget-manager.ts +1 -1
  127. package/src/browser/window/default-secondary-window-service.ts +9 -6
  128. package/src/common/message-service-protocol.ts +7 -3
  129. package/src/common/performance/stopwatch.ts +2 -2
  130. package/src/common/preferences/preference-schema-service.ts +9 -5
  131. package/src/common/preferences/preference-service.ts +6 -2
  132. package/src/node/backend-application.spec.ts +6 -3
  133. package/src/node/backend-application.ts +5 -5
  134. package/src/node/env-variables/env-variables-server.ts +6 -2
  135. package/src/node/hosting/browser-connection-token.spec.ts +30 -3
  136. package/src/node/hosting/browser-connection-token.ts +13 -2
  137. package/src/node/key-store-server.ts +6 -3
  138. package/src/node/messaging/default-messaging-service.ts +1 -1
  139. package/src/node/messaging/ipc-connection-provider.ts +2 -2
  140. package/src/node/messaging/websocket-endpoint.ts +1 -1
  141. package/src/node/messaging/websocket-frontend-connection-service.ts +11 -8
  142. package/src/node/setting-service.ts +2 -2
@@ -109,19 +109,24 @@ describe('BrowserConnectionTokenBackendContribution', () => {
109
109
  interface MockResponse {
110
110
  cookieCalls: CookieCall[];
111
111
  nextCalled: boolean;
112
+ requestHeaders: Record<string, string | undefined>;
112
113
  }
113
114
 
114
- function callMiddleware(cookieValue?: string): MockResponse {
115
+ function callMiddleware(cookieValue?: string, conditionalHeaders = false): MockResponse {
115
116
  const contribution = createContribution();
116
- const result: MockResponse = { cookieCalls: [], nextCalled: false };
117
-
118
117
  const req = {
119
118
  headers: {} as Record<string, string | undefined>,
120
119
  socket: { remoteAddress: '127.0.0.1' }
121
120
  };
121
+ const result: MockResponse = { cookieCalls: [], nextCalled: false, requestHeaders: req.headers };
122
+
122
123
  if (cookieValue !== undefined) {
123
124
  req.headers.cookie = `${BROWSER_TOKEN_COOKIE_NAME}=${cookieValue}`;
124
125
  }
126
+ if (conditionalHeaders) {
127
+ req.headers['if-none-match'] = 'W/"etag"';
128
+ req.headers['if-modified-since'] = 'Thu, 01 Jan 2026 00:00:00 GMT';
129
+ }
125
130
 
126
131
  const res = {
127
132
  cookie: (name: string, value: string, options: Record<string, unknown>) => {
@@ -164,6 +169,28 @@ describe('BrowserConnectionTokenBackendContribution', () => {
164
169
  expect(result.cookieCalls).to.have.length(1);
165
170
  expect(result.cookieCalls[0].value).to.equal(token.value);
166
171
  });
172
+
173
+ it('should drop conditional request headers when re-issuing the cookie (stale token)', () => {
174
+ const result = callMiddleware('stale-token-from-old-server', true);
175
+ expect(result.nextCalled).to.be.true;
176
+ expect(result.cookieCalls).to.have.length(1);
177
+ expect(result.requestHeaders['if-none-match']).to.be.undefined;
178
+ expect(result.requestHeaders['if-modified-since']).to.be.undefined;
179
+ });
180
+
181
+ it('should drop conditional request headers when issuing the cookie (no cookie)', () => {
182
+ const result = callMiddleware(undefined, true);
183
+ expect(result.cookieCalls).to.have.length(1);
184
+ expect(result.requestHeaders['if-none-match']).to.be.undefined;
185
+ expect(result.requestHeaders['if-modified-since']).to.be.undefined;
186
+ });
187
+
188
+ it('should keep conditional request headers when the cookie is valid', () => {
189
+ const result = callMiddleware(token.value, true);
190
+ expect(result.cookieCalls).to.have.length(0);
191
+ expect(result.requestHeaders['if-none-match']).to.equal('W/"etag"');
192
+ expect(result.requestHeaders['if-modified-since']).to.equal('Thu, 01 Jan 2026 00:00:00 GMT');
193
+ });
167
194
  });
168
195
 
169
196
  describe('validateRequest (HTTP token enforcement)', () => {
@@ -18,12 +18,13 @@ import * as cookie from 'cookie';
18
18
  import * as crypto from 'crypto';
19
19
  import * as http from 'http';
20
20
  import express = require('express');
21
- import { inject, injectable } from 'inversify';
21
+ import { inject, injectable, named } from 'inversify';
22
22
  import { environment } from '../../common/index';
23
23
  import { MaybePromise } from '../../common';
24
24
  import { BackendApplicationContribution, EarlyExpressMiddleware } from '../backend-application';
25
25
  import { WsRequestValidatorContribution } from '../ws-request-validators';
26
26
  import { generateUuid } from '../../common/uuid';
27
+ import { ILogger } from '../../common/logger';
27
28
 
28
29
  export const BrowserConnectionToken = Symbol('BrowserConnectionToken');
29
30
 
@@ -79,6 +80,9 @@ export class BrowserConnectionTokenBackendContribution implements BackendApplica
79
80
  @inject(EarlyExpressMiddleware)
80
81
  protected readonly earlyMiddleware: EarlyExpressMiddleware;
81
82
 
83
+ @inject(ILogger) @named('core:BrowserConnectionTokenBackendContribution')
84
+ protected readonly logger: ILogger;
85
+
82
86
  /**
83
87
  * Register the cookie middleware during `initialize()` via `EarlyExpressMiddleware`
84
88
  * so it runs before `express.static()` (which is registered later during `configure()`).
@@ -138,6 +142,13 @@ export class BrowserConnectionTokenBackendContribution implements BackendApplica
138
142
  sameSite: 'strict',
139
143
  path: '/'
140
144
  });
145
+ // The static handlers would answer a revalidation of an unchanged page with a 304,
146
+ // and reverse proxies commonly drop Set-Cookie from 304 replies or answer the
147
+ // revalidation from their own cache. The browser would then keep the stale token
148
+ // and every WebSocket handshake would be rejected, with no way to recover short of
149
+ // a cache-bypassing hard reload. Force a full 200 so the cookie reaches the browser.
150
+ delete req.headers['if-none-match'];
151
+ delete req.headers['if-modified-since'];
141
152
  }
142
153
  next();
143
154
  }
@@ -156,7 +167,7 @@ export class BrowserConnectionTokenBackendContribution implements BackendApplica
156
167
  const expected = Buffer.from(this.browserConnectionToken.value, 'utf8');
157
168
  return received.byteLength === expected.byteLength && crypto.timingSafeEqual(received, expected);
158
169
  } catch (error) {
159
- console.error(error);
170
+ this.logger.error(error);
160
171
  }
161
172
  return false;
162
173
  }
@@ -21,12 +21,15 @@
21
21
  // code copied and modified from https://github.com/microsoft/vscode/blob/1.55.2/src/vs/platform/native/electron-main/nativeHostMainService.ts#L679-L771
22
22
 
23
23
  import { KeyStoreService } from '../common/key-store';
24
- import { injectable } from 'inversify';
25
- import { isWindows } from '../common';
24
+ import { injectable, inject, named } from 'inversify';
25
+ import { isWindows, ILogger } from '../common';
26
26
 
27
27
  @injectable()
28
28
  export class KeyStoreServiceImpl implements KeyStoreService {
29
29
 
30
+ @inject(ILogger) @named('core:KeyStoreServiceImpl')
31
+ protected readonly logger: ILogger;
32
+
30
33
  private static readonly MAX_PASSWORD_LENGTH = 2500;
31
34
  private static readonly PASSWORD_CHUNK_SIZE = KeyStoreServiceImpl.MAX_PASSWORD_LENGTH - 100;
32
35
 
@@ -108,7 +111,7 @@ export class KeyStoreServiceImpl implements KeyStoreService {
108
111
  await this.keytarImplementation.findCredentials('test-keytar-loads');
109
112
  } catch (err) {
110
113
  this.keytarImplementation = new InMemoryCredentialsProvider();
111
- console.warn('OS level credential store could not be accessed. Using in-memory credentials provider', err);
114
+ this.logger.warn('OS level credential store could not be accessed. Using in-memory credentials provider', err);
112
115
  }
113
116
  return this.keytarImplementation;
114
117
  }
@@ -75,7 +75,7 @@ export class DefaultMessagingService implements MessagingService, BackendApplica
75
75
  protected createMainChannelContainer(socket: Channel): Container {
76
76
  const connectionContainer: Container = this.container.createChild() as Container;
77
77
  connectionContainer.bind(MainChannel).toConstantValue(socket);
78
- socket.onClose(() => connectionContainer.unbindAllAsync().catch(e => console.error(e)));
78
+ socket.onClose(() => connectionContainer.unbindAllAsync().catch(e => this.logger.error(e)));
79
79
  return connectionContainer;
80
80
  }
81
81
 
@@ -15,7 +15,7 @@
15
15
  // *****************************************************************************
16
16
 
17
17
  import * as cp from 'child_process';
18
- import { inject, injectable } from 'inversify';
18
+ import { inject, injectable, named } from 'inversify';
19
19
  import * as path from 'path';
20
20
  import { createInterface } from 'readline';
21
21
  import { Channel, ConnectionErrorHandler, Disposable, DisposableCollection, ILogger } from '../../common';
@@ -38,7 +38,7 @@ export type IPCConnectionOptions = Partial<ResolvedIPCConnectionOptions> & {
38
38
  @injectable()
39
39
  export class IPCConnectionProvider {
40
40
 
41
- @inject(ILogger)
41
+ @inject(ILogger) @named('core:IPCConnectionProvider')
42
42
  protected readonly logger: ILogger;
43
43
 
44
44
  listen(options: IPCConnectionOptions, acceptor: (connection: Channel) => void): Disposable {
@@ -55,7 +55,7 @@ export class WebsocketEndpoint implements BackendApplicationContribution {
55
55
  this.wsRequestValidator.allowWsUpgrade(req).then(
56
56
  allowed => callback(noError, allowed),
57
57
  error => {
58
- console.error('Error during WebSocket allowRequest validation:', error);
58
+ this.logger.error('Error during WebSocket allowRequest validation:', error);
59
59
  callback(error?.message ?? 'Validation error', false);
60
60
  }
61
61
  );
@@ -15,7 +15,7 @@
15
15
 
16
16
  import { Channel, WriteBuffer } from '../../common/message-rpc';
17
17
  import { MessagingService } from './messaging-service';
18
- import { inject, injectable, interfaces } from 'inversify';
18
+ import { inject, injectable, interfaces, named } from 'inversify';
19
19
  import { Socket } from 'socket.io';
20
20
  import { ConnectionHandlers, MessagingContainer } from './default-messaging-service';
21
21
  import { SocketWriteBuffer } from '../../common/messaging/socket-write-buffer';
@@ -25,7 +25,7 @@ import { Uint8ArrayReadBuffer, Uint8ArrayWriteBuffer } from '../../common/messag
25
25
  import { BackendApplicationConfigProvider } from '../backend-application-config-provider';
26
26
  import { WebsocketEndpoint } from './websocket-endpoint';
27
27
  import { ConnectionManagementMessages } from '../../common/messaging/connection-management';
28
- import { Disposable, DisposableCollection } from '../../common';
28
+ import { Disposable, DisposableCollection, ILogger } from '../../common';
29
29
 
30
30
  @injectable()
31
31
  export class WebsocketFrontendConnectionService implements FrontendConnectionService {
@@ -36,6 +36,9 @@ export class WebsocketFrontendConnectionService implements FrontendConnectionSer
36
36
  @inject(MessagingContainer)
37
37
  protected readonly container: interfaces.Container;
38
38
 
39
+ @inject(ILogger) @named('core:WebsocketFrontendConnectionService')
40
+ protected readonly logger: ILogger;
41
+
39
42
  protected readonly wsHandlers = new ConnectionHandlers();
40
43
  protected readonly connectionsByFrontend = new Map<string, ReconnectableSocketChannel>();
41
44
  protected readonly closeTimeouts = new Map<string, NodeJS.Timeout>();
@@ -65,7 +68,7 @@ export class WebsocketFrontendConnectionService implements FrontendConnectionSer
65
68
  socket.off(ConnectionManagementMessages.RECONNECT, reconnectListener);
66
69
  const channel = this.connectionsByFrontend.get(frontEndId);
67
70
  if (channel) {
68
- console.info(`Reconnecting to front end ${frontEndId}`);
71
+ this.logger.info(`Reconnecting to front end ${frontEndId}`);
69
72
  socket.emit(ConnectionManagementMessages.RECONNECT, true);
70
73
  channel.connect(socket);
71
74
  this.handleSocketDisconnect(socket, channel, frontEndId);
@@ -73,7 +76,7 @@ export class WebsocketFrontendConnectionService implements FrontendConnectionSer
73
76
  clearTimeout(pendingTimeout);
74
77
  this.closeTimeouts.delete(frontEndId);
75
78
  } else {
76
- console.info(`Reconnecting failed for ${frontEndId}`);
79
+ this.logger.info(`Reconnecting failed for ${frontEndId}`);
77
80
  socket.emit(ConnectionManagementMessages.RECONNECT, false);
78
81
  }
79
82
  };
@@ -82,7 +85,7 @@ export class WebsocketFrontendConnectionService implements FrontendConnectionSer
82
85
  }
83
86
 
84
87
  protected closeConnection(frontEndId: string, reason: string): void {
85
- console.info(`closing connection for ${frontEndId}`);
88
+ this.logger.info(`closing connection for ${frontEndId}`);
86
89
  const connection = this.connectionsByFrontend.get(frontEndId)!; // not called when no connection is present
87
90
 
88
91
  this.connectionsByFrontend.delete(frontEndId);
@@ -97,7 +100,7 @@ export class WebsocketFrontendConnectionService implements FrontendConnectionSer
97
100
  }
98
101
 
99
102
  protected createConnection(socket: Socket, frontEndId: string): ReconnectableSocketChannel {
100
- console.info(`creating connection for ${frontEndId}`);
103
+ this.logger.info(`creating connection for ${frontEndId}`);
101
104
  const channel = this.container.get(ReconnectableSocketChannel);
102
105
  channel.connect(socket);
103
106
 
@@ -107,7 +110,7 @@ export class WebsocketFrontendConnectionService implements FrontendConnectionSer
107
110
 
108
111
  handleSocketDisconnect(socket: Socket, channel: ReconnectableSocketChannel, frontEndId: string): void {
109
112
  socket.on('disconnect', evt => {
110
- console.info('socket closed');
113
+ this.logger.info('socket closed');
111
114
  channel.disconnect();
112
115
 
113
116
  const timeout = this.frontendConnectionTimeout();
@@ -115,7 +118,7 @@ export class WebsocketFrontendConnectionService implements FrontendConnectionSer
115
118
  if (timeout === 0 || isMarkedForClose) {
116
119
  this.closeConnection(frontEndId, evt);
117
120
  } else if (timeout > 0) {
118
- console.info(`setting close timeout for id ${frontEndId} to ${timeout}`);
121
+ this.logger.info(`setting close timeout for id ${frontEndId} to ${timeout}`);
119
122
  const handle = setTimeout(() => {
120
123
  this.closeConnection(frontEndId, evt);
121
124
  }, timeout);
@@ -15,7 +15,7 @@
15
15
  // *****************************************************************************
16
16
 
17
17
  import { promises as fs } from 'fs';
18
- import { inject, injectable, postConstruct } from 'inversify';
18
+ import { inject, injectable, postConstruct, named } from 'inversify';
19
19
  import { ILogger, URI } from '../common';
20
20
  import { EnvVariablesServer } from '../common/env-variables';
21
21
  import { Deferred } from '../common/promise-util';
@@ -32,7 +32,7 @@ export interface SettingService {
32
32
 
33
33
  @injectable()
34
34
  export class SettingServiceImpl implements SettingService {
35
- @inject(ILogger)
35
+ @inject(ILogger) @named('core:SettingServiceImpl')
36
36
  protected readonly logger: ILogger;
37
37
 
38
38
  @inject(EnvVariablesServer)