@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.
Files changed (117) hide show
  1. package/LICENSE +21 -0
  2. package/dist/src/adapter/BrowserSocketAdapter.d.ts +18 -0
  3. package/dist/src/adapter/BrowserSocketAdapter.d.ts.map +1 -0
  4. package/dist/src/adapter/BrowserSocketAdapter.js +51 -0
  5. package/dist/src/adapter/BrowserSocketAdapter.js.map +1 -0
  6. package/dist/src/adapter/NodeSocketAdapter.d.ts +21 -0
  7. package/dist/src/adapter/NodeSocketAdapter.d.ts.map +1 -0
  8. package/dist/src/adapter/NodeSocketAdapter.js +52 -0
  9. package/dist/src/adapter/NodeSocketAdapter.js.map +1 -0
  10. package/dist/src/adapter/getDefaultAdapter.d.ts +5 -0
  11. package/dist/src/adapter/getDefaultAdapter.d.ts.map +1 -0
  12. package/dist/src/adapter/getDefaultAdapter.js +15 -0
  13. package/dist/src/adapter/getDefaultAdapter.js.map +1 -0
  14. package/dist/src/client/GGSocketClient.d.ts +10 -0
  15. package/dist/src/client/GGSocketClient.d.ts.map +1 -0
  16. package/dist/src/client/GGSocketClient.js +17 -0
  17. package/dist/src/client/GGSocketClient.js.map +1 -0
  18. package/dist/src/client/GGSocketPool.d.ts +63 -0
  19. package/dist/src/client/GGSocketPool.d.ts.map +1 -0
  20. package/dist/src/client/GGSocketPool.js +203 -0
  21. package/dist/src/client/GGSocketPool.js.map +1 -0
  22. package/dist/src/index-browser.d.ts +11 -0
  23. package/dist/src/index-browser.d.ts.map +1 -0
  24. package/dist/src/index-browser.js +17 -0
  25. package/dist/src/index-browser.js.map +1 -0
  26. package/dist/src/index-node.d.ts +14 -0
  27. package/dist/src/index-node.d.ts.map +1 -0
  28. package/dist/src/index-node.js +22 -0
  29. package/dist/src/index-node.js.map +1 -0
  30. package/dist/src/schema/GGWebSocketMiddleware.d.ts +40 -0
  31. package/dist/src/schema/GGWebSocketMiddleware.d.ts.map +1 -0
  32. package/dist/src/schema/GGWebSocketMiddleware.js +6 -0
  33. package/dist/src/schema/GGWebSocketMiddleware.js.map +1 -0
  34. package/dist/src/schema/GGWebSocketSchema.d.ts +31 -0
  35. package/dist/src/schema/GGWebSocketSchema.d.ts.map +1 -0
  36. package/dist/src/schema/GGWebSocketSchema.js +32 -0
  37. package/dist/src/schema/GGWebSocketSchema.js.map +1 -0
  38. package/dist/src/schema/webSocketSchema.d.ts +52 -0
  39. package/dist/src/schema/webSocketSchema.d.ts.map +1 -0
  40. package/dist/src/schema/webSocketSchema.js +62 -0
  41. package/dist/src/schema/webSocketSchema.js.map +1 -0
  42. package/dist/src/server/GGSocketServer.d.ts +34 -0
  43. package/dist/src/server/GGSocketServer.d.ts.map +1 -0
  44. package/dist/src/server/GGSocketServer.js +186 -0
  45. package/dist/src/server/GGSocketServer.js.map +1 -0
  46. package/dist/src/server/GGWebSocketMetrics.d.ts +43 -0
  47. package/dist/src/server/GGWebSocketMetrics.d.ts.map +1 -0
  48. package/dist/src/server/GGWebSocketMetrics.js +38 -0
  49. package/dist/src/server/GGWebSocketMetrics.js.map +1 -0
  50. package/dist/src/server/GGWebSocketSchema.startServer.d.ts +33 -0
  51. package/dist/src/server/GGWebSocketSchema.startServer.d.ts.map +1 -0
  52. package/dist/src/server/GGWebSocketSchema.startServer.js +80 -0
  53. package/dist/src/server/GGWebSocketSchema.startServer.js.map +1 -0
  54. package/dist/src/server/GG_WS_CONNECTION.d.ts +12 -0
  55. package/dist/src/server/GG_WS_CONNECTION.d.ts.map +1 -0
  56. package/dist/src/server/GG_WS_CONNECTION.js +8 -0
  57. package/dist/src/server/GG_WS_CONNECTION.js.map +1 -0
  58. package/dist/src/server/GG_WS_MESSAGE.d.ts +10 -0
  59. package/dist/src/server/GG_WS_MESSAGE.d.ts.map +1 -0
  60. package/dist/src/server/GG_WS_MESSAGE.js +7 -0
  61. package/dist/src/server/GG_WS_MESSAGE.js.map +1 -0
  62. package/dist/src/socket/GGSocket.d.ts +81 -0
  63. package/dist/src/socket/GGSocket.d.ts.map +1 -0
  64. package/dist/src/socket/GGSocket.js +315 -0
  65. package/dist/src/socket/GGSocket.js.map +1 -0
  66. package/dist/src/socket/SocketAdapter.d.ts +13 -0
  67. package/dist/src/socket/SocketAdapter.d.ts.map +1 -0
  68. package/dist/src/socket/SocketAdapter.js +2 -0
  69. package/dist/src/socket/SocketAdapter.js.map +1 -0
  70. package/dist/src/socket/SocketMessage.d.ts +47 -0
  71. package/dist/src/socket/SocketMessage.d.ts.map +1 -0
  72. package/dist/src/socket/SocketMessage.js +51 -0
  73. package/dist/src/socket/SocketMessage.js.map +1 -0
  74. package/dist/src/socket/WebSocketTypes.d.ts +18 -0
  75. package/dist/src/socket/WebSocketTypes.d.ts.map +1 -0
  76. package/dist/src/socket/WebSocketTypes.js +5 -0
  77. package/dist/src/socket/WebSocketTypes.js.map +1 -0
  78. package/dist/src/socket/utils/PendingRequestsMap.d.ts +32 -0
  79. package/dist/src/socket/utils/PendingRequestsMap.d.ts.map +1 -0
  80. package/dist/src/socket/utils/PendingRequestsMap.js +104 -0
  81. package/dist/src/socket/utils/PendingRequestsMap.js.map +1 -0
  82. package/dist/src/tsconfig.json +17 -0
  83. package/dist/testkit/client/GGSocketCall.d.ts +37 -0
  84. package/dist/testkit/client/GGSocketCall.d.ts.map +1 -0
  85. package/dist/testkit/client/GGSocketCall.js +44 -0
  86. package/dist/testkit/client/GGSocketCall.js.map +1 -0
  87. package/dist/testkit/client/GGWebSocketSchema.callOn.d.ts +70 -0
  88. package/dist/testkit/client/GGWebSocketSchema.callOn.d.ts.map +1 -0
  89. package/dist/testkit/client/GGWebSocketSchema.callOn.js +135 -0
  90. package/dist/testkit/client/GGWebSocketSchema.callOn.js.map +1 -0
  91. package/dist/testkit/index-testkit.d.ts +4 -0
  92. package/dist/testkit/index-testkit.d.ts.map +1 -0
  93. package/dist/testkit/index-testkit.js +3 -0
  94. package/dist/testkit/index-testkit.js.map +1 -0
  95. package/dist/tsconfig.publish.tsbuildinfo +1 -0
  96. package/package.json +74 -0
  97. package/src/adapter/BrowserSocketAdapter.ts +63 -0
  98. package/src/adapter/NodeSocketAdapter.ts +67 -0
  99. package/src/adapter/getDefaultAdapter.ts +14 -0
  100. package/src/client/GGSocketClient.ts +25 -0
  101. package/src/client/GGSocketPool.ts +244 -0
  102. package/src/index-browser.ts +21 -0
  103. package/src/index-node.ts +28 -0
  104. package/src/schema/GGWebSocketMiddleware.ts +43 -0
  105. package/src/schema/GGWebSocketSchema.ts +57 -0
  106. package/src/schema/webSocketSchema.ts +109 -0
  107. package/src/server/GGSocketServer.ts +217 -0
  108. package/src/server/GGWebSocketMetrics.ts +58 -0
  109. package/src/server/GGWebSocketSchema.startServer.ts +136 -0
  110. package/src/server/GG_WS_CONNECTION.ts +10 -0
  111. package/src/server/GG_WS_MESSAGE.ts +9 -0
  112. package/src/socket/GGSocket.ts +394 -0
  113. package/src/socket/SocketAdapter.ts +21 -0
  114. package/src/socket/SocketMessage.ts +97 -0
  115. package/src/socket/WebSocketTypes.ts +19 -0
  116. package/src/socket/utils/PendingRequestsMap.ts +128 -0
  117. 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,5 @@
1
+ /**
2
+ * Get default adapter - lazy loaded to avoid top-level await
3
+ */
4
+ export declare function getDefaultAdapter(): Promise<any>;
5
+ //# sourceMappingURL=getDefaultAdapter.d.ts.map
@@ -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"}