@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.
- package/README.md +1 -1
- package/dist/services/auth.service.js +2 -2
- package/dist/types/data-client.types.d.ts +1 -0
- package/dist/types/data-client.types.d.ts.map +1 -1
- package/dist/types/data-client.types.js.map +1 -1
- package/dist/utils/auth-strategy.js +2 -2
- package/dist/utils/data-client-audit.d.ts +24 -0
- package/dist/utils/data-client-audit.d.ts.map +1 -0
- package/dist/utils/data-client-audit.js +127 -0
- package/dist/utils/data-client-audit.js.map +1 -0
- package/dist/utils/data-client-auth.d.ts +60 -0
- package/dist/utils/data-client-auth.d.ts.map +1 -0
- package/dist/utils/data-client-auth.js +386 -0
- package/dist/utils/data-client-auth.js.map +1 -0
- package/dist/utils/data-client-cache.d.ts +36 -0
- package/dist/utils/data-client-cache.d.ts.map +1 -0
- package/dist/utils/data-client-cache.js +55 -0
- package/dist/utils/data-client-cache.js.map +1 -0
- package/dist/utils/data-client-request.d.ts +32 -0
- package/dist/utils/data-client-request.d.ts.map +1 -0
- package/dist/utils/data-client-request.js +306 -0
- package/dist/utils/data-client-request.js.map +1 -0
- package/dist/utils/data-client-utils.d.ts +49 -0
- package/dist/utils/data-client-utils.d.ts.map +1 -0
- package/dist/utils/data-client-utils.js +139 -0
- package/dist/utils/data-client-utils.js.map +1 -0
- package/dist/utils/data-client.d.ts +0 -29
- package/dist/utils/data-client.d.ts.map +1 -1
- package/dist/utils/data-client.js +51 -773
- package/dist/utils/data-client.js.map +1 -1
- package/dist/utils/internal-http-client.d.ts.map +1 -1
- package/dist/utils/internal-http-client.js +7 -3
- package/dist/utils/internal-http-client.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,306 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* DataClient request execution utilities
|
|
4
|
+
* Handles HTTP request execution, retry logic, fetch handling, and response parsing
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.extractHeaders = extractHeaders;
|
|
8
|
+
exports.parseResponse = parseResponse;
|
|
9
|
+
exports.mergeSignals = mergeSignals;
|
|
10
|
+
exports.makeFetchRequest = makeFetchRequest;
|
|
11
|
+
exports.executeHttpRequest = executeHttpRequest;
|
|
12
|
+
const data_client_types_1 = require("../types/data-client.types");
|
|
13
|
+
const data_client_utils_1 = require("./data-client-utils");
|
|
14
|
+
const data_client_cache_1 = require("./data-client-cache");
|
|
15
|
+
const data_client_audit_1 = require("./data-client-audit");
|
|
16
|
+
/**
|
|
17
|
+
* Extract headers from Headers object or Record
|
|
18
|
+
*/
|
|
19
|
+
function extractHeaders(headers) {
|
|
20
|
+
if (!headers)
|
|
21
|
+
return undefined;
|
|
22
|
+
if (headers instanceof Headers) {
|
|
23
|
+
const result = {};
|
|
24
|
+
headers.forEach((value, key) => {
|
|
25
|
+
result[key] = value;
|
|
26
|
+
});
|
|
27
|
+
return result;
|
|
28
|
+
}
|
|
29
|
+
if (Array.isArray(headers)) {
|
|
30
|
+
const result = {};
|
|
31
|
+
headers.forEach(([key, value]) => {
|
|
32
|
+
result[key] = String(value);
|
|
33
|
+
});
|
|
34
|
+
return result;
|
|
35
|
+
}
|
|
36
|
+
// Convert Record<string, string | readonly string[]> to Record<string, string>
|
|
37
|
+
const result = {};
|
|
38
|
+
Object.entries(headers).forEach(([key, value]) => {
|
|
39
|
+
result[key] = Array.isArray(value) ? value.join(", ") : String(value);
|
|
40
|
+
});
|
|
41
|
+
return result;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Parse response based on content type
|
|
45
|
+
*/
|
|
46
|
+
async function parseResponse(response) {
|
|
47
|
+
const contentType = response.headers.get("content-type") || "";
|
|
48
|
+
if (contentType.includes("application/json")) {
|
|
49
|
+
return (await response.json());
|
|
50
|
+
}
|
|
51
|
+
if (contentType.includes("text/")) {
|
|
52
|
+
return (await response.text());
|
|
53
|
+
}
|
|
54
|
+
return (await response.blob());
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Merge AbortSignals
|
|
58
|
+
*/
|
|
59
|
+
function mergeSignals(signal1, signal2) {
|
|
60
|
+
const controller = new AbortController();
|
|
61
|
+
const abort = () => {
|
|
62
|
+
controller.abort();
|
|
63
|
+
signal1.removeEventListener("abort", abort);
|
|
64
|
+
signal2.removeEventListener("abort", abort);
|
|
65
|
+
};
|
|
66
|
+
if (signal1.aborted || signal2.aborted) {
|
|
67
|
+
controller.abort();
|
|
68
|
+
return controller.signal;
|
|
69
|
+
}
|
|
70
|
+
signal1.addEventListener("abort", abort);
|
|
71
|
+
signal2.addEventListener("abort", abort);
|
|
72
|
+
return controller.signal;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Make fetch request with timeout and authentication
|
|
76
|
+
*/
|
|
77
|
+
async function makeFetchRequest(method, url, config, getToken, options) {
|
|
78
|
+
// Build headers
|
|
79
|
+
const headers = new Headers(config.defaultHeaders);
|
|
80
|
+
if (options?.headers) {
|
|
81
|
+
if (options.headers instanceof Headers) {
|
|
82
|
+
options.headers.forEach((value, key) => headers.set(key, value));
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
Object.entries(options.headers).forEach(([key, value]) => {
|
|
86
|
+
headers.set(key, String(value));
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
// Add authentication
|
|
91
|
+
if (!options?.skipAuth) {
|
|
92
|
+
const token = getToken();
|
|
93
|
+
if (token) {
|
|
94
|
+
headers.set("Authorization", `Bearer ${token}`);
|
|
95
|
+
}
|
|
96
|
+
// Note: MisoClient client-token is handled server-side, not in browser
|
|
97
|
+
}
|
|
98
|
+
// Create abort controller for timeout
|
|
99
|
+
const timeout = options?.timeout || config.timeout || 30000;
|
|
100
|
+
const controller = new AbortController();
|
|
101
|
+
const timeoutId = setTimeout(() => controller.abort(), timeout);
|
|
102
|
+
// Merge signals
|
|
103
|
+
const signal = options?.signal
|
|
104
|
+
? mergeSignals(controller.signal, options.signal)
|
|
105
|
+
: controller.signal;
|
|
106
|
+
try {
|
|
107
|
+
const response = await fetch(url, {
|
|
108
|
+
method,
|
|
109
|
+
headers,
|
|
110
|
+
body: options?.body,
|
|
111
|
+
signal,
|
|
112
|
+
...options,
|
|
113
|
+
});
|
|
114
|
+
clearTimeout(timeoutId);
|
|
115
|
+
return response;
|
|
116
|
+
}
|
|
117
|
+
catch (error) {
|
|
118
|
+
clearTimeout(timeoutId);
|
|
119
|
+
if (error instanceof Error && error.name === "AbortError") {
|
|
120
|
+
throw new data_client_types_1.TimeoutError(`Request timeout after ${timeout}ms`, timeout);
|
|
121
|
+
}
|
|
122
|
+
throw new data_client_types_1.NetworkError(`Network error: ${error instanceof Error ? error.message : "Unknown error"}`, error instanceof Error ? error : undefined);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Process successful response (cache, interceptors, audit)
|
|
127
|
+
*/
|
|
128
|
+
async function processSuccessfulResponse(response, data, method, endpoint, startTime, config, cache, cacheKey, cacheEnabled, misoClient, hasAnyToken, getToken, interceptors, metrics, options) {
|
|
129
|
+
const duration = Date.now() - startTime;
|
|
130
|
+
metrics.totalRequests++;
|
|
131
|
+
metrics.responseTimes.push(duration);
|
|
132
|
+
// Cache successful GET responses
|
|
133
|
+
if (cacheEnabled && response.ok) {
|
|
134
|
+
const ttl = options?.cache?.ttl || config.cache?.defaultTTL || 300;
|
|
135
|
+
(0, data_client_cache_1.setCacheEntry)(cache, cacheKey, data, ttl, config.cache?.maxSize || 100);
|
|
136
|
+
}
|
|
137
|
+
// Apply response interceptor
|
|
138
|
+
if (interceptors.onResponse) {
|
|
139
|
+
return await interceptors.onResponse(response, data);
|
|
140
|
+
}
|
|
141
|
+
// Audit logging
|
|
142
|
+
if (!options?.skipAudit) {
|
|
143
|
+
const requestSize = options?.body ? (0, data_client_utils_1.calculateSize)(options.body) : undefined;
|
|
144
|
+
const responseSize = (0, data_client_utils_1.calculateSize)(data);
|
|
145
|
+
await (0, data_client_audit_1.logDataClientAudit)(method, endpoint, response.status, duration, misoClient, config.audit, hasAnyToken, getToken, requestSize, responseSize, undefined, extractHeaders(options?.headers), extractHeaders(response.headers), options?.body, data);
|
|
146
|
+
}
|
|
147
|
+
// Handle error responses
|
|
148
|
+
if (!response.ok) {
|
|
149
|
+
throw new data_client_types_1.ApiError(`Request failed with status ${response.status}`, response.status, response);
|
|
150
|
+
}
|
|
151
|
+
return data;
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Handle non-retryable error (audit log and throw)
|
|
155
|
+
*/
|
|
156
|
+
async function handleNonRetryableError(error, method, endpoint, startTime, statusCode, responseStatus, config, misoClient, hasAnyToken, getToken, interceptors, metrics, options) {
|
|
157
|
+
const duration = Date.now() - startTime;
|
|
158
|
+
metrics.totalFailures++;
|
|
159
|
+
// Audit log error
|
|
160
|
+
if (!options?.skipAudit) {
|
|
161
|
+
await (0, data_client_audit_1.logDataClientAudit)(method, endpoint, statusCode || responseStatus || 401, duration, misoClient, config.audit, hasAnyToken, getToken, options?.body ? (0, data_client_utils_1.calculateSize)(options.body) : undefined, undefined, error, extractHeaders(options?.headers), undefined, options?.body, undefined);
|
|
162
|
+
}
|
|
163
|
+
throw error;
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Handle authentication error and throw immediately - does NOT retry
|
|
167
|
+
*/
|
|
168
|
+
/**
|
|
169
|
+
* Handle authentication error cleanup (synchronous only - no await)
|
|
170
|
+
*/
|
|
171
|
+
function handleAuthErrorCleanup(error, responseStatus, method, endpoint, startTime, config, misoClient, hasAnyToken, getToken, handleAuthError, metrics, options) {
|
|
172
|
+
// Call handleAuthError callback
|
|
173
|
+
handleAuthError();
|
|
174
|
+
// Update metrics
|
|
175
|
+
metrics.totalFailures++;
|
|
176
|
+
// Handle audit logging (fire and forget - don't await)
|
|
177
|
+
if (!options?.skipAudit) {
|
|
178
|
+
const duration = Date.now() - startTime;
|
|
179
|
+
(0, data_client_audit_1.logDataClientAudit)(method, endpoint, responseStatus, duration, misoClient, config.audit, hasAnyToken, getToken, options?.body ? (0, data_client_utils_1.calculateSize)(options.body) : undefined, undefined, error, extractHeaders(options?.headers), undefined, options?.body, undefined).catch(() => {
|
|
180
|
+
// Ignore audit logging errors
|
|
181
|
+
});
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Wait for retry delay
|
|
186
|
+
*/
|
|
187
|
+
async function waitForRetry(attempt, baseDelay, maxDelay) {
|
|
188
|
+
const delay = (0, data_client_utils_1.calculateBackoffDelay)(attempt, baseDelay, maxDelay);
|
|
189
|
+
await new Promise((resolve) => setTimeout(resolve, delay));
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Execute HTTP request with retry logic
|
|
193
|
+
*/
|
|
194
|
+
async function executeHttpRequest(method, fullUrl, endpoint, config, cache, cacheKey, cacheEnabled, startTime, misoClient, hasAnyToken, getToken, handleAuthError, interceptors, metrics, options) {
|
|
195
|
+
const maxRetries = options?.retries !== undefined
|
|
196
|
+
? options.retries
|
|
197
|
+
: config.retry?.maxRetries || 3;
|
|
198
|
+
const retryEnabled = config.retry?.enabled !== false;
|
|
199
|
+
const baseDelay = config.retry?.baseDelay || 1000;
|
|
200
|
+
const maxDelay = config.retry?.maxDelay || 10000;
|
|
201
|
+
// Flag to prevent retries when auth error is detected
|
|
202
|
+
let authErrorDetected = false;
|
|
203
|
+
// Internal recursive function to handle retries
|
|
204
|
+
async function attemptRequest(attempt) {
|
|
205
|
+
// If auth error was detected, don't make any more requests
|
|
206
|
+
if (authErrorDetected) {
|
|
207
|
+
throw new data_client_types_1.AuthenticationError("Authentication error detected - should not retry");
|
|
208
|
+
}
|
|
209
|
+
let responseStatus;
|
|
210
|
+
let response;
|
|
211
|
+
try {
|
|
212
|
+
response = await makeFetchRequest(method, fullUrl, config, getToken, options);
|
|
213
|
+
responseStatus = response.status;
|
|
214
|
+
// CRITICAL: Check for 401/403 errors IMMEDIATELY - do NOT retry
|
|
215
|
+
// Throw immediately without any retry logic
|
|
216
|
+
if (responseStatus === 401 || responseStatus === 403) {
|
|
217
|
+
authErrorDetected = true; // Set flag to prevent any retries
|
|
218
|
+
const authError = responseStatus === 401
|
|
219
|
+
? new data_client_types_1.AuthenticationError("Authentication required", response)
|
|
220
|
+
: new data_client_types_1.ApiError("Forbidden", 403, response);
|
|
221
|
+
// Handle cleanup (synchronous only)
|
|
222
|
+
handleAuthErrorCleanup(authError, responseStatus, method, endpoint, startTime, config, misoClient, hasAnyToken, getToken, handleAuthError, metrics, options);
|
|
223
|
+
// Throw immediately - this MUST exit the entire function, no retry, no recursion
|
|
224
|
+
throw authError;
|
|
225
|
+
}
|
|
226
|
+
// Parse response
|
|
227
|
+
const data = await parseResponse(response);
|
|
228
|
+
// Process successful response (cache, interceptors, audit)
|
|
229
|
+
return await processSuccessfulResponse(response, data, method, endpoint, startTime, config, cache, cacheKey, cacheEnabled, misoClient, hasAnyToken, getToken, interceptors, metrics, options);
|
|
230
|
+
}
|
|
231
|
+
catch (error) {
|
|
232
|
+
// CRITICAL: Check error type FIRST - we throw AuthenticationError from try block
|
|
233
|
+
// This is the most reliable check - if it's AuthenticationError, throw immediately
|
|
234
|
+
if (error instanceof data_client_types_1.AuthenticationError) {
|
|
235
|
+
authErrorDetected = true; // Set flag to prevent any retries
|
|
236
|
+
throw error; // This exits the function completely, no retry
|
|
237
|
+
}
|
|
238
|
+
// Check responseStatus - it's set before throw in try block
|
|
239
|
+
if (responseStatus === 401 || responseStatus === 403) {
|
|
240
|
+
authErrorDetected = true; // Set flag to prevent any retries
|
|
241
|
+
throw error; // This exits the function completely, no retry
|
|
242
|
+
}
|
|
243
|
+
// Check error name and statusCode as fallback
|
|
244
|
+
const errorObj = error;
|
|
245
|
+
if (errorObj.name === "AuthenticationError" ||
|
|
246
|
+
errorObj.statusCode === 401 ||
|
|
247
|
+
errorObj.statusCode === 403) {
|
|
248
|
+
authErrorDetected = true; // Set flag to prevent any retries
|
|
249
|
+
throw error; // This exits the function completely, no retry
|
|
250
|
+
}
|
|
251
|
+
// Determine if error is retryable
|
|
252
|
+
const errorResponseStatus = errorObj.response?.status;
|
|
253
|
+
const statusCode = error instanceof data_client_types_1.AuthenticationError
|
|
254
|
+
? 401
|
|
255
|
+
: (errorObj.statusCode ?? errorResponseStatus ?? responseStatus ?? undefined);
|
|
256
|
+
const isRetryable = retryEnabled &&
|
|
257
|
+
attempt < maxRetries &&
|
|
258
|
+
(0, data_client_utils_1.isRetryableError)(statusCode, error);
|
|
259
|
+
// If not retryable, handle and throw
|
|
260
|
+
// But skip handleNonRetryableError for auth errors - they're already handled
|
|
261
|
+
if (!isRetryable) {
|
|
262
|
+
// Double-check this is not an auth error before calling handleNonRetryableError
|
|
263
|
+
const isAuthError = error instanceof data_client_types_1.AuthenticationError ||
|
|
264
|
+
error.name === "AuthenticationError" ||
|
|
265
|
+
statusCode === 401 ||
|
|
266
|
+
statusCode === 403 ||
|
|
267
|
+
responseStatus === 401 ||
|
|
268
|
+
responseStatus === 403;
|
|
269
|
+
if (isAuthError) {
|
|
270
|
+
// Auth error - throw immediately without calling handleNonRetryableError
|
|
271
|
+
authErrorDetected = true; // Set flag to prevent any retries
|
|
272
|
+
throw error;
|
|
273
|
+
}
|
|
274
|
+
metrics.totalFailures++;
|
|
275
|
+
await handleNonRetryableError(error, method, endpoint, startTime, statusCode, responseStatus, config, misoClient, hasAnyToken, getToken, interceptors, metrics, options);
|
|
276
|
+
}
|
|
277
|
+
// If auth error was detected, don't retry
|
|
278
|
+
if (authErrorDetected) {
|
|
279
|
+
authErrorDetected = true; // Set flag to prevent any retries
|
|
280
|
+
throw error;
|
|
281
|
+
}
|
|
282
|
+
// Wait before retry, then recursively call with attempt+1
|
|
283
|
+
await waitForRetry(attempt, baseDelay, maxDelay);
|
|
284
|
+
return attemptRequest(attempt + 1);
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
// Start with attempt 0
|
|
288
|
+
try {
|
|
289
|
+
return await attemptRequest(0);
|
|
290
|
+
}
|
|
291
|
+
catch (error) {
|
|
292
|
+
// Check if this is an auth error - skip interceptor to prevent second call
|
|
293
|
+
const isAuthError = error instanceof data_client_types_1.AuthenticationError ||
|
|
294
|
+
error.name === "AuthenticationError" ||
|
|
295
|
+
error.statusCode === 401 ||
|
|
296
|
+
error.statusCode === 403;
|
|
297
|
+
// All retries exhausted or non-retryable error
|
|
298
|
+
metrics.totalFailures++;
|
|
299
|
+
// Skip interceptor for auth errors - they're already handled
|
|
300
|
+
if (interceptors.onError && !isAuthError) {
|
|
301
|
+
throw await interceptors.onError(error);
|
|
302
|
+
}
|
|
303
|
+
throw error;
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
//# sourceMappingURL=data-client-request.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data-client-request.js","sourceRoot":"","sources":["../../src/utils/data-client-request.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DataClient utility functions
|
|
3
|
+
* Browser environment utilities and helper functions
|
|
4
|
+
*/
|
|
5
|
+
import { ApiRequestOptions } from "../types/data-client.types";
|
|
6
|
+
/**
|
|
7
|
+
* Check if running in browser environment
|
|
8
|
+
*/
|
|
9
|
+
export declare function isBrowser(): boolean;
|
|
10
|
+
/**
|
|
11
|
+
* Get value from localStorage (browser only)
|
|
12
|
+
*/
|
|
13
|
+
export declare function getLocalStorage(key: string): string | null;
|
|
14
|
+
/**
|
|
15
|
+
* Set value in localStorage (browser only)
|
|
16
|
+
*/
|
|
17
|
+
export declare function setLocalStorage(key: string, value: string): void;
|
|
18
|
+
/**
|
|
19
|
+
* Remove value from localStorage (browser only)
|
|
20
|
+
*/
|
|
21
|
+
export declare function removeLocalStorage(key: string): void;
|
|
22
|
+
/**
|
|
23
|
+
* Extract userId from JWT token
|
|
24
|
+
*/
|
|
25
|
+
export declare function extractUserIdFromToken(token: string): string | null;
|
|
26
|
+
/**
|
|
27
|
+
* Calculate cache key from endpoint and options
|
|
28
|
+
*/
|
|
29
|
+
export declare function generateCacheKey(endpoint: string, options?: ApiRequestOptions): string;
|
|
30
|
+
/**
|
|
31
|
+
* Truncate large payloads before masking (performance optimization)
|
|
32
|
+
*/
|
|
33
|
+
export declare function truncatePayload(data: unknown, maxSize: number): {
|
|
34
|
+
data: unknown;
|
|
35
|
+
truncated: boolean;
|
|
36
|
+
};
|
|
37
|
+
/**
|
|
38
|
+
* Calculate request/response sizes
|
|
39
|
+
*/
|
|
40
|
+
export declare function calculateSize(data: unknown): number;
|
|
41
|
+
/**
|
|
42
|
+
* Check if error is retryable
|
|
43
|
+
*/
|
|
44
|
+
export declare function isRetryableError(statusCode?: number, _error?: Error): boolean;
|
|
45
|
+
/**
|
|
46
|
+
* Calculate exponential backoff delay
|
|
47
|
+
*/
|
|
48
|
+
export declare function calculateBackoffDelay(attempt: number, baseDelay: number, maxDelay: number): number;
|
|
49
|
+
//# sourceMappingURL=data-client-utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data-client-utils.d.ts","sourceRoot":"","sources":["../../src/utils/data-client-utils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAG/D;;GAEG;AACH,wBAAgB,SAAS,IAAI,OAAO,CAMnC;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAO1D;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAOhE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAOpD;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAUnE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,iBAAiB,GAAG,MAAM,CAItF;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,IAAI,EAAE,OAAO,EACb,OAAO,EAAE,MAAM,GACd;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,CASvC;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAMnD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,KAAK,GAAG,OAAO,CAQ7E;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,GACf,MAAM,CAGR"}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* DataClient utility functions
|
|
4
|
+
* Browser environment utilities and helper functions
|
|
5
|
+
*/
|
|
6
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
7
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
8
|
+
};
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.isBrowser = isBrowser;
|
|
11
|
+
exports.getLocalStorage = getLocalStorage;
|
|
12
|
+
exports.setLocalStorage = setLocalStorage;
|
|
13
|
+
exports.removeLocalStorage = removeLocalStorage;
|
|
14
|
+
exports.extractUserIdFromToken = extractUserIdFromToken;
|
|
15
|
+
exports.generateCacheKey = generateCacheKey;
|
|
16
|
+
exports.truncatePayload = truncatePayload;
|
|
17
|
+
exports.calculateSize = calculateSize;
|
|
18
|
+
exports.isRetryableError = isRetryableError;
|
|
19
|
+
exports.calculateBackoffDelay = calculateBackoffDelay;
|
|
20
|
+
const jsonwebtoken_1 = __importDefault(require("jsonwebtoken"));
|
|
21
|
+
/**
|
|
22
|
+
* Check if running in browser environment
|
|
23
|
+
*/
|
|
24
|
+
function isBrowser() {
|
|
25
|
+
return (typeof globalThis.window !== "undefined" &&
|
|
26
|
+
typeof globalThis.localStorage !== "undefined" &&
|
|
27
|
+
typeof globalThis.fetch !== "undefined");
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Get value from localStorage (browser only)
|
|
31
|
+
*/
|
|
32
|
+
function getLocalStorage(key) {
|
|
33
|
+
if (!isBrowser())
|
|
34
|
+
return null;
|
|
35
|
+
try {
|
|
36
|
+
return globalThis.localStorage.getItem(key);
|
|
37
|
+
}
|
|
38
|
+
catch {
|
|
39
|
+
return null;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Set value in localStorage (browser only)
|
|
44
|
+
*/
|
|
45
|
+
function setLocalStorage(key, value) {
|
|
46
|
+
if (!isBrowser())
|
|
47
|
+
return;
|
|
48
|
+
try {
|
|
49
|
+
globalThis.localStorage.setItem(key, value);
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
52
|
+
// Ignore localStorage errors (SSR, private browsing, etc.)
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Remove value from localStorage (browser only)
|
|
57
|
+
*/
|
|
58
|
+
function removeLocalStorage(key) {
|
|
59
|
+
if (!isBrowser())
|
|
60
|
+
return;
|
|
61
|
+
try {
|
|
62
|
+
globalThis.localStorage.removeItem(key);
|
|
63
|
+
}
|
|
64
|
+
catch {
|
|
65
|
+
// Ignore localStorage errors (SSR, private browsing, etc.)
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Extract userId from JWT token
|
|
70
|
+
*/
|
|
71
|
+
function extractUserIdFromToken(token) {
|
|
72
|
+
try {
|
|
73
|
+
const decoded = jsonwebtoken_1.default.decode(token);
|
|
74
|
+
if (!decoded)
|
|
75
|
+
return null;
|
|
76
|
+
return (decoded.sub || decoded.userId || decoded.user_id || decoded.id);
|
|
77
|
+
}
|
|
78
|
+
catch {
|
|
79
|
+
return null;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Calculate cache key from endpoint and options
|
|
84
|
+
*/
|
|
85
|
+
function generateCacheKey(endpoint, options) {
|
|
86
|
+
const method = options?.method || "GET";
|
|
87
|
+
const body = options?.body ? JSON.stringify(options.body) : "";
|
|
88
|
+
return `data-client:${method}:${endpoint}:${body}`;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Truncate large payloads before masking (performance optimization)
|
|
92
|
+
*/
|
|
93
|
+
function truncatePayload(data, maxSize) {
|
|
94
|
+
const json = JSON.stringify(data);
|
|
95
|
+
if (json.length <= maxSize) {
|
|
96
|
+
return { data, truncated: false };
|
|
97
|
+
}
|
|
98
|
+
return {
|
|
99
|
+
data: { _message: "Payload truncated for performance", _size: json.length },
|
|
100
|
+
truncated: true,
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Calculate request/response sizes
|
|
105
|
+
*/
|
|
106
|
+
function calculateSize(data) {
|
|
107
|
+
try {
|
|
108
|
+
return JSON.stringify(data).length;
|
|
109
|
+
}
|
|
110
|
+
catch {
|
|
111
|
+
return 0;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Check if error is retryable
|
|
116
|
+
*/
|
|
117
|
+
function isRetryableError(statusCode, _error) {
|
|
118
|
+
if (!statusCode)
|
|
119
|
+
return true; // Network errors are retryable
|
|
120
|
+
if (statusCode >= 500)
|
|
121
|
+
return true; // Server errors
|
|
122
|
+
if (statusCode === 408)
|
|
123
|
+
return true; // Timeout
|
|
124
|
+
if (statusCode === 429)
|
|
125
|
+
return true; // Rate limit
|
|
126
|
+
if (statusCode === 401 || statusCode === 403)
|
|
127
|
+
return false; // Auth errors
|
|
128
|
+
if (statusCode >= 400 && statusCode < 500)
|
|
129
|
+
return false; // Client errors
|
|
130
|
+
return false;
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Calculate exponential backoff delay
|
|
134
|
+
*/
|
|
135
|
+
function calculateBackoffDelay(attempt, baseDelay, maxDelay) {
|
|
136
|
+
const delay = Math.min(baseDelay * Math.pow(2, attempt), maxDelay);
|
|
137
|
+
return delay + Math.random() * 1000; // Add jitter
|
|
138
|
+
}
|
|
139
|
+
//# sourceMappingURL=data-client-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data-client-utils.js","sourceRoot":"","sources":["../../src/utils/data-client-utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -74,39 +74,10 @@ export declare class DataClient {
|
|
|
74
74
|
* Get request metrics
|
|
75
75
|
*/
|
|
76
76
|
getMetrics(): RequestMetrics;
|
|
77
|
-
/**
|
|
78
|
-
* Check if endpoint should skip audit logging
|
|
79
|
-
*/
|
|
80
|
-
private shouldSkipAudit;
|
|
81
|
-
/**
|
|
82
|
-
* Log audit event (ISO 27001 compliance)
|
|
83
|
-
* Skips audit logging if no authentication token is available (user token OR client token)
|
|
84
|
-
*/
|
|
85
|
-
private logAuditEvent;
|
|
86
77
|
/**
|
|
87
78
|
* Make HTTP request with all features (caching, retry, deduplication, audit)
|
|
88
79
|
*/
|
|
89
80
|
private request;
|
|
90
|
-
/**
|
|
91
|
-
* Execute HTTP request with retry logic
|
|
92
|
-
*/
|
|
93
|
-
private executeRequest;
|
|
94
|
-
/**
|
|
95
|
-
* Make fetch request with timeout and authentication
|
|
96
|
-
*/
|
|
97
|
-
private makeFetchRequest;
|
|
98
|
-
/**
|
|
99
|
-
* Merge AbortSignals
|
|
100
|
-
*/
|
|
101
|
-
private mergeSignals;
|
|
102
|
-
/**
|
|
103
|
-
* Parse response based on content type
|
|
104
|
-
*/
|
|
105
|
-
private parseResponse;
|
|
106
|
-
/**
|
|
107
|
-
* Extract headers from Headers object or Record
|
|
108
|
-
*/
|
|
109
|
-
private extractHeaders;
|
|
110
81
|
/**
|
|
111
82
|
* Handle authentication error
|
|
112
83
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data-client.d.ts","sourceRoot":"","sources":["../../src/utils/data-client.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,iBAAiB,EACjB,cAAc,EAEd,WAAW,
|
|
1
|
+
{"version":3,"file":"data-client.d.ts","sourceRoot":"","sources":["../../src/utils/data-client.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,iBAAiB,EACjB,cAAc,EAEd,WAAW,EACZ,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAoBhD,qBAAa,UAAU;IACrB,OAAO,CAAC,MAAM,CAAmB;IACjC,OAAO,CAAC,UAAU,CAA2B;IAC7C,OAAO,CAAC,KAAK,CAAsC;IACnD,OAAO,CAAC,eAAe,CAA4C;IACnE,OAAO,CAAC,YAAY,CAAyB;IAC7C,OAAO,CAAC,OAAO,CAYb;gBAEU,MAAM,EAAE,gBAAgB;IAmFpC;;OAEG;IACH,OAAO,CAAC,QAAQ;IAIhB;;OAEG;IACH,OAAO,CAAC,cAAc;IAItB;;OAEG;IACH,OAAO,CAAC,WAAW;IAQnB;;;;OAIG;YACW,cAAc;IAQ5B;;;;OAIG;IACH,OAAO,CAAC,gBAAgB;IAIxB;;OAEG;IACH,eAAe,IAAI,OAAO;IAI1B;;;;OAIG;IACG,eAAe,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI1D;;;;OAIG;IACG,MAAM,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAUjD;;OAEG;IACH,eAAe,CAAC,MAAM,EAAE,iBAAiB,GAAG,IAAI;IAIhD;;OAEG;IACH,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,IAAI;IAIlD;;;;OAIG;IACH,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI;IAkB7D;;OAEG;IACH,UAAU,IAAI,IAAI;IAIlB;;OAEG;IACH,UAAU,IAAI,cAAc;IA8B5B;;OAEG;YACW,OAAO;IAsErB;;OAEG;IACH,OAAO,CAAC,eAAe;IASvB;;OAEG;YACW,uBAAuB;IAYrC;;OAEG;IACG,GAAG,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,CAAC,CAAC;IAQvE;;OAEG;IACG,IAAI,CAAC,CAAC,EACV,QAAQ,EAAE,MAAM,EAChB,IAAI,CAAC,EAAE,OAAO,EACd,OAAO,CAAC,EAAE,iBAAiB,GAC1B,OAAO,CAAC,CAAC,CAAC;IAab;;OAEG;IACG,GAAG,CAAC,CAAC,EACT,QAAQ,EAAE,MAAM,EAChB,IAAI,CAAC,EAAE,OAAO,EACd,OAAO,CAAC,EAAE,iBAAiB,GAC1B,OAAO,CAAC,CAAC,CAAC;IAab;;OAEG;IACG,KAAK,CAAC,CAAC,EACX,QAAQ,EAAE,MAAM,EAChB,IAAI,CAAC,EAAE,OAAO,EACd,OAAO,CAAC,EAAE,iBAAiB,GAC1B,OAAO,CAAC,CAAC,CAAC;IAab;;OAEG;IACG,MAAM,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,CAAC,CAAC;IAQ1E;;;;;;;OAOG;IACG,mBAAmB,IAAI,OAAO,CAAC,MAAM,CAAC;IAI5C;;;;;OAKG;IACH,kBAAkB,IAAI,eAAe,GAAG,IAAI;CAG7C;AAOD;;GAEG;AACH,wBAAgB,UAAU,CAAC,MAAM,CAAC,EAAE,gBAAgB,GAAG,UAAU,CAUhE"}
|