@aifabrix/miso-client 3.1.1 → 3.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (34) hide show
  1. package/README.md +1 -1
  2. package/dist/services/auth.service.js +2 -2
  3. package/dist/types/data-client.types.d.ts +1 -0
  4. package/dist/types/data-client.types.d.ts.map +1 -1
  5. package/dist/types/data-client.types.js.map +1 -1
  6. package/dist/utils/auth-strategy.js +2 -2
  7. package/dist/utils/data-client-audit.d.ts +24 -0
  8. package/dist/utils/data-client-audit.d.ts.map +1 -0
  9. package/dist/utils/data-client-audit.js +127 -0
  10. package/dist/utils/data-client-audit.js.map +1 -0
  11. package/dist/utils/data-client-auth.d.ts +60 -0
  12. package/dist/utils/data-client-auth.d.ts.map +1 -0
  13. package/dist/utils/data-client-auth.js +386 -0
  14. package/dist/utils/data-client-auth.js.map +1 -0
  15. package/dist/utils/data-client-cache.d.ts +36 -0
  16. package/dist/utils/data-client-cache.d.ts.map +1 -0
  17. package/dist/utils/data-client-cache.js +55 -0
  18. package/dist/utils/data-client-cache.js.map +1 -0
  19. package/dist/utils/data-client-request.d.ts +32 -0
  20. package/dist/utils/data-client-request.d.ts.map +1 -0
  21. package/dist/utils/data-client-request.js +306 -0
  22. package/dist/utils/data-client-request.js.map +1 -0
  23. package/dist/utils/data-client-utils.d.ts +49 -0
  24. package/dist/utils/data-client-utils.d.ts.map +1 -0
  25. package/dist/utils/data-client-utils.js +139 -0
  26. package/dist/utils/data-client-utils.js.map +1 -0
  27. package/dist/utils/data-client.d.ts +0 -29
  28. package/dist/utils/data-client.d.ts.map +1 -1
  29. package/dist/utils/data-client.js +51 -773
  30. package/dist/utils/data-client.js.map +1 -1
  31. package/dist/utils/internal-http-client.d.ts.map +1 -1
  32. package/dist/utils/internal-http-client.js +7 -3
  33. package/dist/utils/internal-http-client.js.map +1 -1
  34. package/package.json +1 -1
