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

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.
@@ -85,6 +85,143 @@ function useMatchBreakpoint(breakpointKey) {
85
85
  return mediaQueryList.matches;
86
86
  }
87
87
 
88
+ class UdpWebSocketClient {
89
+ get isConnected() {
90
+ var _a;
91
+ return ((_a = this.socket) === null || _a === void 0 ? void 0 : _a.readyState) === WebSocket.OPEN;
92
+ }
93
+ async connect(url, getAccessToken, keepAliveIntervalMs = 0, keepAliveTimeoutMs = 0) {
94
+ var _a;
95
+ if (!this.isWssUrl(url)) {
96
+ throw new Error("Invalid WebSocket URL. Only ws and wss protocols are supported.");
97
+ }
98
+ const accessToken = await getAccessToken();
99
+ if (accessToken) {
100
+ // Browsers don't support setting headers manually, they only allow setting the `Sec-WebSocket-Protocol` header (secondary protocol header)
101
+ this.socket = new WebSocket(url, accessToken);
102
+ }
103
+ else {
104
+ this.socket = new WebSocket(url);
105
+ }
106
+ // Wait for the socket to open or error
107
+ await new Promise((resolve, reject) => {
108
+ const onOpen = () => {
109
+ this.socket.removeEventListener('open', onOpen);
110
+ this.socket.removeEventListener('error', onError);
111
+ resolve();
112
+ };
113
+ const onError = (e) => {
114
+ this.socket.removeEventListener('open', onOpen);
115
+ this.socket.removeEventListener('error', onError);
116
+ reject(e);
117
+ };
118
+ this.socket.addEventListener('open', onOpen);
119
+ this.socket.addEventListener('error', onError);
120
+ });
121
+ // Socket is now open, call the openHandler
122
+ (_a = this.openHandler) === null || _a === void 0 ? void 0 : _a.call(this);
123
+ // Assign socket events
124
+ this.socket.onmessage = (e) => this.handleMessage(e);
125
+ this.socket.onclose = (e) => this.handleClose(e);
126
+ this.socket.onerror = (e) => this.handleError(e);
127
+ // Start keepAliveTimer if configured
128
+ if (keepAliveIntervalMs && keepAliveTimeoutMs) {
129
+ this.startKeepAliveTimer(keepAliveIntervalMs, keepAliveTimeoutMs);
130
+ }
131
+ }
132
+ onMessageReceived(handler) {
133
+ this.messageReceivedHandler = handler;
134
+ return this;
135
+ }
136
+ onOpen(handler) {
137
+ this.openHandler = handler;
138
+ return this;
139
+ }
140
+ onClose(handler) {
141
+ this.closeHandler = handler;
142
+ return this;
143
+ }
144
+ onError(handler) {
145
+ this.errorHandler = handler;
146
+ return this;
147
+ }
148
+ send(message) {
149
+ if (!this.isConnected) {
150
+ throw new Error("WebSocket is not connected.");
151
+ }
152
+ const json = JSON.stringify(message);
153
+ this.socket.send(json);
154
+ }
155
+ close() {
156
+ if (this.socket) {
157
+ this.socket.close();
158
+ this.stopKeepAliveTimer();
159
+ this.socket = undefined;
160
+ }
161
+ }
162
+ // Event handlers
163
+ handleMessage(event) {
164
+ var _a;
165
+ try {
166
+ const msg = JSON.parse(event.data);
167
+ (_a = this.messageReceivedHandler) === null || _a === void 0 ? void 0 : _a.call(this, msg);
168
+ }
169
+ catch (err) {
170
+ console.error("Invalid UdpWebSocketMessage received:", err);
171
+ }
172
+ }
173
+ handleClose(event) {
174
+ var _a;
175
+ (_a = this.closeHandler) === null || _a === void 0 ? void 0 : _a.call(this, event);
176
+ this.close();
177
+ }
178
+ handleError(event) {
179
+ var _a;
180
+ (_a = this.errorHandler) === null || _a === void 0 ? void 0 : _a.call(this, event);
181
+ console.error("UdpWebSocket error:", event);
182
+ }
183
+ // KeepAlive functions
184
+ startKeepAliveTimer(intervalMs, timeoutMs) {
185
+ this.stopKeepAliveTimer();
186
+ // TODO: Check that this is interval not timeout param
187
+ this.keepAliveIntervalId = window.setInterval(() => {
188
+ this.sendKeepAlivePing();
189
+ }, intervalMs);
190
+ // Autoclose after timeout reached
191
+ this.keepAliveTimeoutId = window.setTimeout(() => {
192
+ this.close();
193
+ }, timeoutMs);
194
+ }
195
+ stopKeepAliveTimer() {
196
+ if (this.keepAliveIntervalId)
197
+ clearInterval(this.keepAliveIntervalId);
198
+ if (this.keepAliveTimeoutId)
199
+ clearTimeout(this.keepAliveTimeoutId);
200
+ this.keepAliveIntervalId = undefined;
201
+ this.keepAliveTimeoutId = undefined;
202
+ }
203
+ sendKeepAlivePing() {
204
+ const pingPacket = {
205
+ headers: {
206
+ type: "KeepAlive",
207
+ timestamp: Date.now()
208
+ },
209
+ };
210
+ try {
211
+ this.send(pingPacket);
212
+ }
213
+ catch (err) {
214
+ console.error("KeepAlive ping failed to send:", err);
215
+ }
216
+ }
217
+ // Util functions
218
+ isWssUrl(url) {
219
+ return /^wss?:\/\//.test(url);
220
+ }
221
+ }
222
+ UdpWebSocketClient.DEFAULT_KEEPALIVE_INTERVAL_MS = 30000; // 30 sec
223
+ UdpWebSocketClient.DEFAULT_KEEPALIVE_TIMEOUT_MS = 60 * 60 * 1000; // 60 min
224
+
88
225
  exports.convertToAgGridColumns = transformSearchData.convertToAgGridColumns;
