udp-stencil-component-library 25.18.2-beta.6 → 25.18.2-beta.8

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 (73) hide show
  1. package/dist/cjs/index.cjs.js +138 -0
  2. package/dist/cjs/index.cjs.js.map +1 -1
  3. package/dist/cjs/loader.cjs.js +1 -1
  4. package/dist/cjs/stencil-library.cjs.js +1 -1
  5. package/dist/cjs/udp-forms-renderer.cjs.entry.js +591 -603
  6. package/dist/cjs/udp-forms-renderer.entry.cjs.js.map +1 -1
  7. package/dist/cjs/udp-forms-ui.cjs.entry.js +1 -4
  8. package/dist/cjs/udp-forms-ui.entry.cjs.js.map +1 -1
  9. package/dist/collection/components/forms/udp-forms/udp-forms-renderer/udp-forms-renderer-ui/udp-forms-ui.js +1 -4
  10. package/dist/collection/components/forms/udp-forms/udp-forms-renderer/udp-forms-renderer-ui/udp-forms-ui.js.map +1 -1
  11. package/dist/collection/components/forms/udp-forms/udp-forms-renderer/udp-forms-renderer-utils/comments-crud-utils.js +153 -0
  12. package/dist/collection/components/forms/udp-forms/udp-forms-renderer/udp-forms-renderer-utils/comments-crud-utils.js.map +1 -0
  13. package/dist/collection/components/forms/udp-forms/udp-forms-renderer/udp-forms-renderer-utils/repeated-section-utils.js +104 -0
  14. package/dist/collection/components/forms/udp-forms/udp-forms-renderer/udp-forms-renderer-utils/repeated-section-utils.js.map +1 -0
  15. package/dist/collection/components/forms/udp-forms/udp-forms-renderer/{udp-forms-renderer-utils.js → udp-forms-renderer-utils/utils.js} +48 -2
  16. package/dist/collection/components/forms/udp-forms/udp-forms-renderer/udp-forms-renderer-utils/utils.js.map +1 -0
  17. package/dist/collection/components/forms/udp-forms/udp-forms-renderer/udp-forms-renderer.js +187 -310
  18. package/dist/collection/components/forms/udp-forms/udp-forms-renderer/udp-forms-renderer.js.map +1 -1
  19. package/dist/collection/components/forms/udp-forms/udp-forms-utils/form-handler/UdpFormHandler.js +13 -13
  20. package/dist/collection/components/forms/udp-forms/udp-forms-utils/form-handler/UdpFormHandler.js.map +1 -1
  21. package/dist/collection/components/forms/udp-forms/udp-forms-utils/form-submission-handler/FormSubmissionHandler.js +142 -0
  22. package/dist/collection/components/forms/udp-forms/udp-forms-utils/form-submission-handler/FormSubmissionHandler.js.map +1 -0
  23. package/dist/collection/components/forms/udp-forms/udp-forms-utils/form-submission-handler/FormSubmissionHandlerFactory.js +3 -10
  24. package/dist/collection/components/forms/udp-forms/udp-forms-utils/form-submission-handler/FormSubmissionHandlerFactory.js.map +1 -1
  25. package/dist/collection/components/forms/udp-forms/udp-forms-utils/form-submission-handler/IFormSubmissionHandler.js.map +1 -1
  26. package/dist/collection/components/forms/udp-forms/udp-forms-utils/types.js.map +1 -1
  27. package/dist/collection/index.js +1 -0
  28. package/dist/collection/index.js.map +1 -1
  29. package/dist/collection/udp-utilities/udp-websocket-client/udp-websocket-client.js +137 -0
  30. package/dist/collection/udp-utilities/udp-websocket-client/udp-websocket-client.js.map +1 -0
  31. package/dist/components/index.js +138 -1
  32. package/dist/components/index.js.map +1 -1
  33. package/dist/components/udp-forms-renderer.js +593 -608
  34. package/dist/components/udp-forms-renderer.js.map +1 -1
  35. package/dist/components/udp-forms-ui2.js +1 -4
  36. package/dist/components/udp-forms-ui2.js.map +1 -1
  37. package/dist/docs.json +1 -1
  38. package/dist/esm/index.js +138 -1
  39. package/dist/esm/index.js.map +1 -1
  40. package/dist/esm/loader.js +1 -1
  41. package/dist/esm/stencil-library.js +1 -1
  42. package/dist/esm/udp-forms-renderer.entry.js +592 -604
  43. package/dist/esm/udp-forms-renderer.entry.js.map +1 -1
  44. package/dist/esm/udp-forms-ui.entry.js +1 -4
  45. package/dist/esm/udp-forms-ui.entry.js.map +1 -1
  46. package/dist/stencil-library/index.esm.js +1 -1
  47. package/dist/stencil-library/index.esm.js.map +1 -1
  48. package/dist/stencil-library/stencil-library.esm.js +1 -1
  49. package/dist/stencil-library/udp-forms-renderer.entry.esm.js.map +1 -1
  50. package/dist/stencil-library/udp-forms-renderer.entry.js +1 -1
  51. package/dist/stencil-library/udp-forms-renderer.entry.js.map +1 -1
  52. package/dist/stencil-library/udp-forms-ui.entry.esm.js.map +1 -1
  53. package/dist/stencil-library/udp-forms-ui.entry.js +1 -1
  54. package/dist/stencil-library/udp-forms-ui.entry.js.map +1 -1
  55. package/dist/types/components/forms/udp-forms/udp-forms-renderer/udp-forms-renderer-utils/comments-crud-utils.d.ts +31 -0
  56. package/dist/types/components/forms/udp-forms/udp-forms-renderer/udp-forms-renderer-utils/repeated-section-utils.d.ts +17 -0
  57. package/dist/types/components/forms/udp-forms/udp-forms-renderer/{udp-forms-renderer-utils.d.ts → udp-forms-renderer-utils/utils.d.ts} +4 -0
  58. package/dist/types/components/forms/udp-forms/udp-forms-renderer/udp-forms-renderer.d.ts +6 -10
  59. package/dist/types/components/forms/udp-forms/udp-forms-utils/form-handler/UdpFormHandler.d.ts +5 -6
  60. package/dist/types/components/forms/udp-forms/udp-forms-utils/form-submission-handler/FormSubmissionHandler.d.ts +42 -0
  61. package/dist/types/components/forms/udp-forms/udp-forms-utils/form-submission-handler/FormSubmissionHandlerFactory.d.ts +1 -1
  62. package/dist/types/components/forms/udp-forms/udp-forms-utils/form-submission-handler/IFormSubmissionHandler.d.ts +44 -5
  63. package/dist/types/components/forms/udp-forms/udp-forms-utils/types.d.ts +16 -0
  64. package/dist/types/index.d.ts +1 -0
  65. package/dist/types/udp-utilities/udp-websocket-client/udp-websocket-client.d.ts +34 -0
  66. package/package.json +1 -1
  67. package/dist/collection/components/forms/udp-forms/udp-forms-renderer/udp-forms-renderer-utils.js.map +0 -1
  68. package/dist/collection/components/forms/udp-forms/udp-forms-utils/form-submission-handler/PrivateFormSubmissionHandler.js +0 -264
  69. package/dist/collection/components/forms/udp-forms/udp-forms-utils/form-submission-handler/PrivateFormSubmissionHandler.js.map +0 -1
  70. package/dist/collection/components/forms/udp-forms/udp-forms-utils/form-submission-handler/PublicFormSubmissionHandler.js +0 -63
  71. package/dist/collection/components/forms/udp-forms/udp-forms-utils/form-submission-handler/PublicFormSubmissionHandler.js.map +0 -1
  72. package/dist/types/components/forms/udp-forms/udp-forms-utils/form-submission-handler/PrivateFormSubmissionHandler.d.ts +0 -131
  73. package/dist/types/components/forms/udp-forms/udp-forms-utils/form-submission-handler/PublicFormSubmissionHandler.d.ts +0 -15