@@ -0,0 +1,386 @@
1
+ "use strict";
2
+ /**
3
+ * DataClient authentication utilities
4
+ * Handles authentication, token management, and login/logout flows
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.getToken = getToken;
8
+ exports.hasClientToken = hasClientToken;
9
+ exports.hasAnyToken = hasAnyToken;
10
+ exports.getClientToken = getClientToken;
11
+ exports.getControllerUrl = getControllerUrl;
12
+ exports.redirectToLogin = redirectToLogin;
13
+ exports.logout = logout;
14
+ exports.getEnvironmentToken = getEnvironmentToken;
15
+ exports.getClientTokenInfo = getClientTokenInfo;
16
+ const data_client_utils_1 = require("./data-client-utils");
17
+ const token_utils_1 = require("./token-utils");
18
+ const data_client_audit_1 = require("./data-client-audit");
19
+ /**
20
+ * Get authentication token from localStorage
21
+ */
22
+ function getToken(tokenKeys) {
23
+ if (!(0, data_client_utils_1.isBrowser)())
24
+ return null;
25
+ const keys = tokenKeys || ["token", "accessToken", "authToken"];
26
+ for (const key of keys) {
27
+ const token = (0, data_client_utils_1.getLocalStorage)(key);
28
+ if (token)
29
+ return token;
30
+ }
31
+ return null;
32
+ }
33
+ /**
34
+ * Check if client token is available (from localStorage cache or config)
35
+ */
36
+ function hasClientToken(misoClient, misoConfig) {
37
+ if (!(0, data_client_utils_1.isBrowser)()) {
38
+ // Server-side: check if misoClient config has clientSecret
39
+ if (misoClient && misoConfig?.clientSecret) {
40
+ return true;
41
+ }
42
+ return false;
43
+ }
44
+ // Browser-side: check localStorage cache
45
+ const cachedToken = (0, data_client_utils_1.getLocalStorage)("miso:client-token");
46
+ if (cachedToken) {
47
+ const expiresAtStr = (0, data_client_utils_1.getLocalStorage)("miso:client-token-expires-at");
48
+ if (expiresAtStr) {
49
+ const expiresAt = parseInt(expiresAtStr, 10);
50
+ if (expiresAt > Date.now()) {
51
+ return true; // Valid cached token
52
+ }
53
+ }
54
+ }
55
+ // Check config token
56
+ if (misoConfig?.clientToken) {
57
+ return true;
58
+ }
59
+ // Check if misoClient config has onClientTokenRefresh callback (browser pattern)
60
+ if (misoConfig?.onClientTokenRefresh) {
61
+ return true; // Has means to get client token
62
+ }
63
+ // Check if misoClient config has clientSecret (server-side fallback)
64
+ if (misoConfig?.clientSecret) {
65
+ return true;
66
+ }
67
+ return false;
68
+ }
69
+ /**
70
+ * Check if any authentication token is available (user token OR client token)
71
+ */
72
+ function hasAnyToken(tokenKeys, misoClient, misoConfig) {
73
+ return getToken(tokenKeys) !== null || hasClientToken(misoClient || null, misoConfig);
74
+ }
75
+ /**
76
+ * Get client token for requests
77
+ * Checks localStorage cache first, then config, then calls getEnvironmentToken() if needed
78
+ * @returns Client token string or null if unavailable
79
+ */
80
+ async function getClientToken(misoConfig, _baseUrl, _getEnvironmentToken) {
81
+ if (!(0, data_client_utils_1.isBrowser)()) {
82
+ // Server-side: return null (client token handled by MisoClient)
83
+ return null;
84
+ }
85
+ // Check localStorage cache first
86
+ const cachedToken = (0, data_client_utils_1.getLocalStorage)("miso:client-token");
87
+ const expiresAtStr = (0, data_client_utils_1.getLocalStorage)("miso:client-token-expires-at");
88
+ if (cachedToken && expiresAtStr) {
89
+ const expiresAt = parseInt(expiresAtStr, 10);
90
+ if (expiresAt > Date.now()) {
91
+ return cachedToken; // Valid cached token
92
+ }
93
+ }
94
+ // Check config token
95
+ if (misoConfig?.clientToken) {
96
+ return misoConfig.clientToken;
97
+ }
98
+ // Don't fetch client token if we don't have a cached token
99
+ // This prevents unnecessary fetch calls during auth error handling
100
+ // redirectToLogin can work without a client token (it's optional)
101
+ return null;
102
+ }
103
+ /**
104
+ * Build controller URL from configuration
105
+ * Uses controllerPublicUrl (browser) or controllerUrl (fallback)
106
+ * @returns Controller base URL or null if not configured
107
+ */
108
+ function getControllerUrl(misoConfig) {
109
+ if (!misoConfig) {
110
+ return null;
111
+ }
112
+ // Browser: prefer controllerPublicUrl, fallback to controllerUrl
113
+ if ((0, data_client_utils_1.isBrowser)()) {
114
+ return misoConfig.controllerPublicUrl ||
115
+ misoConfig.controllerUrl ||
116
+ null;
117
+ }
118
+ // Server: prefer controllerPrivateUrl, fallback to controllerUrl
119
+ return misoConfig.controllerPrivateUrl ||
120
+ misoConfig.controllerUrl ||
121
+ null;
122
+ }
123
+ /**
124
+ * Redirect to login page via controller
125
+ * Calls the controller login endpoint with redirect parameter and x-client-token header
126
+ * @param redirectUrl - Optional redirect URL to return to after login (defaults to current page URL)
127
+ */
128
+ async function redirectToLogin(config, getClientTokenFn, redirectUrl) {
129
+ if (!(0, data_client_utils_1.isBrowser)())
130
+ return;
131
+ // Get redirect URL - use provided URL or current page URL
132
+ const currentUrl = globalThis.window.location.href;
133
+ const finalRedirectUrl = redirectUrl || currentUrl;
134
+ // Build controller URL
135
+ const controllerUrl = getControllerUrl(config.misoConfig);
136
+ if (!controllerUrl) {
137
+ // Fallback to static loginUrl if controller URL not configured
138
+ const loginUrl = config.loginUrl || "/login";
139
+ const fullUrl = /^https?:\/\//i.test(loginUrl)
140
+ ? loginUrl
141
+ : `${globalThis.window.location.origin}${loginUrl.startsWith("/") ? loginUrl : `/${loginUrl}`}`;
142
+ globalThis.window.location.href = fullUrl;
143
+ return;
144
+ }
145
+ try {
146
+ // Get client token
147
+ const clientToken = await getClientTokenFn();
148
+ // Build login endpoint URL with query parameters
149
+ const loginEndpoint = `${controllerUrl}/api/v1/auth/login`;
150
+ const url = new URL(loginEndpoint);
151
+ url.searchParams.set("redirect", finalRedirectUrl);
152
+ // Build headers
153
+ const headers = {
154
+ "Content-Type": "application/json",
155
+ };
156
+ // Add x-client-token header if available
157
+ if (clientToken) {
158
+ headers["x-client-token"] = clientToken;
159
+ }
160
+ // Make fetch request
161
+ const response = await fetch(url.toString(), {
162
+ method: "GET",
163
+ headers,
164
+ credentials: "include", // Include cookies for CORS
165
+ });
166
+ if (!response.ok) {
167
+ throw new Error(`Login request failed: ${response.status} ${response.statusText}`);
168
+ }
169
+ const data = (await response.json());
170
+ // Extract loginUrl (support both nested and flat formats)
171
+ const loginUrl = data.data?.loginUrl || data.loginUrl;
172
+ if (loginUrl) {
173
+ // Redirect to the login URL returned by controller
174
+ globalThis.window.location.href = loginUrl;
175
+ }
176
+ else {
177
+ // Fallback if loginUrl not in response
178
+ const fallbackLoginUrl = config.loginUrl || "/login";
179
+ const fullUrl = /^https?:\/\//i.test(fallbackLoginUrl)
180
+ ? fallbackLoginUrl
181
+ : `${globalThis.window.location.origin}${fallbackLoginUrl.startsWith("/") ? fallbackLoginUrl : `/${fallbackLoginUrl}`}`;
182
+ globalThis.window.location.href = fullUrl;
183
+ }
184
+ }
185
+ catch (error) {
186
+ // On error, fallback to static loginUrl
187
+ console.error("Failed to get login URL from controller:", error);
188
+ const loginUrl = config.loginUrl || "/login";
189
+ const fullUrl = /^https?:\/\//i.test(loginUrl)
190
+ ? loginUrl
191
+ : `${globalThis.window.location.origin}${loginUrl.startsWith("/") ? loginUrl : `/${loginUrl}`}`;
192
+ globalThis.window.location.href = fullUrl;
193
+ }
194
+ }
195
+ /**
196
+ * Logout user and redirect
197
+ * Calls logout API with x-client-token header, clears tokens from localStorage, clears cache, and redirects
198
+ * @param redirectUrl - Optional redirect URL after logout (defaults to logoutUrl or loginUrl)
199
+ */
200
+ async function logout(config, getTokenFn, getClientTokenFn, clearCacheFn, redirectUrl) {
201
+ if (!(0, data_client_utils_1.isBrowser)())
202
+ return;
203
+ const token = getTokenFn();
204
+ // Build controller URL
205
+ const controllerUrl = getControllerUrl(config.misoConfig);
206
+ // Call logout API if controller URL available and token exists
207
+ if (controllerUrl && token) {
208
+ try {
209
+ // Get client token
210
+ const clientToken = await getClientTokenFn();
211
+ // Build logout endpoint URL
212
+ const logoutEndpoint = `${controllerUrl}/api/v1/auth/logout`;
213
+ // Build headers
214
+ const headers = {
215
+ "Content-Type": "application/json",
216
+ };
217
+ // Add x-client-token header if available
218
+ if (clientToken) {
219
+ headers["x-client-token"] = clientToken;
220
+ }
221
+ // Make fetch request
222
+ const response = await fetch(logoutEndpoint, {
223
+ method: "POST",
224
+ headers,
225
+ body: JSON.stringify({ token }),
226
+ credentials: "include", // Include cookies for CORS
227
+ });
228
+ if (!response.ok) {
229
+ // Log error but continue with cleanup (logout should always clear local state)
230
+ const errorText = await response.text().catch(() => "Unknown error");
231
+ console.error(`Logout API call failed: ${response.status} ${response.statusText}. ${errorText}`);
232
+ }
233
+ }
234
+ catch (error) {
235
+ // Log error but continue with cleanup (logout should always clear local state)
236
+ console.error("Logout API call failed:", error);
237
+ }
238
+ }
239
+ // Clear tokens from localStorage (always, even if API call failed)
240
+ const keys = config.tokenKeys || ["token", "accessToken", "authToken"];
241
+ keys.forEach(key => {
242
+ try {
243
+ const storage = globalThis.localStorage;
244
+ if (storage) {
245
+ storage.removeItem(key);
246
+ }
247
+ }
248
+ catch (e) {
249
+ // Ignore localStorage errors (SSR, private browsing, etc.)
250
+ }
251
+ });
252
+ // Clear HTTP cache
253
+ clearCacheFn();
254
+ // Determine redirect URL: redirectUrl param > logoutUrl config > loginUrl config > '/login'
255
+ const finalRedirectUrl = redirectUrl ||
256
+ config.logoutUrl ||
257
+ config.loginUrl ||
258
+ "/login";
259
+ // Construct full URL
260
+ const fullUrl = /^https?:\/\//i.test(finalRedirectUrl)
261
+ ? finalRedirectUrl
262
+ : `${globalThis.window.location.origin}${finalRedirectUrl.startsWith("/") ? finalRedirectUrl : `/${finalRedirectUrl}`}`;
263
+ // Redirect
264
+ globalThis.window.location.href = fullUrl;
265
+ }
266
+ /**
267
+ * Get environment token (browser-side)
268
+ * Checks localStorage cache first, then calls backend endpoint if needed
269
+ * Uses clientTokenUri from config or defaults to /api/v1/auth/client-token
270
+ *
271
+ * @returns Client token string
272
+ * @throws Error if token fetch fails
273
+ */
274
+ async function getEnvironmentToken(config, misoClient) {
275
+ if (!(0, data_client_utils_1.isBrowser)()) {
276
+ throw new Error("getEnvironmentToken() is only available in browser environment");
277
+ }
278
+ const cacheKey = "miso:client-token";
279
+ const expiresAtKey = "miso:client-token-expires-at";
280
+ // Check cache first
281
+ const cachedToken = (0, data_client_utils_1.getLocalStorage)(cacheKey);
282
+ const expiresAtStr = (0, data_client_utils_1.getLocalStorage)(expiresAtKey);
283
+ if (cachedToken && expiresAtStr) {
284
+ const expiresAt = parseInt(expiresAtStr, 10);
285
+ const now = Date.now();
286
+ // If token is still valid, return cached token
287
+ if (expiresAt > now) {
288
+ return cachedToken;
289
+ }
290
+ // Token expired, remove from cache
291
+ (0, data_client_utils_1.removeLocalStorage)(cacheKey);
292
+ (0, data_client_utils_1.removeLocalStorage)(expiresAtKey);
293
+ }
294
+ // Cache miss or expired - fetch from backend
295
+ const clientTokenUri = config.misoConfig?.clientTokenUri || "/api/v1/auth/client-token";
296
+ // Build full URL
297
+ const fullUrl = /^https?:\/\//i.test(clientTokenUri)
298
+ ? clientTokenUri
299
+ : `${config.baseUrl}${clientTokenUri}`;
300
+ try {
301
+ // Make request to backend endpoint
302
+ const response = await fetch(fullUrl, {
303
+ method: "POST",
304
+ headers: {
305
+ "Content-Type": "application/json",
306
+ },
307
+ credentials: "include", // Include cookies for CORS
308
+ });
309
+ if (!response.ok) {
310
+ const errorText = await response.text();
311
+ throw new Error(`Failed to get environment token: ${response.status} ${response.statusText}. ${errorText}`);
312
+ }
313
+ const data = (await response.json());
314
+ // Extract token from response (support both nested and flat formats)
315
+ const token = data.data?.token || data.token || data.accessToken || data.access_token;
316
+ if (!token || typeof token !== "string") {
317
+ throw new Error("Invalid response format: token not found in response");
318
+ }
319
+ // Calculate expiration time (default to 1 hour if not provided)
320
+ const expiresIn = data.data?.expiresIn || data.expiresIn || data.expires_in || 3600;
321
+ const expiresAt = Date.now() + expiresIn * 1000;
322
+ // Cache token
323
+ (0, data_client_utils_1.setLocalStorage)(cacheKey, token);
324
+ (0, data_client_utils_1.setLocalStorage)(expiresAtKey, expiresAt.toString());
325
+ // Log audit event if misoClient available
326
+ if (misoClient && !(0, data_client_audit_1.shouldSkipAudit)(clientTokenUri, config.audit)) {
327
+ try {
328
+ await misoClient.log.audit("client.token.request.success", clientTokenUri, {
329
+ method: "POST",
330
+ url: clientTokenUri,
331
+ statusCode: response.status,
332
+ cached: false,
333
+ }, {});
334
+ }
335
+ catch (auditError) {
336
+ // Silently fail audit logging to avoid breaking requests
337
+ console.warn("Failed to log audit event:", auditError);
338
+ }
339
+ }
340
+ return token;
341
+ }
342
+ catch (error) {
343
+ // Log audit event for error if misoClient available
344
+ if (misoClient && !(0, data_client_audit_1.shouldSkipAudit)(clientTokenUri, config.audit)) {
345
+ try {
346
+ const errorMessage = error instanceof Error ? error.message : "Unknown error";
347
+ await misoClient.log.audit("client.token.request.failed", clientTokenUri, {
348
+ method: "POST",
349
+ url: clientTokenUri,
350
+ statusCode: 0,
351
+ error: errorMessage,
352
+ cached: false,
353
+ }, {});
354
+ }
355
+ catch (auditError) {
356
+ // Silently fail audit logging to avoid breaking requests
357
+ console.warn("Failed to log audit event:", auditError);
358
+ }
359
+ }
360
+ throw error;
361
+ }
362
+ }
363
+ /**
364
+ * Get client token information (browser-side)
365
+ * Extracts application and environment info from client token
366
+ *
367
+ * @returns Client token info or null if token not available
368
+ */
369
+ function getClientTokenInfo(misoConfig) {
370
+ if (!(0, data_client_utils_1.isBrowser)()) {
371
+ return null;
372
+ }
373
+ // Try to get token from cache first
374
+ const cachedToken = (0, data_client_utils_1.getLocalStorage)("miso:client-token");
375
+ if (cachedToken) {
376
+ return (0, token_utils_1.extractClientTokenInfo)(cachedToken);
377
+ }
378
+ // Try to get token from config (if provided)
379
+ const configToken = misoConfig?.clientToken;
380
+ if (configToken) {
381
+ return (0, token_utils_1.extractClientTokenInfo)(configToken);
382
+ }
383
+ // No token available
384
+ return null;
385
+ }
386
+ //# sourceMappingURL=data-client-auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-client-auth.js","sourceRoot":"","sources":["../../src/utils/data-client-auth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * DataClient cache management utilities
3
+ * Handles cache operations, size enforcement, and metrics tracking
4
+ */
5
+ import { CacheEntry, CacheConfig } from "../types/data-client.types";
6
+ import { ApiRequestOptions } from "../types/data-client.types";
7
+ /**
8
+ * Cache manager interface
9
+ */
10
+ export interface CacheManager {
11
+ cache: Map<string, CacheEntry>;
12
+ metrics: {
13
+ cacheHits: number;
14
+ cacheMisses: number;
15
+ };
16
+ }
17
+ /**
18
+ * Get cached entry if valid
19
+ */
20
+ export declare function getCachedEntry<T>(cache: Map<string, CacheEntry>, cacheKey: string, metrics: {
21
+ cacheHits: number;
22
+ cacheMisses: number;
23
+ }): T | null;
24
+ /**
25
+ * Set cache entry with TTL and enforce max size
26
+ */
27
+ export declare function setCacheEntry(cache: Map<string, CacheEntry>, cacheKey: string, data: unknown, ttl: number, maxSize: number): void;
28
+ /**
29
+ * Check if caching is enabled for request
30
+ */
31
+ export declare function isCacheEnabled(method: string, cacheConfig: CacheConfig | undefined, options?: ApiRequestOptions): boolean;
32
+ /**
33
+ * Generate cache key for request
34
+ */
35
+ export declare function getCacheKeyForRequest(endpoint: string, options?: ApiRequestOptions): string;
36
+ //# sourceMappingURL=data-client-cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-client-cache.d.ts","sourceRoot":"","sources":["../../src/utils/data-client-cache.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAErE,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAE/D;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAC/B,OAAO,EAAE;QACP,SAAS,EAAE,MAAM,CAAC;QAClB,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;CACH;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAC9B,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,EAC9B,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,GAClD,CAAC,GAAG,IAAI,CAQV;AAED;;GAEG;AACH,wBAAgB,aAAa,CAC3B,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,EAC9B,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,OAAO,EACb,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,MAAM,GACd,IAAI,CAYN;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,WAAW,GAAG,SAAS,EACpC,OAAO,CAAC,EAAE,iBAAiB,GAC1B,OAAO,CAOT;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,iBAAiB,GAC1B,MAAM,CAER"}
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+ /**
3
+ * DataClient cache management utilities
4
+ * Handles cache operations, size enforcement, and metrics tracking
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.getCachedEntry = getCachedEntry;
8
+ exports.setCacheEntry = setCacheEntry;
9
+ exports.isCacheEnabled = isCacheEnabled;
10
+ exports.getCacheKeyForRequest = getCacheKeyForRequest;
11
+ const data_client_utils_1 = require("./data-client-utils");
12
+ /**
13
+ * Get cached entry if valid
14
+ */
15
+ function getCachedEntry(cache, cacheKey, metrics) {
16
+ const cached = cache.get(cacheKey);
17
+ if (cached && cached.expiresAt > Date.now()) {
18
+ metrics.cacheHits++;
19
+ return cached.data;
20
+ }
21
+ metrics.cacheMisses++;
22
+ return null;
23
+ }
24
+ /**
25
+ * Set cache entry with TTL and enforce max size
26
+ */
27
+ function setCacheEntry(cache, cacheKey, data, ttl, maxSize) {
28
+ cache.set(cacheKey, {
29
+ data,
30
+ expiresAt: Date.now() + ttl * 1000,
31
+ key: cacheKey,
32
+ });
33
+ // Enforce max cache size
34
+ if (cache.size > maxSize) {
35
+ const firstKey = cache.keys().next().value;
36
+ if (firstKey)
37
+ cache.delete(firstKey);
38
+ }
39
+ }
40
+ /**
41
+ * Check if caching is enabled for request
42
+ */
43
+ function isCacheEnabled(method, cacheConfig, options) {
44
+ const isGetRequest = method.toUpperCase() === "GET";
45
+ return ((cacheConfig?.enabled !== false) &&
46
+ isGetRequest &&
47
+ (options?.cache?.enabled !== false));
48
+ }
49
+ /**
50
+ * Generate cache key for request
51
+ */
52
+ function getCacheKeyForRequest(endpoint, options) {
53
+ return options?.cache?.key || (0, data_client_utils_1.generateCacheKey)(endpoint, options);
54
+ }
55
+ //# sourceMappingURL=data-client-cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-client-cache.js","sourceRoot":"","sources":["../../src/utils/data-client-cache.ts"],"names":[],"mappings":";AAAA;;;GAGG;;AAoBH,wCAYC;AAKD,sCAkBC;AAKD,wCAWC;AAKD,sDAKC;AA9ED,2DAAuD;AAcvD;;GAEG;AACH,SAAgB,cAAc,CAC5B,KAA8B,EAC9B,QAAgB,EAChB,OAAmD;IAEnD,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACnC,IAAI,MAAM,IAAI,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;QAC5C,OAAO,CAAC,SAAS,EAAE,CAAC;QACpB,OAAO,MAAM,CAAC,IAAS,CAAC;IAC1B,CAAC;IACD,OAAO,CAAC,WAAW,EAAE,CAAC;IACtB,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,SAAgB,aAAa,CAC3B,KAA8B,EAC9B,QAAgB,EAChB,IAAa,EACb,GAAW,EACX,OAAe;IAEf,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE;QAClB,IAAI;QACJ,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,IAAI;QAClC,GAAG,EAAE,QAAQ;KACd,CAAC,CAAC;IAEH,yBAAyB;IACzB,IAAI,KAAK,CAAC,IAAI,GAAG,OAAO,EAAE,CAAC;QACzB,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC;QAC3C,IAAI,QAAQ;YAAE,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IACvC,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAgB,cAAc,CAC5B,MAAc,EACd,WAAoC,EACpC,OAA2B;IAE3B,MAAM,YAAY,GAAG,MAAM,CAAC,WAAW,EAAE,KAAK,KAAK,CAAC;IACpD,OAAO,CACL,CAAC,WAAW,EAAE,OAAO,KAAK,KAAK,CAAC;QAChC,YAAY;QACZ,CAAC,OAAO,EAAE,KAAK,EAAE,OAAO,KAAK,KAAK,CAAC,CACpC,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAgB,qBAAqB,CACnC,QAAgB,EAChB,OAA2B;IAE3B,OAAO,OAAO,EAAE,KAAK,EAAE,GAAG,IAAI,IAAA,oCAAgB,EAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;AACpE,CAAC"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * DataClient request execution utilities
3
+ * Handles HTTP request execution, retry logic, fetch handling, and response parsing
4
+ */
5
+ import { ApiRequestOptions, DataClientConfig, InterceptorConfig, CacheEntry } from "../types/data-client.types";
6
+ import { HasAnyTokenFn, GetTokenFn } from "./data-client-audit";
7
+ import { MisoClient } from "../index";
8
+ /**
9
+ * Extract headers from Headers object or Record
10
+ */
11
+ export declare function extractHeaders(headers?: Headers | Record<string, string> | string[][] | Record<string, string | readonly string[]>): Record<string, string> | undefined;
12
+ /**
13
+ * Parse response based on content type
14
+ */
15
+ export declare function parseResponse<T>(response: Response): Promise<T>;
16
+ /**
17
+ * Merge AbortSignals
18
+ */
19
+ export declare function mergeSignals(signal1: AbortSignal, signal2: AbortSignal): AbortSignal;
20
+ /**
21
+ * Make fetch request with timeout and authentication
22
+ */
23
+ export declare function makeFetchRequest(method: string, url: string, config: DataClientConfig, getToken: GetTokenFn, options?: ApiRequestOptions): Promise<Response>;
24
+ /**
25
+ * Execute HTTP request with retry logic
26
+ */
27
+ export declare function executeHttpRequest<T>(method: string, fullUrl: string, endpoint: string, config: DataClientConfig, cache: Map<string, CacheEntry>, cacheKey: string, cacheEnabled: boolean, startTime: number, misoClient: MisoClient | null, hasAnyToken: HasAnyTokenFn, getToken: GetTokenFn, handleAuthError: () => void, interceptors: InterceptorConfig, metrics: {
28
+ totalRequests: number;
29
+ totalFailures: number;
30
+ responseTimes: number[];
31
+ }, options?: ApiRequestOptions): Promise<T>;
32
+ //# sourceMappingURL=data-client-request.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-client-request.d.ts","sourceRoot":"","sources":["../../src/utils/data-client-request.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAKhB,iBAAiB,EACjB,UAAU,EACX,MAAM,4BAA4B,CAAC;AAOpC,OAAO,EAAsB,aAAa,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACpF,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAEtC;;GAEG;AACH,wBAAgB,cAAc,CAC5B,OAAO,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,EAAE,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAAC,GACnG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAsBpC;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,CAAC,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,CAAC,CAAC,CASrE;AAED;;GAEG;AACH,wBAAgB,YAAY,CAC1B,OAAO,EAAE,WAAW,EACpB,OAAO,EAAE,WAAW,GACnB,WAAW,CAkBb;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,gBAAgB,EACxB,QAAQ,EAAE,UAAU,EACpB,OAAO,CAAC,EAAE,iBAAiB,GAC1B,OAAO,CAAC,QAAQ,CAAC,CAqDnB;AA0LD;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,CAAC,EACxC,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,gBAAgB,EACxB,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,EAC9B,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,OAAO,EACrB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,UAAU,GAAG,IAAI,EAC7B,WAAW,EAAE,aAAa,EAC1B,QAAQ,EAAE,UAAU,EACpB,eAAe,EAAE,MAAM,IAAI,EAC3B,YAAY,EAAE,iBAAiB,EAC/B,OAAO,EAAE;IACP,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,EAAE,CAAC;CACzB,EACD,OAAO,CAAC,EAAE,iBAAiB,GAC1B,OAAO,CAAC,CAAC,CAAC,CA+KZ"}