89
226
  exports.createStructuredQuery = transformSearchData.createStructuredQuery;
90
227
  exports.defaultPayload = transformSearchData.defaultPayload;
@@ -108,6 +245,7 @@ Object.defineProperty(exports, "SqlFilterOperators", {
108
245
  get: function () { return SearchBuilder.SearchOperators; }
109
246
  });
110
247
  exports.ConfigService = configService.ConfigService;
248
+ exports.UdpWebSocketClient = UdpWebSocketClient;
111
249
  exports.apiMutate = apiMutate;
112
250
  exports.getMergedConfig = getMergedConfig;
113
251
  exports.useMatchBreakpoint = useMatchBreakpoint;
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs.js","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"],"names":["Axios"],"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,sBAAK,+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;AAKD;AACA;AACA;AACA;AACA;AACA;AACA;;ACpBM,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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.cjs.js","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"],"names":["Axios"],"mappings":"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"}
@@ -6,5 +6,6 @@ export { SearchBuilder, SearchUtilities, LogicalSearchOperator, SearchGroupingTy
6
6
  export * from './store/catalog-store';
7
7
  export * from './udp-utilities/api-config';
8
8
  export { useMatchBreakpoint } from './udp-utilities/layout/breakpoints/useMatchBreakpoint';
9
+ export * from './udp-utilities/udp-websocket-client/udp-websocket-client';
9
10
  // export { initializeUrls } from './udp-utilities/api-udp/apiUtils'
10
11
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,mCAAmC,CAAA;AACjD,cAAc,6CAA6C,CAAA;AAC3D,cAAc,0DAA0D,CAAA;AACxE,OAAO,EACL,aAAa,EACb,eAAe,EACf,qBAAqB,EACrB,kBAAkB,EAClB,eAAe,IAAI,kBAAkB,EACtC,MAAM,wBAAwB,CAAA;AAQ/B,cAAc,uBAAuB,CAAA;AACrC,cAAc,4BAA4B,CAAA;AAC1C,OAAO,EAAE,kBAAkB,EAAE,MAAM,uDAAuD,CAAA;AAE1F,oEAAoE","sourcesContent":["export * from './components';\nexport * from './udp-utilities/api-udp/apiMutate'\nexport * from './udp-utilities/grid/convertToAgGridColumns'\nexport * from './udp-utilities/grid/data-converters/transformSearchData'\nexport {\n SearchBuilder,\n SearchUtilities,\n LogicalSearchOperator,\n SearchGroupingType,\n SearchOperators as SqlFilterOperators\n} from './udp-utilities/search'\nexport type {\n Search as SearchInterface,\n SearchFilters,\n SearchFilterGroups,\n GroupOperation,\n OrderElement\n} from './udp-utilities/search'\nexport * from './store/catalog-store'\nexport * from './udp-utilities/api-config'\nexport { useMatchBreakpoint } from './udp-utilities/layout/breakpoints/useMatchBreakpoint'\n\n// export { initializeUrls } from './udp-utilities/api-udp/apiUtils'\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,mCAAmC,CAAA;AACjD,cAAc,6CAA6C,CAAA;AAC3D,cAAc,0DAA0D,CAAA;AACxE,OAAO,EACL,aAAa,EACb,eAAe,EACf,qBAAqB,EACrB,kBAAkB,EAClB,eAAe,IAAI,kBAAkB,EACtC,MAAM,wBAAwB,CAAA;AAQ/B,cAAc,uBAAuB,CAAA;AACrC,cAAc,4BAA4B,CAAA;AAC1C,OAAO,EAAE,kBAAkB,EAAE,MAAM,uDAAuD,CAAA;AAC1F,cAAc,2DAA2D,CAAC;AAE1E,oEAAoE","sourcesContent":["export * from './components';\nexport * from './udp-utilities/api-udp/apiMutate'\nexport * from './udp-utilities/grid/convertToAgGridColumns'\nexport * from './udp-utilities/grid/data-converters/transformSearchData'\nexport {\n SearchBuilder,\n SearchUtilities,\n LogicalSearchOperator,\n SearchGroupingType,\n SearchOperators as SqlFilterOperators\n} from './udp-utilities/search'\nexport type {\n Search as SearchInterface,\n SearchFilters,\n SearchFilterGroups,\n GroupOperation,\n OrderElement\n} from './udp-utilities/search'\nexport * from './store/catalog-store'\nexport * from './udp-utilities/api-config'\nexport { useMatchBreakpoint } from './udp-utilities/layout/breakpoints/useMatchBreakpoint'\nexport * from './udp-utilities/udp-websocket-client/udp-websocket-client';\n\n// export { initializeUrls } from './udp-utilities/api-udp/apiUtils'\n"]}
@@ -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}
package/dist/docs.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "timestamp": "2026-01-27T22:18:11",
2
+ "timestamp": "2026-01-28T18:48:16",
3
3
  "compiler": {
4
4
  "name": "@stencil/core",
5
5
  "version": "4.38.2",
package/dist/esm/index.js CHANGED
@@ -79,5 +79,142 @@ function useMatchBreakpoint(breakpointKey) {
79
79
  return mediaQueryList.matches;
80
80
  }
81
81
 
82
- export { apiMutate, getMergedConfig, useMatchBreakpoint };
82
+ class UdpWebSocketClient {
83
+ get isConnected() {
84
+ var _a;
85
+ return ((_a = this.socket) === null || _a === void 0 ? void 0 : _a.readyState) === WebSocket.OPEN;
86
+ }
87
+ async connect(url, getAccessToken, keepAliveIntervalMs = 0, keepAliveTimeoutMs = 0) {
88
+ var _a;
89
+ if (!this.isWssUrl(url)) {
90
+ throw new Error("Invalid WebSocket URL. Only ws and wss protocols are supported.");
91
+ }
92
+ const accessToken = await getAccessToken();
93
+ if (accessToken) {
94
+ // Browsers don't support setting headers manually, they only allow setting the `Sec-WebSocket-Protocol` header (secondary protocol header)
95
+ this.socket = new WebSocket(url, accessToken);
96
+ }
97
+ else {
98
+ this.socket = new WebSocket(url);
99
+ }
100
+ // Wait for the socket to open or error
101
+ await new Promise((resolve, reject) => {
102
+ const onOpen = () => {
103
+ this.socket.removeEventListener('open', onOpen);
104
+ this.socket.removeEventListener('error', onError);
105
+ resolve();
106
+ };
107
+ const onError = (e) => {
108
+ this.socket.removeEventListener('open', onOpen);
109
+ this.socket.removeEventListener('error', onError);
110
+ reject(e);
111
+ };
112
+ this.socket.addEventListener('open', onOpen);
113
+ this.socket.addEventListener('error', onError);
114
+ });
115
+ // Socket is now open, call the openHandler
116
+ (_a = this.openHandler) === null || _a === void 0 ? void 0 : _a.call(this);
117
+ // Assign socket events
118
+ this.socket.onmessage = (e) => this.handleMessage(e);
119
+ this.socket.onclose = (e) => this.handleClose(e);
120
+ this.socket.onerror = (e) => this.handleError(e);
121
+ // Start keepAliveTimer if configured
122
+ if (keepAliveIntervalMs && keepAliveTimeoutMs) {
123
+ this.startKeepAliveTimer(keepAliveIntervalMs, keepAliveTimeoutMs);
124
+ }
125
+ }
126
+ onMessageReceived(handler) {
127
+ this.messageReceivedHandler = handler;
128
+ return this;
129
+ }
130
+ onOpen(handler) {
131
+ this.openHandler = handler;
132
+ return this;
133
+ }
134
+ onClose(handler) {
135
+ this.closeHandler = handler;
136
+ return this;
137
+ }
138
+ onError(handler) {
139
+ this.errorHandler = handler;
140
+ return this;
141
+ }
142
+ send(message) {
143
+ if (!this.isConnected) {
144
+ throw new Error("WebSocket is not connected.");
145
+ }
146
+ const json = JSON.stringify(message);
147
+ this.socket.send(json);
148
+ }
149
+ close() {
150
+ if (this.socket) {
151
+ this.socket.close();
152
+ this.stopKeepAliveTimer();
153
+ this.socket = undefined;
154
+ }
155
+ }
156
+ // Event handlers
157
+ handleMessage(event) {
158
+ var _a;
159
+ try {
160
+ const msg = JSON.parse(event.data);
161
+ (_a = this.messageReceivedHandler) === null || _a === void 0 ? void 0 : _a.call(this, msg);
162
+ }
163
+ catch (err) {
164
+ console.error("Invalid UdpWebSocketMessage received:", err);
165
+ }
166
+ }
167
+ handleClose(event) {
168
+ var _a;
169
+ (_a = this.closeHandler) === null || _a === void 0 ? void 0 : _a.call(this, event);
170
+ this.close();
171
+ }
172
+ handleError(event) {
173
+ var _a;
174
+ (_a = this.errorHandler) === null || _a === void 0 ? void 0 : _a.call(this, event);
175
+ console.error("UdpWebSocket error:", event);
176
+ }
177
+ // KeepAlive functions
178
+ startKeepAliveTimer(intervalMs, timeoutMs) {
179
+ this.stopKeepAliveTimer();
180
+ // TODO: Check that this is interval not timeout param
181
+ this.keepAliveIntervalId = window.setInterval(() => {
182
+ this.sendKeepAlivePing();
183
+ }, intervalMs);
184
+ // Autoclose after timeout reached
185
+ this.keepAliveTimeoutId = window.setTimeout(() => {
186
+ this.close();
187
+ }, timeoutMs);
188
+ }
189
+ stopKeepAliveTimer() {
190
+ if (this.keepAliveIntervalId)
191
+ clearInterval(this.keepAliveIntervalId);
192
+ if (this.keepAliveTimeoutId)
193
+ clearTimeout(this.keepAliveTimeoutId);
194
+ this.keepAliveIntervalId = undefined;
195
+ this.keepAliveTimeoutId = undefined;
196
+ }
197
+ sendKeepAlivePing() {
198
+ const pingPacket = {
199
+ headers: {
200
+ type: "KeepAlive",
201
+ timestamp: Date.now()
202
+ },
203
+ };
204
+ try {
205
+ this.send(pingPacket);
206
+ }
207
+ catch (err) {
208
+ console.error("KeepAlive ping failed to send:", err);
209
+ }
210
+ }
211
+ // Util functions
212
+ isWssUrl(url) {
213
+ return /^wss?:\/\//.test(url);
214
+ }
215
+ }
216
+ UdpWebSocketClient.DEFAULT_KEEPALIVE_INTERVAL_MS = 30000; // 30 sec
217
+ UdpWebSocketClient.DEFAULT_KEEPALIVE_TIMEOUT_MS = 60 * 60 * 1000; // 60 min
218
+
219
+ export { UdpWebSocketClient, apiMutate, getMergedConfig, useMatchBreakpoint };
83
220
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","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"],"names":["Axios"],"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;AAKD;AACA;AACA;AACA;AACA;AACA;AACA;;ACpBM,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;;;;"}
1
+ {"version":3,"file":"index.js","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"],"names":["Axios"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import e from"axios";export{c as convertToAgGridColumns,a as createStructuredQuery,d as defaultPayload,b as demoMSSearchData,t as transformSearchData}from"./transformSearchData-DBjFnXu6.js";export{l as loadCatalogData,o as onChange,s as state}from"./catalog-store-BhgNAUY6.js";export{L as LogicalSearchOperator,S as SearchBuilder,b as SearchGroupingType,a as SearchUtilities,c as SqlFilterOperators}from"./SearchBuilder-CvKqGlUH.js";export{C as ConfigService}from"./configService-BqLfkVKh.js";import"@stencil/store";import"./apiUtils-cUHs50y0.js";import"deep-equal";import"./makeApiCall-B-daVutk.js";import"./tenantUtils-Basdb1b1.js";const r=(t,a)=>{const e=(a===null||a===void 0?void 0:a.headers)?Object.assign({},a.headers):{};e.currentTenantId=t;return Object.assign(Object.assign({},a),{headers:e})};const i=async(t,a,r,o)=>{const i={url:`${t}/${a}`};return e(Object.assign(Object.assign(Object.assign({},i),r),o))};function n(t){return getComputedStyle(document.documentElement).getPropertyValue(t)}const m={xs:`(max-width: ${n("--breakpoint-xs-max")}px)`,sm:`(min-width: ${n("--breakpoint-sm-min")}px) and (max-width: ${n("--breakpoint-sm-max")}px)`,md:`(min-width: ${n("--breakpoint-md-min")}px) and (max-width: ${n("--breakpoint-md-max")}px)`,lg:`(min-width: ${n("--breakpoint-lg-min")}px) and (max-width: ${n("--breakpoint-lg-max")}px)`,xl:`(min-width: ${n("--breakpoint-xl-min")}px)`};function p(t){if(typeof window==="undefined")return false;const a=m[t];const e=window.matchMedia(a);return e.matches}export{i as apiMutate,r as getMergedConfig,p as useMatchBreakpoint};
1
+ import e from"axios";export{c as convertToAgGridColumns,a as createStructuredQuery,d as defaultPayload,b as demoMSSearchData,t as transformSearchData}from"./transformSearchData-DBjFnXu6.js";export{l as loadCatalogData,o as onChange,s as state}from"./catalog-store-BhgNAUY6.js";export{L as LogicalSearchOperator,S as SearchBuilder,b as SearchGroupingType,a as SearchUtilities,c as SqlFilterOperators}from"./SearchBuilder-CvKqGlUH.js";export{C as ConfigService}from"./configService-BqLfkVKh.js";import"@stencil/store";import"./apiUtils-cUHs50y0.js";import"deep-equal";import"./makeApiCall-B-daVutk.js";import"./tenantUtils-Basdb1b1.js";const i=(t,e)=>{const i=(e===null||e===void 0?void 0:e.headers)?Object.assign({},e.headers):{};i.currentTenantId=t;return Object.assign(Object.assign({},e),{headers:i})};const r=async(t,i,s,o)=>{const r={url:`${t}/${i}`};return e(Object.assign(Object.assign(Object.assign({},r),s),o))};function n(t){return getComputedStyle(document.documentElement).getPropertyValue(t)}const h={xs:`(max-width: ${n("--breakpoint-xs-max")}px)`,sm:`(min-width: ${n("--breakpoint-sm-min")}px) and (max-width: ${n("--breakpoint-sm-max")}px)`,md:`(min-width: ${n("--breakpoint-md-min")}px) and (max-width: ${n("--breakpoint-md-max")}px)`,lg:`(min-width: ${n("--breakpoint-lg-min")}px) and (max-width: ${n("--breakpoint-lg-max")}px)`,xl:`(min-width: ${n("--breakpoint-xl-min")}px)`};function p(t){if(typeof window==="undefined")return false;const e=h[t];const i=window.matchMedia(e);return i.matches}class m{get isConnected(){var t;return((t=this.socket)===null||t===void 0?void 0:t.readyState)===WebSocket.OPEN}async connect(t,e,i=0,s=0){var o;if(!this.isWssUrl(t)){throw new Error("Invalid WebSocket URL. Only ws and wss protocols are supported.")}const r=await e();if(r){this.socket=new WebSocket(t,r)}else{this.socket=new WebSocket(t)}await new Promise(((t,e)=>{const i=()=>{this.socket.removeEventListener("open",i);this.socket.removeEventListener("error",s);t()};const s=t=>{this.socket.removeEventListener("open",i);this.socket.removeEventListener("error",s);e(t)};this.socket.addEventListener("open",i);this.socket.addEventListener("error",s)}));(o=this.openHandler)===null||o===void 0?void 0:o.call(this);this.socket.onmessage=t=>this.handleMessage(t);this.socket.onclose=t=>this.handleClose(t);this.socket.onerror=t=>this.handleError(t);if(i&&s){this.startKeepAliveTimer(i,s)}}onMessageReceived(t){this.messageReceivedHandler=t;return this}onOpen(t){this.openHandler=t;return this}onClose(t){this.closeHandler=t;return this}onError(t){this.errorHandler=t;return this}send(t){if(!this.isConnected){throw new Error("WebSocket is not connected.")}const e=JSON.stringify(t);this.socket.send(e)}close(){if(this.socket){this.socket.close();this.stopKeepAliveTimer();this.socket=undefined}}handleMessage(t){var e;try{const i=JSON.parse(t.data);(e=this.messageReceivedHandler)===null||e===void 0?void 0:e.call(this,i)}catch(t){console.error("Invalid UdpWebSocketMessage received:",t)}}handleClose(t){var e;(e=this.closeHandler)===null||e===void 0?void 0:e.call(this,t);this.close()}handleError(t){var e;(e=this.errorHandler)===null||e===void 0?void 0:e.call(this,t);console.error("UdpWebSocket error:",t)}startKeepAliveTimer(t,e){this.stopKeepAliveTimer();this.keepAliveIntervalId=window.setInterval((()=>{this.sendKeepAlivePing()}),t);this.keepAliveTimeoutId=window.setTimeout((()=>{this.close()}),e)}stopKeepAliveTimer(){if(this.keepAliveIntervalId)clearInterval(this.keepAliveIntervalId);if(this.keepAliveTimeoutId)clearTimeout(this.keepAliveTimeoutId);this.keepAliveIntervalId=undefined;this.keepAliveTimeoutId=undefined}sendKeepAlivePing(){const t={headers:{type:"KeepAlive",timestamp:Date.now()}};try{this.send(t)}catch(t){console.error("KeepAlive ping failed to send:",t)}}isWssUrl(t){return/^wss?:\/\//.test(t)}}m.DEFAULT_KEEPALIVE_INTERVAL_MS=3e4;m.DEFAULT_KEEPALIVE_TIMEOUT_MS=60*60*1e3;export{m as UdpWebSocketClient,r as apiMutate,i as getMergedConfig,p as useMatchBreakpoint};
2
2
  //# sourceMappingURL=index.esm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.esm.js","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"],"names":["Axios"],"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;AAKD;AACA;AACA;AACA;AACA;AACA;AACA;;ACpBM,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;;;;"}
1
+ {"version":3,"file":"index.esm.js","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"],"names":["Axios"],"mappings":"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"}
@@ -7,3 +7,4 @@ export type { Search as SearchInterface, SearchFilters, SearchFilterGroups, Grou
7
7
  export * from './store/catalog-store';
8
8
  export * from './udp-utilities/api-config';
9
9
  export { useMatchBreakpoint } from './udp-utilities/layout/breakpoints/useMatchBreakpoint';
10
+ export * from './udp-utilities/udp-websocket-client/udp-websocket-client';
@@ -0,0 +1,34 @@
1
+ export interface UdpWebSocketMessage {
2
+ headers?: Record<string, any>;
3
+ body?: any;
4
+ }
5
+ export type UdpWsReceiveHandler = (msg: UdpWebSocketMessage) => void | Promise<void>;
6
+ export type UdpWsCloseHandler = (e: CloseEvent) => void | Promise<void>;
7
+ export type UdpWsErrorHandler = (e: Event) => void | Promise<void>;
8
+ export type UdpWsOpenHandler = () => void | Promise<void>;
9
+ export declare class UdpWebSocketClient {
10
+ static readonly DEFAULT_KEEPALIVE_INTERVAL_MS = 30000;
11
+ static readonly DEFAULT_KEEPALIVE_TIMEOUT_MS: number;
12
+ private socket?;
13
+ private keepAliveIntervalId?;
14
+ private keepAliveTimeoutId?;
15
+ private messageReceivedHandler?;
16
+ private closeHandler?;
17
+ private errorHandler?;
18
+ private openHandler?;
19
+ get isConnected(): boolean;
20
+ connect(url: string, getAccessToken: () => Promise<string | void>, keepAliveIntervalMs?: number, keepAliveTimeoutMs?: number): Promise<void>;
21
+ onMessageReceived(handler: UdpWsReceiveHandler): this;
22
+ onOpen(handler: UdpWsOpenHandler): this;
23
+ onClose(handler: UdpWsCloseHandler): this;
24
+ onError(handler: UdpWsErrorHandler): this;
25
+ send(message: UdpWebSocketMessage): void;
26
+ close(): void;
27
+ protected handleMessage(event: MessageEvent): void;
28
+ protected handleClose(event: CloseEvent): void;
29
+ protected handleError(event: Event): void;
30
+ protected startKeepAliveTimer(intervalMs: number, timeoutMs: number): void;
31
+ protected stopKeepAliveTimer(): void;
32
+ protected sendKeepAlivePing(): void;
33
+ protected isWssUrl(url: string): boolean;
34
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "udp-stencil-component-library",
3
- "version": "25.18.2-beta.6",
3
+ "version": "25.18.2-beta.7",
4
4
  "description": "A Stencil based component library for UDP",
5
5
  "main": "dist/index.cjs.js",
6
6
  "module": "dist/index.js",