@@ -0,0 +1,137 @@
1
+ export class UdpWebSocketClient {
2
+ get isConnected() {
3
+ var _a;
4
+ return ((_a = this.socket) === null || _a === void 0 ? void 0 : _a.readyState) === WebSocket.OPEN;
5
+ }
6
+ async connect(url, getAccessToken, keepAliveIntervalMs = 0, keepAliveTimeoutMs = 0) {
7
+ var _a;
8
+ if (!this.isWssUrl(url)) {
9
+ throw new Error("Invalid WebSocket URL. Only ws and wss protocols are supported.");
10
+ }
11
+ const accessToken = await getAccessToken();
12
+ if (accessToken) {
13
+ // Browsers don't support setting headers manually, they only allow setting the `Sec-WebSocket-Protocol` header (secondary protocol header)
14
+ this.socket = new WebSocket(url, accessToken);
15
+ }
16
+ else {
17
+ this.socket = new WebSocket(url);
18
+ }
19
+ // Wait for the socket to open or error
20
+ await new Promise((resolve, reject) => {
21
+ const onOpen = () => {
22
+ this.socket.removeEventListener('open', onOpen);
23
+ this.socket.removeEventListener('error', onError);
24
+ resolve();
25
+ };
26
+ const onError = (e) => {
27
+ this.socket.removeEventListener('open', onOpen);
28
+ this.socket.removeEventListener('error', onError);
29
+ reject(e);
30
+ };
31
+ this.socket.addEventListener('open', onOpen);
32
+ this.socket.addEventListener('error', onError);
33
+ });
34
+ // Socket is now open, call the openHandler
35
+ (_a = this.openHandler) === null || _a === void 0 ? void 0 : _a.call(this);
36
+ // Assign socket events
37
+ this.socket.onmessage = (e) => this.handleMessage(e);
38
+ this.socket.onclose = (e) => this.handleClose(e);
39
+ this.socket.onerror = (e) => this.handleError(e);
40
+ // Start keepAliveTimer if configured
41
+ if (keepAliveIntervalMs && keepAliveTimeoutMs) {
42
+ this.startKeepAliveTimer(keepAliveIntervalMs, keepAliveTimeoutMs);
43
+ }
44
+ }
45
+ onMessageReceived(handler) {
46
+ this.messageReceivedHandler = handler;
47
+ return this;
48
+ }
49
+ onOpen(handler) {
50
+ this.openHandler = handler;
51
+ return this;
52
+ }
53
+ onClose(handler) {
54
+ this.closeHandler = handler;
55
+ return this;
56
+ }
57
+ onError(handler) {
58
+ this.errorHandler = handler;
59
+ return this;
60
+ }
61
+ send(message) {
62
+ if (!this.isConnected) {
63
+ throw new Error("WebSocket is not connected.");
64
+ }
65
+ const json = JSON.stringify(message);
66
+ this.socket.send(json);
67
+ }
68
+ close() {
69
+ if (this.socket) {
70
+ this.socket.close();
71
+ this.stopKeepAliveTimer();
72
+ this.socket = undefined;
73
+ }
74
+ }
75
+ // Event handlers
76
+ handleMessage(event) {
77
+ var _a;
78
+ try {
79
+ const msg = JSON.parse(event.data);
80
+ (_a = this.messageReceivedHandler) === null || _a === void 0 ? void 0 : _a.call(this, msg);
81
+ }
82
+ catch (err) {
83
+ console.error("Invalid UdpWebSocketMessage received:", err);
84
+ }
85
+ }
86
+ handleClose(event) {
87
+ var _a;
88
+ (_a = this.closeHandler) === null || _a === void 0 ? void 0 : _a.call(this, event);
89
+ this.close();
90
+ }
91
+ handleError(event) {
92
+ var _a;
93
+ (_a = this.errorHandler) === null || _a === void 0 ? void 0 : _a.call(this, event);
94
+ console.error("UdpWebSocket error:", event);
95
+ }
96
+ // KeepAlive functions
97
+ startKeepAliveTimer(intervalMs, timeoutMs) {
98
+ this.stopKeepAliveTimer();
99
+ // TODO: Check that this is interval not timeout param
100
+ this.keepAliveIntervalId = window.setInterval(() => {
101
+ this.sendKeepAlivePing();
102
+ }, intervalMs);
103
+ // Autoclose after timeout reached
104
+ this.keepAliveTimeoutId = window.setTimeout(() => {
105
+ this.close();
106
+ }, timeoutMs);
107
+ }
108
+ stopKeepAliveTimer() {
109
+ if (this.keepAliveIntervalId)
110
+ clearInterval(this.keepAliveIntervalId);
111
+ if (this.keepAliveTimeoutId)
112
+ clearTimeout(this.keepAliveTimeoutId);
113
+ this.keepAliveIntervalId = undefined;
114
+ this.keepAliveTimeoutId = undefined;
115
+ }
116
+ sendKeepAlivePing() {
117
+ const pingPacket = {
118
+ headers: {
119
+ type: "KeepAlive",
120
+ timestamp: Date.now()
121
+ },
122
+ };
123
+ try {
124
+ this.send(pingPacket);
125
+ }
126
+ catch (err) {
127
+ console.error("KeepAlive ping failed to send:", err);
128
+ }
129
+ }
130
+ // Util functions
131
+ isWssUrl(url) {
132
+ return /^wss?:\/\//.test(url);
133
+ }
134
+ }
135
+ UdpWebSocketClient.DEFAULT_KEEPALIVE_INTERVAL_MS = 30000; // 30 sec
136
+ UdpWebSocketClient.DEFAULT_KEEPALIVE_TIMEOUT_MS = 60 * 60 * 1000; // 60 min
137
+ //# sourceMappingURL=udp-websocket-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"udp-websocket-client.js","sourceRoot":"","sources":["../../../src/udp-utilities/udp-websocket-client/udp-websocket-client.ts"],"names":[],"mappings":"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","sourcesContent":["export interface UdpWebSocketMessage {\n headers?: Record<string, any>;\n body?: any;\n}\n\nexport type UdpWsReceiveHandler = (msg: UdpWebSocketMessage) => void | Promise<void>;\nexport type UdpWsCloseHandler = (e: CloseEvent) => void | Promise<void>;\nexport type UdpWsErrorHandler = (e: Event) => void | Promise<void>;\nexport type UdpWsOpenHandler = () => void | Promise<void>;\n\nexport class UdpWebSocketClient {\n public static readonly DEFAULT_KEEPALIVE_INTERVAL_MS = 30_000; // 30 sec\n public static readonly DEFAULT_KEEPALIVE_TIMEOUT_MS = 60 * 60 * 1000; // 60 min\n\n private socket?: WebSocket;\n private keepAliveIntervalId?: number;\n private keepAliveTimeoutId?: number;\n\n private messageReceivedHandler?: UdpWsReceiveHandler;\n private closeHandler?: UdpWsCloseHandler\n private errorHandler?: UdpWsErrorHandler;\n private openHandler?: UdpWsOpenHandler;\n\n public get isConnected(): boolean {\n return this.socket?.readyState === WebSocket.OPEN;\n }\n\n public async connect(\n url: string,\n getAccessToken: () => Promise<string | void>,\n keepAliveIntervalMs: number = 0,\n keepAliveTimeoutMs: number = 0\n ) {\n if (!this.isWssUrl(url)) {\n throw new Error(\"Invalid WebSocket URL. Only ws and wss protocols are supported.\");\n }\n\n const accessToken = await getAccessToken();\n\n if (accessToken) {\n // Browsers don't support setting headers manually, they only allow setting the `Sec-WebSocket-Protocol` header (secondary protocol header)\n this.socket = new WebSocket(url, accessToken);\n } else {\n this.socket = new WebSocket(url);\n }\n\n // Wait for the socket to open or error\n await new Promise<void>((resolve, reject) => {\n const onOpen = () => {\n this.socket!.removeEventListener('open', onOpen);\n this.socket!.removeEventListener('error', onError);\n resolve();\n };\n\n const onError = (e: Event) => {\n this.socket!.removeEventListener('open', onOpen);\n this.socket!.removeEventListener('error', onError);\n reject(e);\n };\n\n this.socket!.addEventListener('open', onOpen);\n this.socket!.addEventListener('error', onError);\n });\n\n // Socket is now open, call the openHandler\n this.openHandler?.();\n\n // Assign socket events\n this.socket.onmessage = (e) => this.handleMessage(e);\n this.socket.onclose = (e) => this.handleClose(e);\n this.socket.onerror = (e) => this.handleError(e);\n\n // Start keepAliveTimer if configured\n if (keepAliveIntervalMs && keepAliveTimeoutMs) {\n this.startKeepAliveTimer(keepAliveIntervalMs, keepAliveTimeoutMs);\n }\n }\n\n public onMessageReceived(handler: UdpWsReceiveHandler) {\n this.messageReceivedHandler = handler;\n return this;\n }\n\n public onOpen(handler: UdpWsOpenHandler) {\n this.openHandler = handler;\n return this;\n }\n\n public onClose(handler: UdpWsCloseHandler) {\n this.closeHandler = handler;\n return this;\n }\n\n public onError(handler: UdpWsErrorHandler) {\n this.errorHandler = handler;\n return this;\n }\n\n public send(message: UdpWebSocketMessage) {\n if (!this.isConnected) {\n throw new Error(\"WebSocket is not connected.\");\n }\n\n const json = JSON.stringify(message);\n this.socket!.send(json);\n }\n\n public close() {\n if (this.socket) {\n this.socket.close();\n this.stopKeepAliveTimer();\n this.socket = undefined;\n }\n }\n\n // Event handlers\n protected handleMessage(event: MessageEvent) {\n try {\n const msg = JSON.parse(event.data) as UdpWebSocketMessage;\n this.messageReceivedHandler?.(msg);\n } catch (err) {\n console.error(\"Invalid UdpWebSocketMessage received:\", err)\n }\n }\n\n protected handleClose(event: CloseEvent) {\n this.closeHandler?.(event);\n this.close();\n }\n\n protected handleError(event: Event) {\n this.errorHandler?.(event);\n console.error(\"UdpWebSocket error:\", event);\n }\n\n // KeepAlive functions\n protected startKeepAliveTimer(intervalMs: number, timeoutMs: number) {\n this.stopKeepAliveTimer();\n\n // TODO: Check that this is interval not timeout param\n this.keepAliveIntervalId = window.setInterval(() => {\n this.sendKeepAlivePing();\n }, intervalMs);\n\n // Autoclose after timeout reached\n this.keepAliveTimeoutId = window.setTimeout(() => {\n this.close();\n }, timeoutMs);\n }\n\n protected stopKeepAliveTimer() {\n if (this.keepAliveIntervalId) clearInterval(this.keepAliveIntervalId);\n if (this.keepAliveTimeoutId) clearTimeout(this.keepAliveTimeoutId);\n\n this.keepAliveIntervalId = undefined;\n this.keepAliveTimeoutId = undefined;\n }\n\n protected sendKeepAlivePing() {\n const pingPacket: UdpWebSocketMessage = {\n headers: {\n type: \"KeepAlive\",\n timestamp: Date.now()\n },\n };\n\n try {\n this.send(pingPacket);\n } catch (err) {\n console.error(\"KeepAlive ping failed to send:\", err);\n }\n }\n\n // Util functions\n protected isWssUrl(url: string): boolean {\n return /^wss?:\\/\\//.test(url);\n }\n}\n"]}
@@ -68,7 +68,144 @@ function useMatchBreakpoint(breakpointKey) {
68
68
  return mediaQueryList.matches;
69
69
  }
