@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.
- package/lib/browser/authentication-service.js +1 -1
- package/lib/browser/authentication-service.js.map +1 -1
- package/lib/browser/browser-clipboard-service.js +1 -0
- package/lib/browser/browser-clipboard-service.js.map +1 -1
- package/lib/browser/catalog.json +33 -2
- package/lib/browser/connection-status-service.d.ts +1 -0
- package/lib/browser/connection-status-service.d.ts.map +1 -1
- package/lib/browser/connection-status-service.js +7 -0
- package/lib/browser/connection-status-service.js.map +1 -1
- package/lib/browser/frontend-application-state.js +1 -0
- package/lib/browser/frontend-application-state.js.map +1 -1
- package/lib/browser/icon-theme-service.d.ts +5 -3
- package/lib/browser/icon-theme-service.d.ts.map +1 -1
- package/lib/browser/icon-theme-service.js +7 -1
- package/lib/browser/icon-theme-service.js.map +1 -1
- package/lib/browser/keyboard/browser-keyboard-layout-provider.js +1 -0
- package/lib/browser/keyboard/browser-keyboard-layout-provider.js.map +1 -1
- package/lib/browser/open-with-service.d.ts +2 -1
- package/lib/browser/open-with-service.d.ts.map +1 -1
- package/lib/browser/open-with-service.js +6 -1
- package/lib/browser/open-with-service.js.map +1 -1
- package/lib/browser/performance/frontend-stopwatch.d.ts +2 -1
- package/lib/browser/performance/frontend-stopwatch.d.ts.map +1 -1
- package/lib/browser/performance/frontend-stopwatch.js +6 -1
- package/lib/browser/performance/frontend-stopwatch.js.map +1 -1
- package/lib/browser/perspective-service.js +1 -1
- package/lib/browser/perspective-service.js.map +1 -1
- package/lib/browser/preferences/preference-proxy.spec.js +3 -0
- package/lib/browser/preferences/preference-proxy.spec.js.map +1 -1
- package/lib/browser/preferences/preference-service.spec.js +3 -0
- package/lib/browser/preferences/preference-service.spec.js.map +1 -1
- package/lib/browser/preferences/preference-validation-service.js +1 -1
- package/lib/browser/preferences/preference-validation-service.js.map +1 -1
- package/lib/browser/saveable-service.d.ts +2 -1
- package/lib/browser/saveable-service.d.ts.map +1 -1
- package/lib/browser/saveable-service.js +6 -1
- package/lib/browser/saveable-service.js.map +1 -1
- package/lib/browser/shell/shell-layout-restorer.d.ts +1 -1
- package/lib/browser/shell/shell-layout-restorer.d.ts.map +1 -1
- package/lib/browser/shell/shell-layout-restorer.js +5 -4
- package/lib/browser/shell/shell-layout-restorer.js.map +1 -1
- package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-registry.d.ts +2 -1
- package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-registry.d.ts.map +1 -1
- package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-registry.js +6 -1
- package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-registry.js.map +1 -1
- package/lib/browser/status-bar/status-bar-view-model.d.ts +2 -1
- package/lib/browser/status-bar/status-bar-view-model.d.ts.map +1 -1
- package/lib/browser/status-bar/status-bar-view-model.js +6 -1
- package/lib/browser/status-bar/status-bar-view-model.js.map +1 -1
- package/lib/browser/storage-service.d.ts +1 -1
- package/lib/browser/storage-service.d.ts.map +1 -1
- package/lib/browser/storage-service.js +1 -0
- package/lib/browser/storage-service.js.map +1 -1
- package/lib/browser/tree/tree-model.d.ts.map +1 -1
- package/lib/browser/tree/tree-model.js +1 -0
- package/lib/browser/tree/tree-model.js.map +1 -1
- package/lib/browser/widget-manager.js +1 -0
- package/lib/browser/widget-manager.js.map +1 -1
- package/lib/browser/window/default-secondary-window-service.d.ts +2 -1
- package/lib/browser/window/default-secondary-window-service.d.ts.map +1 -1
- package/lib/browser/window/default-secondary-window-service.js +9 -4
- package/lib/browser/window/default-secondary-window-service.js.map +1 -1
- package/lib/common/message-service-protocol.d.ts +2 -0
- package/lib/common/message-service-protocol.d.ts.map +1 -1
- package/lib/common/message-service-protocol.js +8 -2
- package/lib/common/message-service-protocol.js.map +1 -1
- package/lib/common/performance/stopwatch.js +1 -0
- package/lib/common/performance/stopwatch.js.map +1 -1
- package/lib/common/preferences/preference-schema-service.d.ts +2 -0
- package/lib/common/preferences/preference-schema-service.d.ts.map +1 -1
- package/lib/common/preferences/preference-schema-service.js +11 -5
- package/lib/common/preferences/preference-schema-service.js.map +1 -1
- package/lib/common/preferences/preference-service.d.ts +2 -0
- package/lib/common/preferences/preference-service.d.ts.map +1 -1
- package/lib/common/preferences/preference-service.js +7 -1
- package/lib/common/preferences/preference-service.js.map +1 -1
- package/lib/node/backend-application.js +5 -5
- package/lib/node/backend-application.js.map +1 -1
- package/lib/node/backend-application.spec.js +6 -3
- package/lib/node/backend-application.spec.js.map +1 -1
- package/lib/node/env-variables/env-variables-server.d.ts +2 -0
- package/lib/node/env-variables/env-variables-server.d.ts.map +1 -1
- package/lib/node/env-variables/env-variables-server.js +7 -1
- package/lib/node/env-variables/env-variables-server.js.map +1 -1
- package/lib/node/hosting/browser-connection-token.d.ts +2 -0
- package/lib/node/hosting/browser-connection-token.d.ts.map +1 -1
- package/lib/node/hosting/browser-connection-token.js +14 -1
- package/lib/node/hosting/browser-connection-token.js.map +1 -1
- package/lib/node/hosting/browser-connection-token.spec.js +25 -2
- package/lib/node/hosting/browser-connection-token.spec.js.map +1 -1
- package/lib/node/key-store-server.d.ts +2 -0
- package/lib/node/key-store-server.d.ts.map +1 -1
- package/lib/node/key-store-server.js +6 -1
- package/lib/node/key-store-server.js.map +1 -1
- package/lib/node/messaging/default-messaging-service.js +1 -1
- package/lib/node/messaging/default-messaging-service.js.map +1 -1
- package/lib/node/messaging/ipc-connection-provider.js +1 -0
- package/lib/node/messaging/ipc-connection-provider.js.map +1 -1
- package/lib/node/messaging/websocket-endpoint.js +1 -1
- package/lib/node/messaging/websocket-endpoint.js.map +1 -1
- package/lib/node/messaging/websocket-frontend-connection-service.d.ts +2 -1
- package/lib/node/messaging/websocket-frontend-connection-service.d.ts.map +1 -1
- package/lib/node/messaging/websocket-frontend-connection-service.js +11 -6
- package/lib/node/messaging/websocket-frontend-connection-service.js.map +1 -1
- package/lib/node/setting-service.js +1 -0
- package/lib/node/setting-service.js.map +1 -1
- package/package.json +4 -4
- package/src/browser/authentication-service.ts +1 -1
- package/src/browser/browser-clipboard-service.ts +2 -2
- package/src/browser/connection-status-service.ts +7 -3
- package/src/browser/frontend-application-state.ts +2 -2
- package/src/browser/icon-theme-service.ts +6 -2
- package/src/browser/keyboard/browser-keyboard-layout-provider.ts +2 -2
- package/src/browser/open-with-service.ts +6 -3
- package/src/browser/performance/frontend-stopwatch.ts +6 -3
- package/src/browser/perspective-service.ts +1 -1
- package/src/browser/preferences/preference-proxy.spec.ts +3 -0
- package/src/browser/preferences/preference-service.spec.ts +3 -0
- package/src/browser/preferences/preference-validation-service.ts +1 -1
- package/src/browser/saveable-service.ts +5 -2
- package/src/browser/shell/shell-layout-restorer.ts +6 -5
- package/src/browser/shell/tab-bar-toolbar/tab-bar-toolbar-registry.ts +5 -2
- package/src/browser/status-bar/status-bar-view-model.ts +7 -3
- package/src/browser/storage-service.ts +4 -2
- package/src/browser/tree/tree-model.ts +4 -2
- package/src/browser/widget-manager.ts +1 -1
- package/src/browser/window/default-secondary-window-service.ts +9 -6
- package/src/common/message-service-protocol.ts +7 -3
- package/src/common/performance/stopwatch.ts +2 -2
- package/src/common/preferences/preference-schema-service.ts +9 -5
- package/src/common/preferences/preference-service.ts +6 -2
- package/src/node/backend-application.spec.ts +6 -3
- package/src/node/backend-application.ts +5 -5
- package/src/node/env-variables/env-variables-server.ts +6 -2
- package/src/node/hosting/browser-connection-token.spec.ts +30 -3
- package/src/node/hosting/browser-connection-token.ts +13 -2
- package/src/node/key-store-server.ts +6 -3
- package/src/node/messaging/default-messaging-service.ts +1 -1
- package/src/node/messaging/ipc-connection-provider.ts +2 -2
- package/src/node/messaging/websocket-endpoint.ts +1 -1
- package/src/node/messaging/websocket-frontend-connection-service.ts +11 -8
- 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
|
-
|
|
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
|
-
|
|
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 =>
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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)
|