@grest-ts/websocket 0.0.5
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/LICENSE +21 -0
- package/dist/src/adapter/BrowserSocketAdapter.d.ts +18 -0
- package/dist/src/adapter/BrowserSocketAdapter.d.ts.map +1 -0
- package/dist/src/adapter/BrowserSocketAdapter.js +51 -0
- package/dist/src/adapter/BrowserSocketAdapter.js.map +1 -0
- package/dist/src/adapter/NodeSocketAdapter.d.ts +21 -0
- package/dist/src/adapter/NodeSocketAdapter.d.ts.map +1 -0
- package/dist/src/adapter/NodeSocketAdapter.js +52 -0
- package/dist/src/adapter/NodeSocketAdapter.js.map +1 -0
- package/dist/src/adapter/getDefaultAdapter.d.ts +5 -0
- package/dist/src/adapter/getDefaultAdapter.d.ts.map +1 -0
- package/dist/src/adapter/getDefaultAdapter.js +15 -0
- package/dist/src/adapter/getDefaultAdapter.js.map +1 -0
- package/dist/src/client/GGSocketClient.d.ts +10 -0
- package/dist/src/client/GGSocketClient.d.ts.map +1 -0
- package/dist/src/client/GGSocketClient.js +17 -0
- package/dist/src/client/GGSocketClient.js.map +1 -0
- package/dist/src/client/GGSocketPool.d.ts +63 -0
- package/dist/src/client/GGSocketPool.d.ts.map +1 -0
- package/dist/src/client/GGSocketPool.js +203 -0
- package/dist/src/client/GGSocketPool.js.map +1 -0
- package/dist/src/index-browser.d.ts +11 -0
- package/dist/src/index-browser.d.ts.map +1 -0
- package/dist/src/index-browser.js +17 -0
- package/dist/src/index-browser.js.map +1 -0
- package/dist/src/index-node.d.ts +14 -0
- package/dist/src/index-node.d.ts.map +1 -0
- package/dist/src/index-node.js +22 -0
- package/dist/src/index-node.js.map +1 -0
- package/dist/src/schema/GGWebSocketMiddleware.d.ts +40 -0
- package/dist/src/schema/GGWebSocketMiddleware.d.ts.map +1 -0
- package/dist/src/schema/GGWebSocketMiddleware.js +6 -0
- package/dist/src/schema/GGWebSocketMiddleware.js.map +1 -0
- package/dist/src/schema/GGWebSocketSchema.d.ts +31 -0
- package/dist/src/schema/GGWebSocketSchema.d.ts.map +1 -0
- package/dist/src/schema/GGWebSocketSchema.js +32 -0
- package/dist/src/schema/GGWebSocketSchema.js.map +1 -0
- package/dist/src/schema/webSocketSchema.d.ts +52 -0
- package/dist/src/schema/webSocketSchema.d.ts.map +1 -0
- package/dist/src/schema/webSocketSchema.js +62 -0
- package/dist/src/schema/webSocketSchema.js.map +1 -0
- package/dist/src/server/GGSocketServer.d.ts +34 -0
- package/dist/src/server/GGSocketServer.d.ts.map +1 -0
- package/dist/src/server/GGSocketServer.js +186 -0
- package/dist/src/server/GGSocketServer.js.map +1 -0
- package/dist/src/server/GGWebSocketMetrics.d.ts +43 -0
- package/dist/src/server/GGWebSocketMetrics.d.ts.map +1 -0
- package/dist/src/server/GGWebSocketMetrics.js +38 -0
- package/dist/src/server/GGWebSocketMetrics.js.map +1 -0
- package/dist/src/server/GGWebSocketSchema.startServer.d.ts +33 -0
- package/dist/src/server/GGWebSocketSchema.startServer.d.ts.map +1 -0
- package/dist/src/server/GGWebSocketSchema.startServer.js +80 -0
- package/dist/src/server/GGWebSocketSchema.startServer.js.map +1 -0
- package/dist/src/server/GG_WS_CONNECTION.d.ts +12 -0
- package/dist/src/server/GG_WS_CONNECTION.d.ts.map +1 -0
- package/dist/src/server/GG_WS_CONNECTION.js +8 -0
- package/dist/src/server/GG_WS_CONNECTION.js.map +1 -0
- package/dist/src/server/GG_WS_MESSAGE.d.ts +10 -0
- package/dist/src/server/GG_WS_MESSAGE.d.ts.map +1 -0
- package/dist/src/server/GG_WS_MESSAGE.js +7 -0
- package/dist/src/server/GG_WS_MESSAGE.js.map +1 -0
- package/dist/src/socket/GGSocket.d.ts +81 -0
- package/dist/src/socket/GGSocket.d.ts.map +1 -0
- package/dist/src/socket/GGSocket.js +315 -0
- package/dist/src/socket/GGSocket.js.map +1 -0
- package/dist/src/socket/SocketAdapter.d.ts +13 -0
- package/dist/src/socket/SocketAdapter.d.ts.map +1 -0
- package/dist/src/socket/SocketAdapter.js +2 -0
- package/dist/src/socket/SocketAdapter.js.map +1 -0
- package/dist/src/socket/SocketMessage.d.ts +47 -0
- package/dist/src/socket/SocketMessage.d.ts.map +1 -0
- package/dist/src/socket/SocketMessage.js +51 -0
- package/dist/src/socket/SocketMessage.js.map +1 -0
- package/dist/src/socket/WebSocketTypes.d.ts +18 -0
- package/dist/src/socket/WebSocketTypes.d.ts.map +1 -0
- package/dist/src/socket/WebSocketTypes.js +5 -0
- package/dist/src/socket/WebSocketTypes.js.map +1 -0
- package/dist/src/socket/utils/PendingRequestsMap.d.ts +32 -0
- package/dist/src/socket/utils/PendingRequestsMap.d.ts.map +1 -0
- package/dist/src/socket/utils/PendingRequestsMap.js +104 -0
- package/dist/src/socket/utils/PendingRequestsMap.js.map +1 -0
- package/dist/src/tsconfig.json +17 -0
- package/dist/testkit/client/GGSocketCall.d.ts +37 -0
- package/dist/testkit/client/GGSocketCall.d.ts.map +1 -0
- package/dist/testkit/client/GGSocketCall.js +44 -0
- package/dist/testkit/client/GGSocketCall.js.map +1 -0
- package/dist/testkit/client/GGWebSocketSchema.callOn.d.ts +70 -0
- package/dist/testkit/client/GGWebSocketSchema.callOn.d.ts.map +1 -0
- package/dist/testkit/client/GGWebSocketSchema.callOn.js +135 -0
- package/dist/testkit/client/GGWebSocketSchema.callOn.js.map +1 -0
- package/dist/testkit/index-testkit.d.ts +4 -0
- package/dist/testkit/index-testkit.d.ts.map +1 -0
- package/dist/testkit/index-testkit.js +3 -0
- package/dist/testkit/index-testkit.js.map +1 -0
- package/dist/tsconfig.publish.tsbuildinfo +1 -0
- package/package.json +74 -0
- package/src/adapter/BrowserSocketAdapter.ts +63 -0
- package/src/adapter/NodeSocketAdapter.ts +67 -0
- package/src/adapter/getDefaultAdapter.ts +14 -0
- package/src/client/GGSocketClient.ts +25 -0
- package/src/client/GGSocketPool.ts +244 -0
- package/src/index-browser.ts +21 -0
- package/src/index-node.ts +28 -0
- package/src/schema/GGWebSocketMiddleware.ts +43 -0
- package/src/schema/GGWebSocketSchema.ts +57 -0
- package/src/schema/webSocketSchema.ts +109 -0
- package/src/server/GGSocketServer.ts +217 -0
- package/src/server/GGWebSocketMetrics.ts +58 -0
- package/src/server/GGWebSocketSchema.startServer.ts +136 -0
- package/src/server/GG_WS_CONNECTION.ts +10 -0
- package/src/server/GG_WS_MESSAGE.ts +9 -0
- package/src/socket/GGSocket.ts +394 -0
- package/src/socket/SocketAdapter.ts +21 -0
- package/src/socket/SocketMessage.ts +97 -0
- package/src/socket/WebSocketTypes.ts +19 -0
- package/src/socket/utils/PendingRequestsMap.ts +128 -0
- package/src/tsconfig.json +17 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 Grest Games OÜ
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { SocketAdapter } from "../socket/SocketAdapter";
|
|
2
|
+
export declare class BrowserSocketAdapter implements SocketAdapter {
|
|
3
|
+
private ws;
|
|
4
|
+
private messageWrappers;
|
|
5
|
+
private errorWrappers;
|
|
6
|
+
constructor(url: string);
|
|
7
|
+
send(message: string): void;
|
|
8
|
+
close(): void;
|
|
9
|
+
onOpen(handler: () => void): void;
|
|
10
|
+
onMessage(handler: (data: string) => void): void;
|
|
11
|
+
onClose(handler: () => void): void;
|
|
12
|
+
onError(handler: (error: Error) => void): void;
|
|
13
|
+
offOpen(handler: () => void): void;
|
|
14
|
+
offMessage(handler: (data: string) => void): void;
|
|
15
|
+
offClose(handler: () => void): void;
|
|
16
|
+
offError(handler: (error: Error) => void): void;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=BrowserSocketAdapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BrowserSocketAdapter.d.ts","sourceRoot":"","sources":["../../../src/adapter/BrowserSocketAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,aAAa,EAAC,MAAM,yBAAyB,CAAC;AAEtD,qBAAa,oBAAqB,YAAW,aAAa;IACtD,OAAO,CAAC,EAAE,CAAuB;IACjC,OAAO,CAAC,eAAe,CAAwE;IAC/F,OAAO,CAAC,aAAa,CAAiE;gBAE1E,GAAG,EAAE,MAAM;IAIvB,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAI3B,KAAK,IAAI,IAAI;IAIb,MAAM,CAAC,OAAO,EAAE,MAAM,IAAI,GAAG,IAAI;IAIjC,SAAS,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI;IAMhD,OAAO,CAAC,OAAO,EAAE,MAAM,IAAI,GAAG,IAAI;IAIlC,OAAO,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,GAAG,IAAI;IAM9C,OAAO,CAAC,OAAO,EAAE,MAAM,IAAI,GAAG,IAAI;IAIlC,UAAU,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI;IAQjD,QAAQ,CAAC,OAAO,EAAE,MAAM,IAAI,GAAG,IAAI;IAInC,QAAQ,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,GAAG,IAAI;CAOlD"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
export class BrowserSocketAdapter {
|
|
2
|
+
ws;
|
|
3
|
+
messageWrappers = new WeakMap();
|
|
4
|
+
errorWrappers = new WeakMap();
|
|
5
|
+
constructor(url) {
|
|
6
|
+
this.ws = new WebSocket(url);
|
|
7
|
+
}
|
|
8
|
+
send(message) {
|
|
9
|
+
this.ws.send(message);
|
|
10
|
+
}
|
|
11
|
+
close() {
|
|
12
|
+
this.ws.close();
|
|
13
|
+
}
|
|
14
|
+
onOpen(handler) {
|
|
15
|
+
this.ws.addEventListener('open', handler);
|
|
16
|
+
}
|
|
17
|
+
onMessage(handler) {
|
|
18
|
+
const wrapper = (event) => handler(event.data);
|
|
19
|
+
this.messageWrappers.set(handler, wrapper);
|
|
20
|
+
this.ws.addEventListener('message', wrapper);
|
|
21
|
+
}
|
|
22
|
+
onClose(handler) {
|
|
23
|
+
this.ws.addEventListener('close', handler);
|
|
24
|
+
}
|
|
25
|
+
onError(handler) {
|
|
26
|
+
const wrapper = (event) => handler(new Error('WebSocket error: ' + event.type));
|
|
27
|
+
this.errorWrappers.set(handler, wrapper);
|
|
28
|
+
this.ws.addEventListener('error', wrapper);
|
|
29
|
+
}
|
|
30
|
+
offOpen(handler) {
|
|
31
|
+
this.ws.removeEventListener('open', handler);
|
|
32
|
+
}
|
|
33
|
+
offMessage(handler) {
|
|
34
|
+
const wrapper = this.messageWrappers.get(handler);
|
|
35
|
+
if (wrapper) {
|
|
36
|
+
this.ws.removeEventListener('message', wrapper);
|
|
37
|
+
this.messageWrappers.delete(handler);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
offClose(handler) {
|
|
41
|
+
this.ws.removeEventListener('close', handler);
|
|
42
|
+
}
|
|
43
|
+
offError(handler) {
|
|
44
|
+
const wrapper = this.errorWrappers.get(handler);
|
|
45
|
+
if (wrapper) {
|
|
46
|
+
this.ws.removeEventListener('error', wrapper);
|
|
47
|
+
this.errorWrappers.delete(handler);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=BrowserSocketAdapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BrowserSocketAdapter.js","sourceRoot":"","sources":["../../../src/adapter/BrowserSocketAdapter.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,oBAAoB;IACrB,EAAE,CAAuB;IACzB,eAAe,GAAG,IAAI,OAAO,EAAyD,CAAC;IACvF,aAAa,GAAG,IAAI,OAAO,EAAkD,CAAC;IAEtF,YAAY,GAAW;QACnB,IAAI,CAAC,EAAE,GAAG,IAAI,SAAS,CAAC,GAAG,CAAC,CAAC;IACjC,CAAC;IAED,IAAI,CAAC,OAAe;QAChB,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC1B,CAAC;IAED,KAAK;QACD,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;IACpB,CAAC;IAED,MAAM,CAAC,OAAmB;QACtB,IAAI,CAAC,EAAE,CAAC,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9C,CAAC;IAED,SAAS,CAAC,OAA+B;QACrC,MAAM,OAAO,GAAG,CAAC,KAAmB,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC7D,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC3C,IAAI,CAAC,EAAE,CAAC,gBAAgB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IACjD,CAAC;IAED,OAAO,CAAC,OAAmB;QACvB,IAAI,CAAC,EAAE,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC/C,CAAC;IAED,OAAO,CAAC,OAA+B;QACnC,MAAM,OAAO,GAAG,CAAC,KAAY,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,mBAAmB,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;QACvF,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACzC,IAAI,CAAC,EAAE,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC/C,CAAC;IAED,OAAO,CAAC,OAAmB;QACvB,IAAI,CAAC,EAAE,CAAC,mBAAmB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjD,CAAC;IAED,UAAU,CAAC,OAA+B;QACtC,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAClD,IAAI,OAAO,EAAE,CAAC;YACV,IAAI,CAAC,EAAE,CAAC,mBAAmB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YAChD,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACzC,CAAC;IACL,CAAC;IAED,QAAQ,CAAC,OAAmB;QACxB,IAAI,CAAC,EAAE,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAClD,CAAC;IAED,QAAQ,CAAC,OAA+B;QACpC,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAChD,IAAI,OAAO,EAAE,CAAC;YACV,IAAI,CAAC,EAAE,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAC9C,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACvC,CAAC;IACL,CAAC;CACJ"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import WebSocket from "ws";
|
|
2
|
+
import { SocketAdapter } from "../socket/SocketAdapter";
|
|
3
|
+
export interface NodeSocketAdapterOptions {
|
|
4
|
+
headers?: Record<string, string>;
|
|
5
|
+
}
|
|
6
|
+
export declare class NodeSocketAdapter implements SocketAdapter {
|
|
7
|
+
private ws;
|
|
8
|
+
private messageWrappers;
|
|
9
|
+
constructor(urlOrSocket: string | WebSocket, options?: NodeSocketAdapterOptions);
|
|
10
|
+
send(message: string): void;
|
|
11
|
+
close(): void;
|
|
12
|
+
onOpen(handler: () => void): void;
|
|
13
|
+
onMessage(handler: (data: string) => void): void;
|
|
14
|
+
onClose(handler: () => void): void;
|
|
15
|
+
onError(handler: (error: Error) => void): void;
|
|
16
|
+
offOpen(handler: () => void): void;
|
|
17
|
+
offMessage(handler: (data: string) => void): void;
|
|
18
|
+
offClose(handler: () => void): void;
|
|
19
|
+
offError(handler: (error: Error) => void): void;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=NodeSocketAdapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NodeSocketAdapter.d.ts","sourceRoot":"","sources":["../../../src/adapter/NodeSocketAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,IAAI,CAAC;AAC3B,OAAO,EAAC,aAAa,EAAC,MAAM,yBAAyB,CAAC;AAEtD,MAAM,WAAW,wBAAwB;IACrC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACpC;AAED,qBAAa,iBAAkB,YAAW,aAAa;IACnD,OAAO,CAAC,EAAE,CAAY;IACtB,OAAO,CAAC,eAAe,CAAuE;gBAElF,WAAW,EAAE,MAAM,GAAG,SAAS,EAAE,OAAO,CAAC,EAAE,wBAAwB;IAU/E,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAI3B,KAAK,IAAI,IAAI;IAIb,MAAM,CAAC,OAAO,EAAE,MAAM,IAAI,GAAG,IAAI;IAIjC,SAAS,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI;IAMhD,OAAO,CAAC,OAAO,EAAE,MAAM,IAAI,GAAG,IAAI;IAIlC,OAAO,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,GAAG,IAAI;IAI9C,OAAO,CAAC,OAAO,EAAE,MAAM,IAAI,GAAG,IAAI;IAIlC,UAAU,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI;IAQjD,QAAQ,CAAC,OAAO,EAAE,MAAM,IAAI,GAAG,IAAI;IAInC,QAAQ,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,GAAG,IAAI;CAGlD"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import WebSocket from "ws";
|
|
2
|
+
export class NodeSocketAdapter {
|
|
3
|
+
ws;
|
|
4
|
+
messageWrappers = new WeakMap();
|
|
5
|
+
constructor(urlOrSocket, options) {
|
|
6
|
+
if (typeof urlOrSocket === 'string') {
|
|
7
|
+
this.ws = new WebSocket(urlOrSocket, {
|
|
8
|
+
headers: options?.headers
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
else {
|
|
12
|
+
this.ws = urlOrSocket;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
send(message) {
|
|
16
|
+
this.ws.send(message);
|
|
17
|
+
}
|
|
18
|
+
close() {
|
|
19
|
+
this.ws.close();
|
|
20
|
+
}
|
|
21
|
+
onOpen(handler) {
|
|
22
|
+
this.ws.on('open', handler);
|
|
23
|
+
}
|
|
24
|
+
onMessage(handler) {
|
|
25
|
+
const wrapper = (rawMessage) => handler(String(rawMessage));
|
|
26
|
+
this.messageWrappers.set(handler, wrapper);
|
|
27
|
+
this.ws.on('message', wrapper);
|
|
28
|
+
}
|
|
29
|
+
onClose(handler) {
|
|
30
|
+
this.ws.on('close', handler);
|
|
31
|
+
}
|
|
32
|
+
onError(handler) {
|
|
33
|
+
this.ws.on('error', handler);
|
|
34
|
+
}
|
|
35
|
+
offOpen(handler) {
|
|
36
|
+
this.ws.off('open', handler);
|
|
37
|
+
}
|
|
38
|
+
offMessage(handler) {
|
|
39
|
+
const wrapper = this.messageWrappers.get(handler);
|
|
40
|
+
if (wrapper) {
|
|
41
|
+
this.ws.off('message', wrapper);
|
|
42
|
+
this.messageWrappers.delete(handler);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
offClose(handler) {
|
|
46
|
+
this.ws.off('close', handler);
|
|
47
|
+
}
|
|
48
|
+
offError(handler) {
|
|
49
|
+
this.ws.off('error', handler);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=NodeSocketAdapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NodeSocketAdapter.js","sourceRoot":"","sources":["../../../src/adapter/NodeSocketAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,IAAI,CAAC;AAO3B,MAAM,OAAO,iBAAiB;IAClB,EAAE,CAAY;IACd,eAAe,GAAG,IAAI,OAAO,EAAwD,CAAC;IAE9F,YAAY,WAA+B,EAAE,OAAkC;QAC3E,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE,CAAC;YAClC,IAAI,CAAC,EAAE,GAAG,IAAI,SAAS,CAAC,WAAW,EAAE;gBACjC,OAAO,EAAE,OAAO,EAAE,OAAO;aAC5B,CAAC,CAAC;QACP,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,EAAE,GAAG,WAAW,CAAC;QAC1B,CAAC;IACL,CAAC;IAED,IAAI,CAAC,OAAe;QAChB,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC1B,CAAC;IAED,KAAK;QACD,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;IACpB,CAAC;IAED,MAAM,CAAC,OAAmB;QACtB,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,CAAC;IAED,SAAS,CAAC,OAA+B;QACrC,MAAM,OAAO,GAAG,CAAC,UAAkB,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAA;QACnE,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC3C,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IACnC,CAAC;IAED,OAAO,CAAC,OAAmB;QACvB,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACjC,CAAC;IAED,OAAO,CAAC,OAA+B;QACnC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACjC,CAAC;IAED,OAAO,CAAC,OAAmB;QACvB,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,CAAC;IAED,UAAU,CAAC,OAA+B;QACtC,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAClD,IAAI,OAAO,EAAE,CAAC;YACV,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YAChC,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACzC,CAAC;IACL,CAAC;IAED,QAAQ,CAAC,OAAmB;QACxB,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAClC,CAAC;IAED,QAAQ,CAAC,OAA+B;QACpC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAClC,CAAC;CACJ"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getDefaultAdapter.d.ts","sourceRoot":"","sources":["../../../src/adapter/getDefaultAdapter.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,GAAG,CAAC,CAQtD"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { isNode } from "@grest-ts/common";
|
|
2
|
+
/**
|
|
3
|
+
* Get default adapter - lazy loaded to avoid top-level await
|
|
4
|
+
*/
|
|
5
|
+
export async function getDefaultAdapter() {
|
|
6
|
+
if (isNode()) {
|
|
7
|
+
const { NodeSocketAdapter } = await import('./NodeSocketAdapter');
|
|
8
|
+
return NodeSocketAdapter;
|
|
9
|
+
}
|
|
10
|
+
else {
|
|
11
|
+
const { BrowserSocketAdapter } = await import('./BrowserSocketAdapter');
|
|
12
|
+
return BrowserSocketAdapter;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=getDefaultAdapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getDefaultAdapter.js","sourceRoot":"","sources":["../../../src/adapter/getDefaultAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,MAAM,EAAC,MAAM,kBAAkB,CAAC;AAExC;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB;IACnC,IAAI,MAAM,EAAE,EAAE,CAAC;QACX,MAAM,EAAC,iBAAiB,EAAC,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAC;QAChE,OAAO,iBAAiB,CAAC;IAC7B,CAAC;SAAM,CAAC;QACJ,MAAM,EAAC,oBAAoB,EAAC,GAAG,MAAM,MAAM,CAAC,wBAAwB,CAAC,CAAC;QACtE,OAAO,oBAAoB,CAAC;IAChC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { GGSocket } from "../socket/GGSocket";
|
|
2
|
+
import { GGContractMethod } from "@grest-ts/schema";
|
|
3
|
+
export declare abstract class GGSocketClient {
|
|
4
|
+
readonly socket: GGSocket;
|
|
5
|
+
constructor(socket: GGSocket);
|
|
6
|
+
onClose(onClose: () => void): this;
|
|
7
|
+
close(): void;
|
|
8
|
+
__defineApi<T extends Record<string, GGContractMethod<any, any, any>>>(api: T): T;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=GGSocketClient.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GGSocketClient.d.ts","sourceRoot":"","sources":["../../../src/client/GGSocketClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,QAAQ,EAAC,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAC,gBAAgB,EAAC,MAAM,kBAAkB,CAAC;AAElD,8BAAsB,cAAc;IAEhC,SAAgB,MAAM,EAAE,QAAQ,CAAA;gBAEpB,MAAM,EAAE,QAAQ;IAIrB,OAAO,CAAC,OAAO,EAAE,MAAM,IAAI;IAK3B,KAAK,IAAI,IAAI;IAIb,WAAW,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC;CAI3F"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export class GGSocketClient {
|
|
2
|
+
socket;
|
|
3
|
+
constructor(socket) {
|
|
4
|
+
this.socket = socket;
|
|
5
|
+
}
|
|
6
|
+
onClose(onClose) {
|
|
7
|
+
this.socket.onClose(onClose);
|
|
8
|
+
return this;
|
|
9
|
+
}
|
|
10
|
+
close() {
|
|
11
|
+
this.socket.close();
|
|
12
|
+
}
|
|
13
|
+
__defineApi(api) {
|
|
14
|
+
return api;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=GGSocketClient.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GGSocketClient.js","sourceRoot":"","sources":["../../../src/client/GGSocketClient.ts"],"names":[],"mappings":"AAGA,MAAM,OAAgB,cAAc;IAEhB,MAAM,CAAU;IAEhC,YAAY,MAAgB;QACxB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACzB,CAAC;IAEM,OAAO,CAAC,OAAmB;QAC9B,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;QAC5B,OAAO,IAAI,CAAA;IACf,CAAC;IAEM,KAAK;QACR,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAA;IACvB,CAAC;IAEM,WAAW,CAA4D,GAAM;QAChF,OAAO,GAAG,CAAC;IACf,CAAC;CAEJ"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { GGSocket } from '../socket/GGSocket';
|
|
2
|
+
import { GGWebSocketMiddleware } from "../schema/GGWebSocketMiddleware";
|
|
3
|
+
import { SocketAdapter } from "../socket/SocketAdapter";
|
|
4
|
+
import { GGValidator } from "@grest-ts/schema";
|
|
5
|
+
export interface GGSocketPoolConfig<Query> {
|
|
6
|
+
domain: string;
|
|
7
|
+
path: string;
|
|
8
|
+
query?: Query;
|
|
9
|
+
queryValidator?: GGValidator<Query>;
|
|
10
|
+
middlewares?: readonly GGWebSocketMiddleware[];
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Connection pool for WebSocket connections
|
|
14
|
+
* Reuses existing connections when the same URL + headers combination is requested
|
|
15
|
+
*/
|
|
16
|
+
export declare class GGSocketPool {
|
|
17
|
+
private static sockets;
|
|
18
|
+
private static pendingSockets;
|
|
19
|
+
private static adapter;
|
|
20
|
+
private static adapterPromise;
|
|
21
|
+
/**
|
|
22
|
+
* Get the current number of active connections in the pool
|
|
23
|
+
*/
|
|
24
|
+
static get size(): number;
|
|
25
|
+
/**
|
|
26
|
+
* Get the current number of pending connections being established
|
|
27
|
+
*/
|
|
28
|
+
static get pendingSize(): number;
|
|
29
|
+
/**
|
|
30
|
+
* Close all pooled connections gracefully.
|
|
31
|
+
* Waits for pending connections to establish before closing them.
|
|
32
|
+
* @param graceful - If true, calls teardown() on each socket allowing pending requests to complete.
|
|
33
|
+
* If false, calls close() for immediate termination.
|
|
34
|
+
*/
|
|
35
|
+
static closeAll(graceful?: boolean): Promise<void>;
|
|
36
|
+
/**
|
|
37
|
+
* Clear all maps without closing connections.
|
|
38
|
+
* WARNING: This will cause memory leaks if connections are still active.
|
|
39
|
+
* Only use for testing purposes.
|
|
40
|
+
*/
|
|
41
|
+
static __clearForTesting(): void;
|
|
42
|
+
/**
|
|
43
|
+
* Remove a specific connection from the pool by its key.
|
|
44
|
+
* Does NOT close the socket - just removes it from the pool.
|
|
45
|
+
* @returns true if the connection was found and removed, false otherwise
|
|
46
|
+
*/
|
|
47
|
+
static removeFromPool(key: string): boolean;
|
|
48
|
+
/**
|
|
49
|
+
* Get all connection keys currently in the pool (for debugging/monitoring)
|
|
50
|
+
*/
|
|
51
|
+
static getConnectionKeys(): string[];
|
|
52
|
+
/**
|
|
53
|
+
* Ensure adapter is loaded (lazy initialization)
|
|
54
|
+
*/
|
|
55
|
+
private static ensureAdapter;
|
|
56
|
+
static setAdapter(adapter: new (args: any, options?: any) => SocketAdapter): void;
|
|
57
|
+
/**
|
|
58
|
+
* Build headers from middlewares' updateHandshake()
|
|
59
|
+
*/
|
|
60
|
+
private static buildHeaders;
|
|
61
|
+
static getOrConnect<Query>(config: GGSocketPoolConfig<Query>): Promise<GGSocket>;
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=GGSocketPool.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GGSocketPool.d.ts","sourceRoot":"","sources":["../../../src/client/GGSocketPool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,QAAQ,EAAC,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAA8B,qBAAqB,EAAC,MAAM,iCAAiC,CAAC;AACnG,OAAO,EAAC,aAAa,EAAC,MAAM,yBAAyB,CAAC;AAGtD,OAAO,EAAC,WAAW,EAAe,MAAM,kBAAkB,CAAC;AAM3D,MAAM,WAAW,kBAAkB,CAAC,KAAK;IACrC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,KAAK,CAAA;IACb,cAAc,CAAC,EAAE,WAAW,CAAC,KAAK,CAAC,CAAA;IACnC,WAAW,CAAC,EAAE,SAAS,qBAAqB,EAAE,CAAA;CACjD;AAED;;;GAGG;AACH,qBAAa,YAAY;IACrB,OAAO,CAAC,MAAM,CAAC,OAAO,CAA+B;IACrD,OAAO,CAAC,MAAM,CAAC,cAAc,CAAwC;IACrE,OAAO,CAAC,MAAM,CAAC,OAAO,CAAa;IACnC,OAAO,CAAC,MAAM,CAAC,cAAc,CAA6B;IAE1D;;OAEG;IACH,WAAkB,IAAI,IAAI,MAAM,CAE/B;IAED;;OAEG;IACH,WAAkB,WAAW,IAAI,MAAM,CAEtC;IAED;;;;;OAKG;WACiB,QAAQ,CAAC,QAAQ,GAAE,OAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAqBrE;;;;OAIG;WACW,iBAAiB,IAAI,IAAI;IAOvC;;;;OAIG;WACW,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAIlD;;OAEG;WACW,iBAAiB,IAAI,MAAM,EAAE;IAI3C;;OAEG;mBACkB,aAAa;WAcpB,UAAU,CAAC,OAAO,EAAE,KAAI,IAAI,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,GAAG,KAAK,aAAa;IAKhF;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,YAAY;WAiBd,YAAY,CAAC,KAAK,EAC3B,MAAM,EAAE,kBAAkB,CAAC,KAAK,CAAC,GAClC,OAAO,CAAC,QAAQ,CAAC;CAqGvB"}
|
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
import { GGSocket } from '../socket/GGSocket.js';
|
|
2
|
+
import { GG_WS_CONNECTION } from "../server/GG_WS_CONNECTION.js";
|
|
3
|
+
import { Message, MessageType } from "../socket/SocketMessage.js";
|
|
4
|
+
import { SERVER_ERROR } from "@grest-ts/schema";
|
|
5
|
+
import { withTimeout } from "@grest-ts/common";
|
|
6
|
+
import { GGContext } from "@grest-ts/context";
|
|
7
|
+
import { GG_TRACE } from "@grest-ts/trace";
|
|
8
|
+
import { getDefaultAdapter } from "../adapter/getDefaultAdapter.js";
|
|
9
|
+
/**
|
|
10
|
+
* Connection pool for WebSocket connections
|
|
11
|
+
* Reuses existing connections when the same URL + headers combination is requested
|
|
12
|
+
*/
|
|
13
|
+
export class GGSocketPool {
|
|
14
|
+
static sockets = new Map();
|
|
15
|
+
static pendingSockets = new Map();
|
|
16
|
+
static adapter = null;
|
|
17
|
+
static adapterPromise = null;
|
|
18
|
+
/**
|
|
19
|
+
* Get the current number of active connections in the pool
|
|
20
|
+
*/
|
|
21
|
+
static get size() {
|
|
22
|
+
return this.sockets.size;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Get the current number of pending connections being established
|
|
26
|
+
*/
|
|
27
|
+
static get pendingSize() {
|
|
28
|
+
return this.pendingSockets.size;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Close all pooled connections gracefully.
|
|
32
|
+
* Waits for pending connections to establish before closing them.
|
|
33
|
+
* @param graceful - If true, calls teardown() on each socket allowing pending requests to complete.
|
|
34
|
+
* If false, calls close() for immediate termination.
|
|
35
|
+
*/
|
|
36
|
+
static async closeAll(graceful = true) {
|
|
37
|
+
// Wait for any pending connections to establish first
|
|
38
|
+
const pendingPromises = Array.from(this.pendingSockets.values());
|
|
39
|
+
if (pendingPromises.length > 0) {
|
|
40
|
+
await Promise.allSettled(pendingPromises);
|
|
41
|
+
}
|
|
42
|
+
// Close all active connections
|
|
43
|
+
const sockets = Array.from(this.sockets.values());
|
|
44
|
+
if (graceful) {
|
|
45
|
+
await Promise.allSettled(sockets.map(socket => socket.teardown()));
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
sockets.forEach(socket => socket.close());
|
|
49
|
+
}
|
|
50
|
+
// Clear the maps (onClose handlers should have already removed them,
|
|
51
|
+
// but clear explicitly to handle any edge cases)
|
|
52
|
+
this.sockets.clear();
|
|
53
|
+
this.pendingSockets.clear();
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Clear all maps without closing connections.
|
|
57
|
+
* WARNING: This will cause memory leaks if connections are still active.
|
|
58
|
+
* Only use for testing purposes.
|
|
59
|
+
*/
|
|
60
|
+
static __clearForTesting() {
|
|
61
|
+
this.sockets.clear();
|
|
62
|
+
this.pendingSockets.clear();
|
|
63
|
+
this.adapter = null;
|
|
64
|
+
this.adapterPromise = null;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Remove a specific connection from the pool by its key.
|
|
68
|
+
* Does NOT close the socket - just removes it from the pool.
|
|
69
|
+
* @returns true if the connection was found and removed, false otherwise
|
|
70
|
+
*/
|
|
71
|
+
static removeFromPool(key) {
|
|
72
|
+
return this.sockets.delete(key);
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Get all connection keys currently in the pool (for debugging/monitoring)
|
|
76
|
+
*/
|
|
77
|
+
static getConnectionKeys() {
|
|
78
|
+
return Array.from(this.sockets.keys());
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Ensure adapter is loaded (lazy initialization)
|
|
82
|
+
*/
|
|
83
|
+
static async ensureAdapter() {
|
|
84
|
+
if (this.adapter) {
|
|
85
|
+
return this.adapter;
|
|
86
|
+
}
|
|
87
|
+
if (!this.adapterPromise) {
|
|
88
|
+
this.adapterPromise = getDefaultAdapter();
|
|
89
|
+
}
|
|
90
|
+
// Always await the promise to handle race conditions
|
|
91
|
+
this.adapter = await this.adapterPromise;
|
|
92
|
+
return this.adapter;
|
|
93
|
+
}
|
|
94
|
+
static setAdapter(adapter) {
|
|
95
|
+
this.adapter = adapter;
|
|
96
|
+
this.adapterPromise = Promise.resolve(adapter);
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Build headers from middlewares' updateHandshake()
|
|
100
|
+
*/
|
|
101
|
+
static buildHeaders(config) {
|
|
102
|
+
if (!config.middlewares) {
|
|
103
|
+
return {};
|
|
104
|
+
}
|
|
105
|
+
const handshakeContext = {
|
|
106
|
+
headers: {},
|
|
107
|
+
queryArgs: config.query ?? {}
|
|
108
|
+
};
|
|
109
|
+
for (const middleware of config.middlewares) {
|
|
110
|
+
middleware.updateHandshake?.(handshakeContext);
|
|
111
|
+
}
|
|
112
|
+
return handshakeContext.headers;
|
|
113
|
+
}
|
|
114
|
+
static async getOrConnect(config) {
|
|
115
|
+
// Build headers from middlewares
|
|
116
|
+
const headers = this.buildHeaders(config);
|
|
117
|
+
// Build full URL with query string if provided
|
|
118
|
+
let fullUrl = config.domain + config.path;
|
|
119
|
+
if (config.query) {
|
|
120
|
+
const queryEntries = Object.entries(config.query).map(([key, value]) => [key, String(value)]);
|
|
121
|
+
fullUrl += '?' + new URLSearchParams(queryEntries).toString();
|
|
122
|
+
}
|
|
123
|
+
// Create connection key based on URL + headers
|
|
124
|
+
const headerKey = Object.entries(headers).sort().map(([k, v]) => `${k}=${v}`).join('&');
|
|
125
|
+
const key = fullUrl + "::" + headerKey;
|
|
126
|
+
// Check for existing connection first
|
|
127
|
+
if (this.sockets.has(key)) {
|
|
128
|
+
return this.sockets.get(key);
|
|
129
|
+
}
|
|
130
|
+
if (this.pendingSockets.has(key)) {
|
|
131
|
+
return this.pendingSockets.get(key);
|
|
132
|
+
}
|
|
133
|
+
// Create the connection promise BEFORE any async operations to prevent race conditions
|
|
134
|
+
// This ensures that concurrent calls will see the pending promise
|
|
135
|
+
const connectionPromise = (async () => {
|
|
136
|
+
// Ensure adapter is loaded (this is async but safely inside the promise)
|
|
137
|
+
const adapterClass = await this.ensureAdapter();
|
|
138
|
+
return new Promise((resolve, reject) => {
|
|
139
|
+
const adapter = new adapterClass(fullUrl);
|
|
140
|
+
adapter.onOpen(async () => {
|
|
141
|
+
try {
|
|
142
|
+
const context = new GGContext("ws-client-connection");
|
|
143
|
+
await context.run(async () => {
|
|
144
|
+
GG_TRACE.init();
|
|
145
|
+
GG_WS_CONNECTION.set({
|
|
146
|
+
port: undefined,
|
|
147
|
+
path: config.domain
|
|
148
|
+
});
|
|
149
|
+
// Send handshake with headers
|
|
150
|
+
adapter.send(Message.create(MessageType.HANDSHAKE, "", "", headers));
|
|
151
|
+
// Wait for handshake response
|
|
152
|
+
await withTimeout(new Promise((handshakeResolve, handshakeReject) => {
|
|
153
|
+
const onMessage = (data) => {
|
|
154
|
+
const msg = Message.parse(data);
|
|
155
|
+
if (!msg)
|
|
156
|
+
return;
|
|
157
|
+
if (msg.type === MessageType.HANDSHAKE_OK) {
|
|
158
|
+
adapter.offMessage(onMessage);
|
|
159
|
+
handshakeResolve();
|
|
160
|
+
}
|
|
161
|
+
else if (msg.type === MessageType.HANDSHAKE_ERR) {
|
|
162
|
+
adapter.offMessage(onMessage);
|
|
163
|
+
handshakeReject(new SERVER_ERROR({
|
|
164
|
+
displayMessage: 'WebSocket handshake failed',
|
|
165
|
+
originalError: msg.data
|
|
166
|
+
}));
|
|
167
|
+
}
|
|
168
|
+
};
|
|
169
|
+
adapter.onMessage(onMessage);
|
|
170
|
+
}), 5000, 'Handshake timeout');
|
|
171
|
+
resolve(new GGSocket(adapter, { connectionContext: context }));
|
|
172
|
+
});
|
|
173
|
+
}
|
|
174
|
+
catch (error) {
|
|
175
|
+
reject(error);
|
|
176
|
+
}
|
|
177
|
+
});
|
|
178
|
+
adapter.onError((error) => {
|
|
179
|
+
reject(error);
|
|
180
|
+
});
|
|
181
|
+
});
|
|
182
|
+
})();
|
|
183
|
+
// Store the pending promise IMMEDIATELY (before awaiting)
|
|
184
|
+
this.pendingSockets.set(key, connectionPromise);
|
|
185
|
+
try {
|
|
186
|
+
const socket = await connectionPromise;
|
|
187
|
+
// Store the connection
|
|
188
|
+
this.sockets.set(key, socket);
|
|
189
|
+
this.pendingSockets.delete(key);
|
|
190
|
+
// Clean up on close
|
|
191
|
+
socket.onClose(() => {
|
|
192
|
+
this.sockets.delete(key);
|
|
193
|
+
});
|
|
194
|
+
return socket;
|
|
195
|
+
}
|
|
196
|
+
catch (error) {
|
|
197
|
+
// Clean up failed connection attempt
|
|
198
|
+
this.pendingSockets.delete(key);
|
|
199
|
+
throw error;
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
//# sourceMappingURL=GGSocketPool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GGSocketPool.js","sourceRoot":"","sources":["../../../src/client/GGSocketPool.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export * from "./socket/WebSocketTypes";
|
|
2
|
+
export * from "./server/GGWebSocketMetrics";
|
|
3
|
+
export * from "./server/GG_WS_CONNECTION";
|
|
4
|
+
export * from "./server/GG_WS_MESSAGE";
|
|
5
|
+
export * from "./socket/GGSocket";
|
|
6
|
+
export * from "./schema/webSocketSchema";
|
|
7
|
+
export * from "./schema/GGWebSocketSchema";
|
|
8
|
+
export * from "./schema/GGWebSocketMiddleware";
|
|
9
|
+
export * from "./client/GGSocketClient";
|
|
10
|
+
export * from "./client/GGSocketPool";
|
|
11
|
+
//# sourceMappingURL=index-browser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-browser.d.ts","sourceRoot":"","sources":["../../src/index-browser.ts"],"names":[],"mappings":"AACA,cAAc,yBAAyB,CAAC;AAGxC,cAAc,6BAA6B,CAAC;AAG5C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,wBAAwB,CAAC;AAGvC,cAAc,mBAAmB,CAAC;AAGlC,cAAc,0BAA0B,CAAC;AACzC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,gCAAgC,CAAC;AAG/C,cAAc,yBAAyB,CAAC;AACxC,cAAc,uBAAuB,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
// Type helpers
|
|
2
|
+
export * from "./socket/WebSocketTypes.js";
|
|
3
|
+
// Metrics
|
|
4
|
+
export * from "./server/GGWebSocketMetrics.js";
|
|
5
|
+
// Context
|
|
6
|
+
export * from "./server/GG_WS_CONNECTION.js";
|
|
7
|
+
export * from "./server/GG_WS_MESSAGE.js";
|
|
8
|
+
// Core
|
|
9
|
+
export * from "./socket/GGSocket.js";
|
|
10
|
+
// API Schema
|
|
11
|
+
export * from "./schema/webSocketSchema.js";
|
|
12
|
+
export * from "./schema/GGWebSocketSchema.js";
|
|
13
|
+
export * from "./schema/GGWebSocketMiddleware.js";
|
|
14
|
+
// Client
|
|
15
|
+
export * from "./client/GGSocketClient.js";
|
|
16
|
+
export * from "./client/GGSocketPool.js";
|
|
17
|
+
//# sourceMappingURL=index-browser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-browser.js","sourceRoot":"","sources":["../../src/index-browser.ts"],"names":[],"mappings":"AAAA,eAAe;AACf,cAAc,yBAAyB,CAAC;AAExC,UAAU;AACV,cAAc,6BAA6B,CAAC;AAE5C,UAAU;AACV,cAAc,2BAA2B,CAAC;AAC1C,cAAc,wBAAwB,CAAC;AAEvC,OAAO;AACP,cAAc,mBAAmB,CAAC;AAElC,aAAa;AACb,cAAc,0BAA0B,CAAC;AACzC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,gCAAgC,CAAC;AAE/C,SAAS;AACT,cAAc,yBAAyB,CAAC;AACxC,cAAc,uBAAuB,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export * from "./socket/WebSocketTypes";
|
|
2
|
+
export * from "./server/GGWebSocketMetrics";
|
|
3
|
+
export * from "./server/GG_WS_CONNECTION";
|
|
4
|
+
export * from "./server/GG_WS_MESSAGE";
|
|
5
|
+
export * from "./socket/GGSocket";
|
|
6
|
+
export * from "./schema/webSocketSchema";
|
|
7
|
+
export * from "./schema/GGWebSocketSchema";
|
|
8
|
+
export * from "./schema/GGWebSocketMiddleware";
|
|
9
|
+
export * from "./server/GGSocketServer";
|
|
10
|
+
export * from "./server/GGWebSocketSchema.startServer";
|
|
11
|
+
export * from "./client/GGSocketClient";
|
|
12
|
+
export * from "./client/GGSocketPool";
|
|
13
|
+
import "./server/GGWebSocketSchema.startServer";
|
|
14
|
+
//# sourceMappingURL=index-node.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-node.d.ts","sourceRoot":"","sources":["../../src/index-node.ts"],"names":[],"mappings":"AACA,cAAc,yBAAyB,CAAC;AAGxC,cAAc,6BAA6B,CAAC;AAG5C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,wBAAwB,CAAC;AAGvC,cAAc,mBAAmB,CAAC;AAGlC,cAAc,0BAA0B,CAAC;AACzC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,gCAAgC,CAAC;AAG/C,cAAc,yBAAyB,CAAC;AACxC,cAAc,wCAAwC,CAAC;AAGvD,cAAc,yBAAyB,CAAC;AACxC,cAAc,uBAAuB,CAAC;AAGtC,OAAO,wCAAwC,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
// Type helpers
|
|
2
|
+
export * from "./socket/WebSocketTypes.js";
|
|
3
|
+
// Metrics
|
|
4
|
+
export * from "./server/GGWebSocketMetrics.js";
|
|
5
|
+
// Context
|
|
6
|
+
export * from "./server/GG_WS_CONNECTION.js";
|
|
7
|
+
export * from "./server/GG_WS_MESSAGE.js";
|
|
8
|
+
// Core
|
|
9
|
+
export * from "./socket/GGSocket.js";
|
|
10
|
+
// API Schema
|
|
11
|
+
export * from "./schema/webSocketSchema.js";
|
|
12
|
+
export * from "./schema/GGWebSocketSchema.js";
|
|
13
|
+
export * from "./schema/GGWebSocketMiddleware.js";
|
|
14
|
+
// Server
|
|
15
|
+
export * from "./server/GGSocketServer.js";
|
|
16
|
+
export * from "./server/GGWebSocketSchema.startServer.js";
|
|
17
|
+
// Client
|
|
18
|
+
export * from "./client/GGSocketClient.js";
|
|
19
|
+
export * from "./client/GGSocketPool.js";
|
|
20
|
+
// Extensions
|
|
21
|
+
import "./server/GGWebSocketSchema.startServer.js";
|
|
22
|
+
//# sourceMappingURL=index-node.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-node.js","sourceRoot":"","sources":["../../src/index-node.ts"],"names":[],"mappings":"AAAA,eAAe;AACf,cAAc,yBAAyB,CAAC;AAExC,UAAU;AACV,cAAc,6BAA6B,CAAC;AAE5C,UAAU;AACV,cAAc,2BAA2B,CAAC;AAC1C,cAAc,wBAAwB,CAAC;AAEvC,OAAO;AACP,cAAc,mBAAmB,CAAC;AAElC,aAAa;AACb,cAAc,0BAA0B,CAAC;AACzC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,gCAAgC,CAAC;AAE/C,SAAS;AACT,cAAc,yBAAyB,CAAC;AACxC,cAAc,wCAAwC,CAAC;AAEvD,SAAS;AACT,cAAc,yBAAyB,CAAC;AACxC,cAAc,uBAAuB,CAAC;AAEtC,aAAa;AACb,OAAO,wCAAwC,CAAC"}
|