@opensumi/ide-connection 2.12.1-next-079c1930

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 (50) hide show
  1. package/README.md +208 -0
  2. package/lib/browser/ws-channel-handler.d.ts +27 -0
  3. package/lib/browser/ws-channel-handler.d.ts.map +1 -0
  4. package/lib/browser/ws-channel-handler.js +134 -0
  5. package/lib/browser/ws-channel-handler.js.map +1 -0
  6. package/lib/common/message.d.ts +29 -0
  7. package/lib/common/message.d.ts.map +1 -0
  8. package/lib/common/message.js +84 -0
  9. package/lib/common/message.js.map +1 -0
  10. package/lib/common/proxy.d.ts +2 -0
  11. package/lib/common/proxy.d.ts.map +1 -0
  12. package/lib/common/proxy.js +5 -0
  13. package/lib/common/proxy.js.map +1 -0
  14. package/lib/common/rpcProtocol.d.ts +68 -0
  15. package/lib/common/rpcProtocol.d.ts.map +1 -0
  16. package/lib/common/rpcProtocol.js +279 -0
  17. package/lib/common/rpcProtocol.js.map +1 -0
  18. package/lib/common/utils.d.ts +3 -0
  19. package/lib/common/utils.d.ts.map +1 -0
  20. package/lib/common/utils.js +12 -0
  21. package/lib/common/utils.js.map +1 -0
  22. package/lib/common/ws-channel.d.ts +74 -0
  23. package/lib/common/ws-channel.d.ts.map +1 -0
  24. package/lib/common/ws-channel.js +86 -0
  25. package/lib/common/ws-channel.js.map +1 -0
  26. package/lib/index.d.ts +6 -0
  27. package/lib/index.d.ts.map +1 -0
  28. package/lib/index.js +10 -0
  29. package/lib/index.js.map +1 -0
  30. package/lib/node/center/index.d.ts +63 -0
  31. package/lib/node/center/index.d.ts.map +1 -0
  32. package/lib/node/center/index.js +198 -0
  33. package/lib/node/center/index.js.map +1 -0
  34. package/lib/node/center/proxy.d.ts +43 -0
  35. package/lib/node/center/proxy.d.ts.map +1 -0
  36. package/lib/node/center/proxy.js +210 -0
  37. package/lib/node/center/proxy.js.map +1 -0
  38. package/lib/node/common-channel-handler.d.ts +35 -0
  39. package/lib/node/common-channel-handler.d.ts.map +1 -0
  40. package/lib/node/common-channel-handler.js +210 -0
  41. package/lib/node/common-channel-handler.js.map +1 -0
  42. package/lib/node/index.d.ts +4 -0
  43. package/lib/node/index.d.ts.map +1 -0
  44. package/lib/node/index.js +7 -0
  45. package/lib/node/index.js.map +1 -0
  46. package/lib/node/ws.d.ts +21 -0
  47. package/lib/node/ws.d.ts.map +1 -0
  48. package/lib/node/ws.js +88 -0
  49. package/lib/node/ws.js.map +1 -0
  50. package/package.json +30 -0