70
70
 
71
- export { apiMutate, getMergedConfig, useMatchBreakpoint };
71
+ class UdpWebSocketClient {
72
+ get isConnected() {
73
+ var _a;
74
+ return ((_a = this.socket) === null || _a === void 0 ? void 0 : _a.readyState) === WebSocket.OPEN;
75
+ }
76
+ async connect(url, getAccessToken, keepAliveIntervalMs = 0, keepAliveTimeoutMs = 0) {
77
+ var _a;
78
+ if (!this.isWssUrl(url)) {
79
+ throw new Error("Invalid WebSocket URL. Only ws and wss protocols are supported.");
80
+ }
81
+ const accessToken = await getAccessToken();
82
+ if (accessToken) {
83
+ // Browsers don't support setting headers manually, they only allow setting the `Sec-WebSocket-Protocol` header (secondary protocol header)
84
+ this.socket = new WebSocket(url, accessToken);
85
+ }
86
+ else {
87
+ this.socket = new WebSocket(url);
88
+ }
89
+ // Wait for the socket to open or error
90
+ await new Promise((resolve, reject) => {
91
+ const onOpen = () => {
92
+ this.socket.removeEventListener('open', onOpen);
93
+ this.socket.removeEventListener('error', onError);
94
+ resolve();
95
+ };
96
+ const onError = (e) => {
97
+ this.socket.removeEventListener('open', onOpen);
98
+ this.socket.removeEventListener('error', onError);
99
+ reject(e);
100
+ };
101
+ this.socket.addEventListener('open', onOpen);
102
+ this.socket.addEventListener('error', onError);
103
+ });
104
+ // Socket is now open, call the openHandler
105
+ (_a = this.openHandler) === null || _a === void 0 ? void 0 : _a.call(this);
106
+ // Assign socket events
107
+ this.socket.onmessage = (e) => this.handleMessage(e);
108
+ this.socket.onclose = (e) => this.handleClose(e);
109
+ this.socket.onerror = (e) => this.handleError(e);
110
+ // Start keepAliveTimer if configured
111
+ if (keepAliveIntervalMs && keepAliveTimeoutMs) {
112
+ this.startKeepAliveTimer(keepAliveIntervalMs, keepAliveTimeoutMs);
113
+ }
114
+ }
115
+ onMessageReceived(handler) {
116
+ this.messageReceivedHandler = handler;
117
+ return this;
118
+ }
119
+ onOpen(handler) {
120
+ this.openHandler = handler;
121
+ return this;
122
+ }
123
+ onClose(handler) {
124
+ this.closeHandler = handler;
125
+ return this;
126
+ }
127
+ onError(handler) {
128
+ this.errorHandler = handler;
129
+ return this;
130
+ }
131
+ send(message) {
132
+ if (!this.isConnected) {
133
+ throw new Error("WebSocket is not connected.");
134
+ }
135
+ const json = JSON.stringify(message);
136
+ this.socket.send(json);
137
+ }
138
+ close() {
139
+ if (this.socket) {
140
+ this.socket.close();
141
+ this.stopKeepAliveTimer();
142
+ this.socket = undefined;
143
+ }
144
+ }
145
+ // Event handlers
146
+ handleMessage(event) {
147
+ var _a;
148
+ try {
149
+ const msg = JSON.parse(event.data);
150
+ (_a = this.messageReceivedHandler) === null || _a === void 0 ? void 0 : _a.call(this, msg);
151
+ }
152
+ catch (err) {
153
+ console.error("Invalid UdpWebSocketMessage received:", err);
154
+ }
155
+ }
156
+ handleClose(event) {
157
+ var _a;
158
+ (_a = this.closeHandler) === null || _a === void 0 ? void 0 : _a.call(this, event);
159
+ this.close();
160
+ }
161
+ handleError(event) {
162
+ var _a;
163
+ (_a = this.errorHandler) === null || _a === void 0 ? void 0 : _a.call(this, event);
164
+ console.error("UdpWebSocket error:", event);
165
+ }
166
+ // KeepAlive functions
167
+ startKeepAliveTimer(intervalMs, timeoutMs) {
168
+ this.stopKeepAliveTimer();
169
+ // TODO: Check that this is interval not timeout param
170
+ this.keepAliveIntervalId = window.setInterval(() => {
171
+ this.sendKeepAlivePing();
172
+ }, intervalMs);
173
+ // Autoclose after timeout reached
174
+ this.keepAliveTimeoutId = window.setTimeout(() => {
175
+ this.close();
176
+ }, timeoutMs);
177
+ }
178
+ stopKeepAliveTimer() {
179
+ if (this.keepAliveIntervalId)
180
+ clearInterval(this.keepAliveIntervalId);
181
+ if (this.keepAliveTimeoutId)
182
+ clearTimeout(this.keepAliveTimeoutId);
183
+ this.keepAliveIntervalId = undefined;
184
+ this.keepAliveTimeoutId = undefined;
185
+ }
186
+ sendKeepAlivePing() {
187
+ const pingPacket = {
188
+ headers: {
189
+ type: "KeepAlive",
190
+ timestamp: Date.now()
191
+ },
192
+ };
193
+ try {
194
+ this.send(pingPacket);
195
+ }
196
+ catch (err) {
197
+ console.error("KeepAlive ping failed to send:", err);
198
+ }
199
+ }
200
+ // Util functions
201
+ isWssUrl(url) {
202
+ return /^wss?:\/\//.test(url);
203
+ }
204
+ }
205
+ UdpWebSocketClient.DEFAULT_KEEPALIVE_INTERVAL_MS = 30000; // 30 sec
206
+ UdpWebSocketClient.DEFAULT_KEEPALIVE_TIMEOUT_MS = 60 * 60 * 1000; // 60 min
207
+
208
+ export { UdpWebSocketClient, apiMutate, getMergedConfig, useMatchBreakpoint };
72
209
  //# sourceMappingURL=index.js.map