@@ -0,0 +1,210 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CommonChannelHandler = exports.commonChannelPathHandler = exports.CommonChannelPathHandler = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const ws_1 = require("./ws");
6
+ const path_match_1 = (0, tslib_1.__importDefault)(require("path-match"));
7
+ const ws_2 = (0, tslib_1.__importDefault)(require("ws"));
8
+ const utils_1 = require("../common/utils");
9
+ const ws_channel_1 = require("../common/ws-channel");
10
+ const route = (0, path_match_1.default)();
11
+ class CommonChannelPathHandler {
12
+ constructor() {
13
+ this.handlerMap = new Map();
14
+ this.paramsKey = new Map();
15
+ }
16
+ register(channelPath, handler) {
17
+ const paramsIndex = channelPath.indexOf('/:');
18
+ const hasParams = paramsIndex >= 0;
19
+ let channelToken = channelPath;
20
+ if (hasParams) {
21
+ channelToken = channelPath.slice(0, paramsIndex);
22
+ this.paramsKey.set(channelToken, channelPath.slice(paramsIndex + 2));
23
+ }
24
+ if (!this.handlerMap.has(channelToken)) {
25
+ this.handlerMap.set(channelToken, []);
26
+ }
27
+ const handlerArr = this.handlerMap.get(channelToken);
28
+ const handlerFn = handler.handler.bind(handler);
29
+ const setHandler = (connection, clientId, params) => {
30
+ handler.connection = connection;
31
+ handlerFn(connection, clientId, params);
32
+ };
33
+ handler.handler = setHandler;
34
+ handlerArr.push(handler);
35
+ this.handlerMap.set(channelToken, handlerArr);
36
+ }
37
+ getParams(channelPath, value) {
38
+ const params = {};
39
+ if (this.paramsKey.has(channelPath)) {
40
+ const key = this.paramsKey.get(channelPath);
41
+ if (key) {
42
+ params[key] = value;
43
+ }
44
+ }
45
+ return params;
46
+ }
47
+ removeHandler(channelPath, handler) {
48
+ const paramsIndex = channelPath.indexOf(':');
49
+ const hasParams = paramsIndex >= 0;
50
+ let channelToken = channelPath;
51
+ if (hasParams) {
52
+ channelToken = channelPath.slice(0, paramsIndex);
53
+ }
54
+ const handlerArr = this.handlerMap.get(channelToken) || [];
55
+ const removeIndex = handlerArr.indexOf(handler);
56
+ if (removeIndex !== -1) {
57
+ handlerArr.splice(removeIndex, 1);
58
+ }
59
+ this.handlerMap.set(channelPath, handlerArr);
60
+ }
61
+ get(channelPath) {
62
+ return this.handlerMap.get(channelPath);
63
+ }
64
+ disposeConnectionClientId(connection, clientId) {
65
+ this.handlerMap.forEach((handlerArr) => {
66
+ handlerArr.forEach((handler) => {
67
+ handler.dispose(connection, clientId);
68
+ });
69
+ });
70
+ }
71
+ getAll() {
72
+ return Array.from(this.handlerMap.values());
73
+ }
74
+ }
75
+ exports.CommonChannelPathHandler = CommonChannelPathHandler;
76
+ exports.commonChannelPathHandler = new CommonChannelPathHandler();
77
+ // 后台 Web 链接处理类
78
+ class CommonChannelHandler extends ws_1.WebSocketHandler {
79
+ constructor(routePath, logger = console) {
80
+ super();
81
+ this.logger = logger;
82
+ this.handlerId = 'common-channel';
83
+ this.channelMap = new Map();
84
+ this.connectionMap = new Map();
85
+ this.heartbeatMap = new Map();
86
+ this.channelConnectionSend = (connection) => {
87
+ return (content) => {
88
+ if (connection.readyState === connection.OPEN) {
89
+ connection.send(content, (err) => {
90
+ if (err) {
91
+ this.logger.log(err);
92
+ }
93
+ });
94
+ }
95
+ };
96
+ };
97
+ this.handlerRoute = route(`${routePath}`);
98
+ this.initWSServer();
99
+ }
100
+ hearbeat(connectionId, connection) {
101
+ const timer = global.setTimeout(() => {
102
+ connection.ping();
103
+ // console.log(`connectionId ${connectionId} ping`);
104
+ this.hearbeat(connectionId, connection);
105
+ }, 5000);
106
+ this.heartbeatMap.set(connectionId, timer);
107
+ }
108
+ initWSServer() {
109
+ this.logger.log('init Common Channel Handler');
110
+ this.wsServer = new ws_2.default.Server({ noServer: true });
111
+ this.wsServer.on('connection', (connection) => {
112
+ let connectionId;
113
+ connection.on('message', (msg) => {
114
+ let msgObj;
115
+ try {
116
+ msgObj = (0, utils_1.parse)(msg);
117
+ // 心跳消息
118
+ if (msgObj.kind === 'heartbeat') {
119
+ // console.log(`heartbeat msg ${msgObj.clientId}`)
120
+ connection.send((0, utils_1.stringify)(`heartbeat ${msgObj.clientId}`));
121
+ }
122
+ else if (msgObj.kind === 'client') {
123
+ const clientId = msgObj.clientId;
124
+ this.logger.log('new connection clientId', clientId);
125
+ connectionId = clientId;
126
+ this.connectionMap.set(clientId, connection);
127
+ this.hearbeat(connectionId, connection);
128
+ // channel 消息处理
129
+ }
130
+ else if (msgObj.kind === 'open') {
131
+ const channelId = msgObj.id; // CommonChannelHandler.channelId ++;
132
+ const { path } = msgObj;
133
+ this.logger.log('new open channelId', channelId, 'channelPath', path);
134
+ // 生成 channel 对象
135
+ const connectionSend = this.channelConnectionSend(connection);
136
+ const channel = new ws_channel_1.WSChannel(connectionSend, channelId);
137
+ this.channelMap.set(channelId, channel);
138
+ // 根据 path 拿到注册的 handler
139
+ let handlerArr = exports.commonChannelPathHandler.get(path);
140
+ let params;
141
+ // 尝试通过父路径查找处理函数,如server/:id方式注册的handler
142
+ if (!handlerArr) {
143
+ const slashIndex = path.indexOf('/');
144
+ const hasSlash = slashIndex >= 0;
145
+ if (hasSlash) {
146
+ handlerArr = exports.commonChannelPathHandler.get(path.slice(0, slashIndex));
147
+ params = exports.commonChannelPathHandler.getParams(path.slice(0, slashIndex), path.slice(slashIndex + 1));
148
+ }
149
+ }
150
+ if (handlerArr) {
151
+ for (let i = 0, len = handlerArr.length; i < len; i++) {
152
+ const handler = handlerArr[i];
153
+ handler.handler(channel, connectionId, params);
154
+ }
155
+ }
156
+ channel.ready();
157
+ }
158
+ else {
159
+ // console.log('connection message', msgObj.id, msgObj.kind, this.channelMap.get(msgObj.id));
160
+ const { id } = msgObj;
161
+ const channel = this.channelMap.get(id);
162
+ if (channel) {
163
+ channel.handleMessage(msgObj);
164
+ }
165
+ else {
166
+ this.logger.warn(`channel ${id} not found`);
167
+ }
168
+ }
169
+ }
170
+ catch (e) {
171
+ this.logger.warn(e);
172
+ }
173
+ });
174
+ connection.on('close', () => {
175
+ exports.commonChannelPathHandler.disposeConnectionClientId(connection, connectionId);
176
+ if (this.heartbeatMap.has(connectionId)) {
177
+ clearTimeout(this.heartbeatMap.get(connectionId));
178
+ this.heartbeatMap.delete(connectionId);
179
+ this.logger.verbose(`clear heartbeat ${connectionId}`);
180
+ }
181
+ Array.from(this.channelMap.values())
182
+ .filter((channel) => {
183
+ return channel.id.toString().indexOf(connectionId) !== -1;
184
+ })
185
+ .forEach((channel) => {
186
+ channel.close(1, 'close');
187
+ this.channelMap.delete(channel.id);
188
+ this.logger.verbose(`remove channel ${channel.id}`);
189
+ });
190
+ });
191
+ });
192
+ }
193
+ handleUpgrade(wsPathname, request, socket, head) {
194
+ const routeResult = this.handlerRoute(wsPathname);
195
+ if (routeResult) {
196
+ const wsServer = this.wsServer;
197
+ wsServer.handleUpgrade(request, socket, head, (connection) => {
198
+ connection.routeParam = {
199
+ pathname: wsPathname,
200
+ };
201
+ wsServer.emit('connection', connection);
202
+ });
203
+ return true;
204
+ }
205
+ return false;
206
+ }
207
+ }
208
+ exports.CommonChannelHandler = CommonChannelHandler;
209
+ CommonChannelHandler.channelId = 0;
210
+ //# sourceMappingURL=common-channel-handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"common-channel-handler.js","sourceRoot":"","sources":["../../src/node/common-channel-handler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export * from './ws';
2
+ export * from './common-channel-handler';
3
+ export * from './center';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/node/index.ts"],"names":[],"mappings":"AAAA,cAAc,MAAM,CAAC;AACrB,cAAc,0BAA0B,CAAC;AACzC,cAAc,UAAU,CAAC"}
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ (0, tslib_1.__exportStar)(require("./ws"), exports);
5
+ (0, tslib_1.__exportStar)(require("./common-channel-handler"), exports);
6
+ (0, tslib_1.__exportStar)(require("./center"), exports);
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/node/index.ts"],"names":[],"mappings":";;;AAAA,oDAAqB;AACrB,wEAAyC;AACzC,wDAAyB"}
@@ -0,0 +1,21 @@
1
+ /// <reference types="node" />
2
+ import http from 'http';
3
+ export declare abstract class WebSocketHandler {
4
+ abstract handlerId: string;
5
+ abstract handleUpgrade(wsPathname: string, request: any, socket: any, head: any): boolean;
6
+ init?(): void;
7
+ }
8
+ export declare class WebSocketServerRoute {
9
+ private logger;
10
+ port?: number;
11
+ server: http.Server;
12
+ private wsServerHandlerArr;
13
+ constructor(server?: http.Server, logger?: any, port?: number, wsServerHandlerArr?: WebSocketHandler[]);
14
+ registerHandler(handler: WebSocketHandler): void;
15
+ deleteHandler(handler: WebSocketHandler | string): boolean;
16
+ init(): void;
17
+ private initServer;
18
+ private initHandler;
19
+ private handleUpgrade;
20
+ }
21
+ //# sourceMappingURL=ws.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ws.d.ts","sourceRoot":"","sources":["../../src/node/ws.ts"],"names":[],"mappings":";AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AAGxB,8BAAsB,gBAAgB;IACpC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,GAAG,OAAO;IACzF,IAAI,CAAC,IAAI,IAAI;CACd;AAED,qBAAa,oBAAoB;IAO7B,OAAO,CAAC,MAAM;IANT,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC;IAC3B,OAAO,CAAC,kBAAkB,CAAqB;gBAG7C,MAAM,CAAC,EAAE,IAAI,CAAC,MAAM,EACZ,MAAM,GAAE,GAAa,EAC7B,IAAI,GAAE,MAAa,EACnB,kBAAkB,GAAE,gBAAgB,EAAO;IAUtC,eAAe,CAAC,OAAO,EAAE,gBAAgB;IAWzC,aAAa,CAAC,OAAO,EAAE,gBAAgB,GAAG,MAAM;IAoBhD,IAAI;IAKX,OAAO,CAAC,UAAU;IAQlB,OAAO,CAAC,WAAW;IAOnB,OAAO,CAAC,aAAa;CA0BtB"}
package/lib/node/ws.js ADDED
@@ -0,0 +1,88 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.WebSocketServerRoute = exports.WebSocketHandler = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const http_1 = (0, tslib_1.__importDefault)(require("http"));
6
+ const url_1 = (0, tslib_1.__importDefault)(require("url"));
7
+ class WebSocketHandler {
8
+ }
9
+ exports.WebSocketHandler = WebSocketHandler;
10
+ class WebSocketServerRoute {
11
+ constructor(server, logger = console, port = 8729, wsServerHandlerArr = []) {
12
+ this.logger = logger;
13
+ if (server) {
14
+ this.server = server;
15
+ }
16
+ this.port = port;
17
+ this.wsServerHandlerArr = wsServerHandlerArr;
18
+ }
19
+ registerHandler(handler) {
20
+ const wsServerHandlerArr = this.wsServerHandlerArr;
21
+ const findHandler = (h) => {
22
+ return h.handlerId === handler.handlerId;
23
+ };
24
+ if (wsServerHandlerArr.findIndex(findHandler) === -1) {
25
+ this.wsServerHandlerArr.push(handler);
26
+ }
27
+ }
28
+ deleteHandler(handler) {
29
+ let handlerId;
30
+ if (handler.handlerId) {
31
+ handlerId = handler.handlerId;
32
+ }
33
+ else {
34
+ handlerId = handler;
35
+ }
36
+ const handlerIndex = this.wsServerHandlerArr.findIndex((handler) => {
37
+ return handler.handlerId === handlerId;
38
+ });
39
+ if (handlerIndex !== -1) {
40
+ this.wsServerHandlerArr.splice(handlerIndex, 1);
41
+ return true;
42
+ }
43
+ else {
44
+ return false;
45
+ }
46
+ }
47
+ init() {
48
+ this.initServer();
49
+ this.initHandler();
50
+ this.handleUpgrade();
51
+ }
52
+ initServer() {
53
+ if (!this.server) {
54
+ this.server = http_1.default.createServer();
55
+ this.server.listen(this.port, () => {
56
+ this.logger.log(`websocket server listen on ${this.port}`);
57
+ });
58
+ }
59
+ }
60
+ initHandler() {
61
+ this.wsServerHandlerArr.forEach((handler) => {
62
+ if (handler.init) {
63
+ handler.init.call(handler);
64
+ }
65
+ });
66
+ }
67
+ handleUpgrade() {
68
+ const server = this.server;
69
+ const wsServerHandlerArr = this.wsServerHandlerArr;
70
+ server.on('upgrade', (request, socket, head) => {
71
+ const wsPathname = url_1.default.parse(request.url).pathname;
72
+ let wsHandlerIndex = 0;
73
+ const wsHandlerLength = wsServerHandlerArr.length;
74
+ for (; wsHandlerIndex < wsHandlerLength; wsHandlerIndex++) {
75
+ const handler = wsServerHandlerArr[wsHandlerIndex];
76
+ const handleResult = handler.handleUpgrade(wsPathname, request, socket, head);
77
+ if (handleResult) {
78
+ break;
79
+ }
80
+ }
81
+ if (wsHandlerIndex === wsHandlerLength) {
82
+ this.logger.error(`request.url ${request.url} mismatch!`);
83
+ }
84
+ });
85
+ }
86
+ }
87
+ exports.WebSocketServerRoute = WebSocketServerRoute;
88
+ //# sourceMappingURL=ws.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ws.js","sourceRoot":"","sources":["../../src/node/ws.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,30 @@
1
+ {
2
+ "name": "@opensumi/ide-connection",
3
+ "version": "2.12.1-next-079c1930",
4
+ "files": [
5
+ "lib"
6
+ ],
7
+ "license": "MIT",
8
+ "main": "lib/index.js",
9
+ "typings": "lib/index.d.ts",
10
+ "scripts": {
11
+ "prepublishOnly": "npm run build",
12
+ "build": "tsc --build ../../configs/ts/references/tsconfig.connection.json"
13
+ },
14
+ "repository": {
15
+ "type": "git",
16
+ "url": "git@github.com:opensumi/core.git"
17
+ },
18
+ "dependencies": {
19
+ "@opensumi/ide-components": "2.12.1-next-079c1930",
20
+ "@opensumi/ide-core-common": "2.12.1-next-079c1930",
21
+ "@opensumi/vscode-jsonrpc": "^6.1.1-beta.1",
22
+ "path-match": "^1.2.4",
23
+ "shortid": "^2.2.14",
24
+ "ws": "^7.2.0"
25
+ },
26
+ "devDependencies": {
27
+ "mock-socket": "^9.0.2",
28
+ "@opensumi/ide-dev-tool": "^1.3.1"
29
+ }
30
+ }