73
210
 
74
211
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"file":"index.js","mappings":";;;;;;;AAgBA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;MAGa,eAAe,GAAG,CAAC,QAAgB,EAAE,MAAe,KAAY;AAC3E,IAAA,MAAM,OAAO,GAAG,CAAA,MAAM,aAAN,MAAM,KAAA,MAAA,GAAA,MAAA,GAAN,MAAM,CAAE,OAAO,IAAE,MAAA,CAAA,MAAA,CAAA,EAAA,EAAM,MAAM,CAAC,OAAO,IAAK,EAAE;AAC5D,IAAA,OAAO,CAAC,eAAe,GAAG,QAAQ;;AAGlC,IAAA,OAAY,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAA,MAAM,CAAE,EAAA,EAAA,OAAO,EAAG,CAAA;AAChC;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEO,MAAM,SAAS,GAAG,OACvB,OAAe,EACf,GAAW,EACX,MAAc,EACd,IAAS,KACP;IACF,MAAM,OAAO,GAAG,EAAE,GAAG,EAAE,CAAG,EAAA,OAAO,CAAI,CAAA,EAAA,GAAG,CAAE,CAAA,EAAE;IAC5C,OAAOA,KAAK,+CAAM,OAAO,CAAA,EAAK,MAAM,CAAK,EAAA,IAAI,EAAG;AAClD;;ACxEA;AACA,SAAS,mBAAmB,CAAC,QAAQ,EAAA;IACnC,OAAO,gBAAgB,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,gBAAgB,CAAC,QAAQ,CAAC;AAC9E;AAEO,MAAM,WAAW,GAAG;AACzB,IAAA,EAAE,EAAE,CAAe,YAAA,EAAA,mBAAmB,CAAC,qBAAqB,CAAC,CAAK,GAAA,CAAA;IAClE,EAAE,EAAE,CAAe,YAAA,EAAA,mBAAmB,CAAC,qBAAqB,CAAC,CAAA,oBAAA,EAAuB,mBAAmB,CAAC,qBAAqB,CAAC,CAAK,GAAA,CAAA;IACnI,EAAE,EAAE,CAAe,YAAA,EAAA,mBAAmB,CAAC,qBAAqB,CAAC,CAAA,oBAAA,EAAuB,mBAAmB,CAAC,qBAAqB,CAAC,CAAK,GAAA,CAAA;IACnI,EAAE,EAAE,CAAe,YAAA,EAAA,mBAAmB,CAAC,qBAAqB,CAAC,CAAA,oBAAA,EAAuB,mBAAmB,CAAC,qBAAqB,CAAC,CAAK,GAAA,CAAA;AACnI,IAAA,EAAE,EAAE,CAAe,YAAA,EAAA,mBAAmB,CAAC,qBAAqB,CAAC,CAAK,GAAA,CAAA;CACnE;;ACTK,SAAU,kBAAkB,CAAC,aAAuC,EAAA;IACxE,IAAI,OAAO,MAAM,KAAK,WAAW;QAAE,OAAO,KAAK,CAAC;AAEhD,IAAA,MAAM,KAAK,GAAG,WAAW,CAAC,aAAa,CAAC;IACxC,MAAM,cAAc,GAAG,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC;IAC/C,OAAO,cAAc,CAAC,OAAO;AAC/B;;;;","names":["Axios"],"sources":["src/udp-utilities/api-udp/apiMutate.ts","src/udp-utilities/layout/breakpoints/breakpoints.ts","src/udp-utilities/layout/breakpoints/useMatchBreakpoint.ts"],"sourcesContent":["\nimport Axios from 'axios';\n\n/**\n * @deprecated This component is deprecated and will be removed in a future version.\n * Use 'makeApiCall' instead\n */\n\ninterface Config {\n headers?: {\n [key: string]: string;\n };\n [key: string]: any;\n }\n\n\n// export const getAccessToken = async () => {\n// return 'eyJhbGciOiJSUzI1NiIsImtpZCI6Ik1Bc2V1MXplcmJDaVA0cW5UNUtkRlFjaFNpTHpiVDJieFdCVVBVXzYtNGMiLCJ0eXAiOiJKV1QifQ.eyJzdWIiOiI5YzI0MTNiZS1hNTZiLTQ5NzAtOWVmMC0wZTNmMDI4Y2E1YWEiLCJlbWFpbCI6ImdyZWdvcnlAcmVkd2Vya3Mub3JnIiwibmFtZSI6IkdyZWdvcnkgVGhvbWFzIiwiZ2l2ZW5fbmFtZSI6IkdyZWdvcnkiLCJmYW1pbHlfbmFtZSI6IlRob21hcyIsInVuaXR5VXNlcklkIjoiOGZlM2I1Y2UtNmE5NC00ZmY0LWIzNWMtYmUyNTk2ZWExMzgwIiwidGVuYW50c0xpc3QiOiJbe1wiVGVuYW50SWRcIjpcImY4NmE5YjdjLWJhYjAtNDI4MS04OWEyLTUyYjRjYWY4OWZhYlwiLFwiVGVuYW50TmFtZVwiOlwiVW5pdmVydXMgU29mdHdhcmUgSW5jXCIsXCJQcm9kdWN0c1wiOlszNiwzNywzNCwzNSwxLDMsNCw1LDYsNyw4LDksMTAsMTEsMTIsMTMsMTQsMTUsMTYsMTcsMTgsMTksMjAsMjEsMjIsMjMsMjQsMjUsMjYsMjcsMjgsMjksMiw0MSw1Ml0sXCJSb2xlc1wiOltcIjYyMzRiNzQwLWIyNmYtNDE4MS05Yjk1LTRjNDA2MzQ1MzhjMVwiXX0se1wiVGVuYW50SWRcIjpcIjk4ZjUwYTUxLTdjNjEtNDMxMC1iNWI0LTNhOWZlMDJjODEyM1wiLFwiVGVuYW50TmFtZVwiOlwiU21hcnRHcmlkQ0lTXCIsXCJQcm9kdWN0c1wiOlsxLDMsNCw1LDQxLDYsOCw3LDksMTEsMTAsMTUsMTYsMTQsMTcsMTgsMTksMjAsMjEsMjIsMjMsMjQsMjUsMjYsMTMsMTIsMjgsMjksMjcsMzBdLFwiUm9sZXNcIjpbXCI2MjM0Yjc0MC1iMjZmLTQxODEtOWI5NS00YzQwNjM0NTM4YzFcIl19XSIsInRpZCI6IjIxODg2NTI4LTM2MDItNGJmMi1hMzZiLTI5YjFkMTUyZTExYiIsImlzRm9yZ290UGFzc3dvcmQiOmZhbHNlLCJub25jZSI6IjQ3NDdkMTJhLWEzMGItNDRlMC1iNDllLTVmYmY0YjZhOTdmNiIsInNjcCI6ImFwaV9hY2Nlc3MiLCJhenAiOiJmYzUxNGZkOC01NGIzLTRmYWItYmRjOC1hZTdkY2Q4YzY1NzUiLCJ2ZXIiOiIxLjAiLCJpYXQiOjE2OTYzNTMzMTMsImF1ZCI6IjNmOTY2NDFmLTk0NDItNDUzMi1iNWJiLTdkYmM5Y2EzZjNhNSIsImV4cCI6MTY5NjM1NjkxMywiaXNzIjoiaHR0cHM6Ly91bml2ZXJ1c3VuaXR5ZGV2LmIyY2xvZ2luLmNvbS8yMTg4NjUyOC0zNjAyLTRiZjItYTM2Yi0yOWIxZDE1MmUxMWIvdjIuMC8iLCJuYmYiOjE2OTYzNTMzMTN9.Xcp8JSrF9mT3O3DSdqYmGRSAjo5Km4-XkLUDEuk3fXJnAPPF7vKtApSvA65iAlhqtyB4JY6idDrzWG5zgpyEvpTvc6Kvj6RjHXEkqMmsY6H1nFxAsIvfL72Sl8U4lBD9c4MOO1r5itfjsPkdZhV7ZtQi9xbFO0KTZmtLpET0hC0e8DA61uKAq2R5olfXi8pJThJGRRWleWFXwyatyjXIOfRpvuTfE5ls1zYSo62_7_FXOVAyAf-CrDLZFga8QYd4y5oncUAkbP4Lja0jDkHvvJhBRz67FePcWhJWo_6ofqGLRFBpFneduwgVgDMf6RY5mJa-5dlwDWE8YTqcuNMmlg'\n// };\n\n// export const getMergedConfig = (accessToken: string | null, config?: Config): Config => {\n// const headers = config?.headers ? { ...config.headers } : {};\n\n// headers.currentTenantId = headers.currentTenantId || \"f86a9b7c-bab0-4281-89a2-52b4caf89fab\"; // Your currentTenantId\n// if (accessToken) headers.Authorization = headers.Authorization || `Bearer ${accessToken}`;\n\n// return { ...config, headers };\n// };\n\n\n// export const apiMutate = async (\n// baseURL: string,\n// url: string,\n// config: Config,\n// data: any,\n// accessToken: string | null\n// ) => {\n// const fullURL = { url: `${baseURL}/${url}` };\n// const mergedConfig = getMergedConfig(accessToken, config);\n// return Axios({ ...fullURL, ...mergedConfig, ...data });\n// };\n\n\nexport const getMergedConfig = (tenantId: string, config?: Config): Config => {\n const headers = config?.headers ? { ...config.headers } : {};\n headers.currentTenantId = tenantId;\n //if (accessToken) headers.Authorization = headers.Authorization || `Bearer ${accessToken}`;\n\n return { ...config, headers };\n};\n\n// export const apiMutate = async (\n// baseURL: string,\n// url: string,\n// config: Config,\n// data: any,\n// accessToken: string | null,\n// tenantId: string // New tenantId parameter\n// ) => {\n// const fullURL = { url: `${baseURL}/${url}` };\n// const mergedConfig = getMergedConfig(tenantId, accessToken, config); // Pass the tenantId\n// return Axios({ ...fullURL, ...mergedConfig, ...data });\n// };\n\nexport const apiMutate = async (\n baseURL: string,\n url: string,\n config: Config,\n data: any\n) => {\n const fullURL = { url: `${baseURL}/${url}` };\n return Axios({ ...fullURL, ...config, ...data });\n};\n\n\n","// Helper function to get the value of a CSS variable from the :root\nfunction getCssVariableValue(variable) {\n return getComputedStyle(document.documentElement).getPropertyValue(variable);\n}\n\nexport const breakpoints = {\n xs: `(max-width: ${getCssVariableValue('--breakpoint-xs-max')}px)`,\n sm: `(min-width: ${getCssVariableValue('--breakpoint-sm-min')}px) and (max-width: ${getCssVariableValue('--breakpoint-sm-max')}px)`,\n md: `(min-width: ${getCssVariableValue('--breakpoint-md-min')}px) and (max-width: ${getCssVariableValue('--breakpoint-md-max')}px)`,\n lg: `(min-width: ${getCssVariableValue('--breakpoint-lg-min')}px) and (max-width: ${getCssVariableValue('--breakpoint-lg-max')}px)`,\n xl: `(min-width: ${getCssVariableValue('--breakpoint-xl-min')}px)`,\n};\n\n\n\n\n// export const breakpoints = {\n// xs: '(max-width: 599px)',\n// sm: '(min-width: 600px) and (max-width: 959px)',\n// md: '(min-width: 960px) and (max-width: 1279px)',\n// lg: '(min-width: 1280px) and (max-width: 1919px)',\n// xl: '(min-width: 1920px)',\n// };\n ","import { breakpoints } from './breakpoints';\n\nexport function useMatchBreakpoint(breakpointKey: keyof typeof breakpoints): boolean {\n if (typeof window === 'undefined') return false; // SSR or build-time rendering\n\n const query = breakpoints[breakpointKey];\n const mediaQueryList = window.matchMedia(query);\n return mediaQueryList.matches;\n}\n"],"version":3}
1
+ {"file":"index.js","mappings":"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","names":["Axios"],"sources":["src/udp-utilities/api-udp/apiMutate.ts","src/udp-utilities/layout/breakpoints/breakpoints.ts","src/udp-utilities/layout/breakpoints/useMatchBreakpoint.ts","src/udp-utilities/udp-websocket-client/udp-websocket-client.ts"],"sourcesContent":["\nimport Axios from 'axios';\n\n/**\n * @deprecated This component is deprecated and will be removed in a future version.\n * Use 'makeApiCall' instead\n */\n\ninterface Config {\n headers?: {\n [key: string]: string;\n };\n [key: string]: any;\n }\n\n\n// export const getAccessToken = async () => {\n// return 'eyJhbGciOiJSUzI1NiIsImtpZCI6Ik1Bc2V1MXplcmJDaVA0cW5UNUtkRlFjaFNpTHpiVDJieFdCVVBVXzYtNGMiLCJ0eXAiOiJKV1QifQ.eyJzdWIiOiI5YzI0MTNiZS1hNTZiLTQ5NzAtOWVmMC0wZTNmMDI4Y2E1YWEiLCJlbWFpbCI6ImdyZWdvcnlAcmVkd2Vya3Mub3JnIiwibmFtZSI6IkdyZWdvcnkgVGhvbWFzIiwiZ2l2ZW5fbmFtZSI6IkdyZWdvcnkiLCJmYW1pbHlfbmFtZSI6IlRob21hcyIsInVuaXR5VXNlcklkIjoiOGZlM2I1Y2UtNmE5NC00ZmY0LWIzNWMtYmUyNTk2ZWExMzgwIiwidGVuYW50c0xpc3QiOiJbe1wiVGVuYW50SWRcIjpcImY4NmE5YjdjLWJhYjAtNDI4MS04OWEyLTUyYjRjYWY4OWZhYlwiLFwiVGVuYW50TmFtZVwiOlwiVW5pdmVydXMgU29mdHdhcmUgSW5jXCIsXCJQcm9kdWN0c1wiOlszNiwzNywzNCwzNSwxLDMsNCw1LDYsNyw4LDksMTAsMTEsMTIsMTMsMTQsMTUsMTYsMTcsMTgsMTksMjAsMjEsMjIsMjMsMjQsMjUsMjYsMjcsMjgsMjksMiw0MSw1Ml0sXCJSb2xlc1wiOltcIjYyMzRiNzQwLWIyNmYtNDE4MS05Yjk1LTRjNDA2MzQ1MzhjMVwiXX0se1wiVGVuYW50SWRcIjpcIjk4ZjUwYTUxLTdjNjEtNDMxMC1iNWI0LTNhOWZlMDJjODEyM1wiLFwiVGVuYW50TmFtZVwiOlwiU21hcnRHcmlkQ0lTXCIsXCJQcm9kdWN0c1wiOlsxLDMsNCw1LDQxLDYsOCw3LDksMTEsMTAsMTUsMTYsMTQsMTcsMTgsMTksMjAsMjEsMjIsMjMsMjQsMjUsMjYsMTMsMTIsMjgsMjksMjcsMzBdLFwiUm9sZXNcIjpbXCI2MjM0Yjc0MC1iMjZmLTQxODEtOWI5NS00YzQwNjM0NTM4YzFcIl19XSIsInRpZCI6IjIxODg2NTI4LTM2MDItNGJmMi1hMzZiLTI5YjFkMTUyZTExYiIsImlzRm9yZ290UGFzc3dvcmQiOmZhbHNlLCJub25jZSI6IjQ3NDdkMTJhLWEzMGItNDRlMC1iNDllLTVmYmY0YjZhOTdmNiIsInNjcCI6ImFwaV9hY2Nlc3MiLCJhenAiOiJmYzUxNGZkOC01NGIzLTRmYWItYmRjOC1hZTdkY2Q4YzY1NzUiLCJ2ZXIiOiIxLjAiLCJpYXQiOjE2OTYzNTMzMTMsImF1ZCI6IjNmOTY2NDFmLTk0NDItNDUzMi1iNWJiLTdkYmM5Y2EzZjNhNSIsImV4cCI6MTY5NjM1NjkxMywiaXNzIjoiaHR0cHM6Ly91bml2ZXJ1c3VuaXR5ZGV2LmIyY2xvZ2luLmNvbS8yMTg4NjUyOC0zNjAyLTRiZjItYTM2Yi0yOWIxZDE1MmUxMWIvdjIuMC8iLCJuYmYiOjE2OTYzNTMzMTN9.Xcp8JSrF9mT3O3DSdqYmGRSAjo5Km4-XkLUDEuk3fXJnAPPF7vKtApSvA65iAlhqtyB4JY6idDrzWG5zgpyEvpTvc6Kvj6RjHXEkqMmsY6H1nFxAsIvfL72Sl8U4lBD9c4MOO1r5itfjsPkdZhV7ZtQi9xbFO0KTZmtLpET0hC0e8DA61uKAq2R5olfXi8pJThJGRRWleWFXwyatyjXIOfRpvuTfE5ls1zYSo62_7_FXOVAyAf-CrDLZFga8QYd4y5oncUAkbP4Lja0jDkHvvJhBRz67FePcWhJWo_6ofqGLRFBpFneduwgVgDMf6RY5mJa-5dlwDWE8YTqcuNMmlg'\n// };\n\n// export const getMergedConfig = (accessToken: string | null, config?: Config): Config => {\n// const headers = config?.headers ? { ...config.headers } : {};\n\n// headers.currentTenantId = headers.currentTenantId || \"f86a9b7c-bab0-4281-89a2-52b4caf89fab\"; // Your currentTenantId\n// if (accessToken) headers.Authorization = headers.Authorization || `Bearer ${accessToken}`;\n\n// return { ...config, headers };\n// };\n\n\n// export const apiMutate = async (\n// baseURL: string,\n// url: string,\n// config: Config,\n// data: any,\n// accessToken: string | null\n// ) => {\n// const fullURL = { url: `${baseURL}/${url}` };\n// const mergedConfig = getMergedConfig(accessToken, config);\n// return Axios({ ...fullURL, ...mergedConfig, ...data });\n// };\n\n\nexport const getMergedConfig = (tenantId: string, config?: Config): Config => {\n const headers = config?.headers ? { ...config.headers } : {};\n headers.currentTenantId = tenantId;\n //if (accessToken) headers.Authorization = headers.Authorization || `Bearer ${accessToken}`;\n\n return { ...config, headers };\n};\n\n// export const apiMutate = async (\n// baseURL: string,\n// url: string,\n// config: Config,\n// data: any,\n// accessToken: string | null,\n// tenantId: string // New tenantId parameter\n// ) => {\n// const fullURL = { url: `${baseURL}/${url}` };\n// const mergedConfig = getMergedConfig(tenantId, accessToken, config); // Pass the tenantId\n// return Axios({ ...fullURL, ...mergedConfig, ...data });\n// };\n\nexport const apiMutate = async (\n baseURL: string,\n url: string,\n config: Config,\n data: any\n) => {\n const fullURL = { url: `${baseURL}/${url}` };\n return Axios({ ...fullURL, ...config, ...data });\n};\n\n\n","// Helper function to get the value of a CSS variable from the :root\nfunction getCssVariableValue(variable) {\n return getComputedStyle(document.documentElement).getPropertyValue(variable);\n}\n\nexport const breakpoints = {\n xs: `(max-width: ${getCssVariableValue('--breakpoint-xs-max')}px)`,\n sm: `(min-width: ${getCssVariableValue('--breakpoint-sm-min')}px) and (max-width: ${getCssVariableValue('--breakpoint-sm-max')}px)`,\n md: `(min-width: ${getCssVariableValue('--breakpoint-md-min')}px) and (max-width: ${getCssVariableValue('--breakpoint-md-max')}px)`,\n lg: `(min-width: ${getCssVariableValue('--breakpoint-lg-min')}px) and (max-width: ${getCssVariableValue('--breakpoint-lg-max')}px)`,\n xl: `(min-width: ${getCssVariableValue('--breakpoint-xl-min')}px)`,\n};\n\n\n\n\n// export const breakpoints = {\n// xs: '(max-width: 599px)',\n// sm: '(min-width: 600px) and (max-width: 959px)',\n// md: '(min-width: 960px) and (max-width: 1279px)',\n// lg: '(min-width: 1280px) and (max-width: 1919px)',\n// xl: '(min-width: 1920px)',\n// };\n ","import { breakpoints } from './breakpoints';\n\nexport function useMatchBreakpoint(breakpointKey: keyof typeof breakpoints): boolean {\n if (typeof window === 'undefined') return false; // SSR or build-time rendering\n\n const query = breakpoints[breakpointKey];\n const mediaQueryList = window.matchMedia(query);\n return mediaQueryList.matches;\n}\n","export interface UdpWebSocketMessage {\n headers?: Record<string, any>;\n body?: any;\n}\n\nexport type UdpWsReceiveHandler = (msg: UdpWebSocketMessage) => void | Promise<void>;\nexport type UdpWsCloseHandler = (e: CloseEvent) => void | Promise<void>;\nexport type UdpWsErrorHandler = (e: Event) => void | Promise<void>;\nexport type UdpWsOpenHandler = () => void | Promise<void>;\n\nexport class UdpWebSocketClient {\n public static readonly DEFAULT_KEEPALIVE_INTERVAL_MS = 30_000; // 30 sec\n public static readonly DEFAULT_KEEPALIVE_TIMEOUT_MS = 60 * 60 * 1000; // 60 min\n\n private socket?: WebSocket;\n private keepAliveIntervalId?: number;\n private keepAliveTimeoutId?: number;\n\n private messageReceivedHandler?: UdpWsReceiveHandler;\n private closeHandler?: UdpWsCloseHandler\n private errorHandler?: UdpWsErrorHandler;\n private openHandler?: UdpWsOpenHandler;\n\n public get isConnected(): boolean {\n return this.socket?.readyState === WebSocket.OPEN;\n }\n\n public async connect(\n url: string,\n getAccessToken: () => Promise<string | void>,\n keepAliveIntervalMs: number = 0,\n keepAliveTimeoutMs: number = 0\n ) {\n if (!this.isWssUrl(url)) {\n throw new Error(\"Invalid WebSocket URL. Only ws and wss protocols are supported.\");\n }\n\n const accessToken = await getAccessToken();\n\n if (accessToken) {\n // Browsers don't support setting headers manually, they only allow setting the `Sec-WebSocket-Protocol` header (secondary protocol header)\n this.socket = new WebSocket(url, accessToken);\n } else {\n this.socket = new WebSocket(url);\n }\n\n // Wait for the socket to open or error\n await new Promise<void>((resolve, reject) => {\n const onOpen = () => {\n this.socket!.removeEventListener('open', onOpen);\n this.socket!.removeEventListener('error', onError);\n resolve();\n };\n\n const onError = (e: Event) => {\n this.socket!.removeEventListener('open', onOpen);\n this.socket!.removeEventListener('error', onError);\n reject(e);\n };\n\n this.socket!.addEventListener('open', onOpen);\n this.socket!.addEventListener('error', onError);\n });\n\n // Socket is now open, call the openHandler\n this.openHandler?.();\n\n // Assign socket events\n this.socket.onmessage = (e) => this.handleMessage(e);\n this.socket.onclose = (e) => this.handleClose(e);\n this.socket.onerror = (e) => this.handleError(e);\n\n // Start keepAliveTimer if configured\n if (keepAliveIntervalMs && keepAliveTimeoutMs) {\n this.startKeepAliveTimer(keepAliveIntervalMs, keepAliveTimeoutMs);\n }\n }\n\n public onMessageReceived(handler: UdpWsReceiveHandler) {\n this.messageReceivedHandler = handler;\n return this;\n }\n\n public onOpen(handler: UdpWsOpenHandler) {\n this.openHandler = handler;\n return this;\n }\n\n public onClose(handler: UdpWsCloseHandler) {\n this.closeHandler = handler;\n return this;\n }\n\n public onError(handler: UdpWsErrorHandler) {\n this.errorHandler = handler;\n return this;\n }\n\n public send(message: UdpWebSocketMessage) {\n if (!this.isConnected) {\n throw new Error(\"WebSocket is not connected.\");\n }\n\n const json = JSON.stringify(message);\n this.socket!.send(json);\n }\n\n public close() {\n if (this.socket) {\n this.socket.close();\n this.stopKeepAliveTimer();\n this.socket = undefined;\n }\n }\n\n // Event handlers\n protected handleMessage(event: MessageEvent) {\n try {\n const msg = JSON.parse(event.data) as UdpWebSocketMessage;\n this.messageReceivedHandler?.(msg);\n } catch (err) {\n console.error(\"Invalid UdpWebSocketMessage received:\", err)\n }\n }\n\n protected handleClose(event: CloseEvent) {\n this.closeHandler?.(event);\n this.close();\n }\n\n protected handleError(event: Event) {\n this.errorHandler?.(event);\n console.error(\"UdpWebSocket error:\", event);\n }\n\n // KeepAlive functions\n protected startKeepAliveTimer(intervalMs: number, timeoutMs: number) {\n this.stopKeepAliveTimer();\n\n // TODO: Check that this is interval not timeout param\n this.keepAliveIntervalId = window.setInterval(() => {\n this.sendKeepAlivePing();\n }, intervalMs);\n\n // Autoclose after timeout reached\n this.keepAliveTimeoutId = window.setTimeout(() => {\n this.close();\n }, timeoutMs);\n }\n\n protected stopKeepAliveTimer() {\n if (this.keepAliveIntervalId) clearInterval(this.keepAliveIntervalId);\n if (this.keepAliveTimeoutId) clearTimeout(this.keepAliveTimeoutId);\n\n this.keepAliveIntervalId = undefined;\n this.keepAliveTimeoutId = undefined;\n }\n\n protected sendKeepAlivePing() {\n const pingPacket: UdpWebSocketMessage = {\n headers: {\n type: \"KeepAlive\",\n timestamp: Date.now()\n },\n };\n\n try {\n this.send(pingPacket);\n } catch (err) {\n console.error(\"KeepAlive ping failed to send:\", err);\n }\n }\n\n // Util functions\n protected isWssUrl(url: string): boolean {\n return /^wss?:\\/\\//.test(url);\n }\n}\n"],"version":3}