@oxyhq/services 5.13.25 → 5.13.26

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 (85) hide show
  1. package/lib/commonjs/core/HttpService.js +481 -0
  2. package/lib/commonjs/core/HttpService.js.map +1 -0
  3. package/lib/commonjs/core/OxyServices.base.js +29 -26
  4. package/lib/commonjs/core/OxyServices.base.js.map +1 -1
  5. package/lib/commonjs/core/OxyServices.js +1 -2
  6. package/lib/commonjs/core/OxyServices.js.map +1 -1
  7. package/lib/commonjs/core/mixins/OxyServices.assets.js +3 -2
  8. package/lib/commonjs/core/mixins/OxyServices.assets.js.map +1 -1
  9. package/lib/commonjs/core/mixins/OxyServices.user.js +9 -5
  10. package/lib/commonjs/core/mixins/OxyServices.user.js.map +1 -1
  11. package/lib/commonjs/core/mixins/OxyServices.utility.js +1 -0
  12. package/lib/commonjs/core/mixins/OxyServices.utility.js.map +1 -1
  13. package/lib/commonjs/utils/errorUtils.js +35 -15
  14. package/lib/commonjs/utils/errorUtils.js.map +1 -1
  15. package/lib/module/core/HttpService.js +476 -0
  16. package/lib/module/core/HttpService.js.map +1 -0
  17. package/lib/module/core/OxyServices.base.js +29 -26
  18. package/lib/module/core/OxyServices.base.js.map +1 -1
  19. package/lib/module/core/OxyServices.js +1 -2
  20. package/lib/module/core/OxyServices.js.map +1 -1
  21. package/lib/module/core/mixins/OxyServices.assets.js +3 -2
  22. package/lib/module/core/mixins/OxyServices.assets.js.map +1 -1
  23. package/lib/module/core/mixins/OxyServices.user.js +9 -5
  24. package/lib/module/core/mixins/OxyServices.user.js.map +1 -1
  25. package/lib/module/core/mixins/OxyServices.utility.js +1 -0
  26. package/lib/module/core/mixins/OxyServices.utility.js.map +1 -1
  27. package/lib/module/utils/errorUtils.js +36 -15
  28. package/lib/module/utils/errorUtils.js.map +1 -1
  29. package/lib/typescript/core/HttpService.d.ts +111 -0
  30. package/lib/typescript/core/HttpService.d.ts.map +1 -0
  31. package/lib/typescript/core/OxyServices.base.d.ts +6 -8
  32. package/lib/typescript/core/OxyServices.base.d.ts.map +1 -1
  33. package/lib/typescript/core/OxyServices.d.ts +1 -2
  34. package/lib/typescript/core/OxyServices.d.ts.map +1 -1
  35. package/lib/typescript/core/mixins/OxyServices.analytics.d.ts +4 -5
  36. package/lib/typescript/core/mixins/OxyServices.analytics.d.ts.map +1 -1
  37. package/lib/typescript/core/mixins/OxyServices.assets.d.ts +4 -5
  38. package/lib/typescript/core/mixins/OxyServices.assets.d.ts.map +1 -1
  39. package/lib/typescript/core/mixins/OxyServices.auth.d.ts +4 -5
  40. package/lib/typescript/core/mixins/OxyServices.auth.d.ts.map +1 -1
  41. package/lib/typescript/core/mixins/OxyServices.developer.d.ts +4 -5
  42. package/lib/typescript/core/mixins/OxyServices.developer.d.ts.map +1 -1
  43. package/lib/typescript/core/mixins/OxyServices.devices.d.ts +4 -5
  44. package/lib/typescript/core/mixins/OxyServices.devices.d.ts.map +1 -1
  45. package/lib/typescript/core/mixins/OxyServices.karma.d.ts +4 -5
  46. package/lib/typescript/core/mixins/OxyServices.karma.d.ts.map +1 -1
  47. package/lib/typescript/core/mixins/OxyServices.language.d.ts +4 -5
  48. package/lib/typescript/core/mixins/OxyServices.language.d.ts.map +1 -1
  49. package/lib/typescript/core/mixins/OxyServices.location.d.ts +4 -5
  50. package/lib/typescript/core/mixins/OxyServices.location.d.ts.map +1 -1
  51. package/lib/typescript/core/mixins/OxyServices.payment.d.ts +4 -5
  52. package/lib/typescript/core/mixins/OxyServices.payment.d.ts.map +1 -1
  53. package/lib/typescript/core/mixins/OxyServices.privacy.d.ts +4 -5
  54. package/lib/typescript/core/mixins/OxyServices.privacy.d.ts.map +1 -1
  55. package/lib/typescript/core/mixins/OxyServices.totp.d.ts +4 -5
  56. package/lib/typescript/core/mixins/OxyServices.totp.d.ts.map +1 -1
  57. package/lib/typescript/core/mixins/OxyServices.user.d.ts +4 -5
  58. package/lib/typescript/core/mixins/OxyServices.user.d.ts.map +1 -1
  59. package/lib/typescript/core/mixins/OxyServices.utility.d.ts +4 -5
  60. package/lib/typescript/core/mixins/OxyServices.utility.d.ts.map +1 -1
  61. package/lib/typescript/core/mixins/index.d.ts +52 -65
  62. package/lib/typescript/core/mixins/index.d.ts.map +1 -1
  63. package/lib/typescript/utils/errorUtils.d.ts.map +1 -1
  64. package/package.json +1 -1
  65. package/src/core/HttpService.ts +523 -0
  66. package/src/core/OxyServices.base.ts +36 -34
  67. package/src/core/OxyServices.ts +1 -2
  68. package/src/core/mixins/OxyServices.assets.ts +2 -1
  69. package/src/core/mixins/OxyServices.user.ts +7 -6
  70. package/src/core/mixins/OxyServices.utility.ts +1 -0
  71. package/src/utils/errorUtils.ts +65 -19
  72. package/lib/commonjs/core/HttpClient.js +0 -317
  73. package/lib/commonjs/core/HttpClient.js.map +0 -1
  74. package/lib/commonjs/core/RequestManager.js +0 -170
  75. package/lib/commonjs/core/RequestManager.js.map +0 -1
  76. package/lib/module/core/HttpClient.js +0 -311
  77. package/lib/module/core/HttpClient.js.map +0 -1
  78. package/lib/module/core/RequestManager.js +0 -165
  79. package/lib/module/core/RequestManager.js.map +0 -1
  80. package/lib/typescript/core/HttpClient.d.ts +0 -110
  81. package/lib/typescript/core/HttpClient.d.ts.map +0 -1
  82. package/lib/typescript/core/RequestManager.d.ts +0 -63
  83. package/lib/typescript/core/RequestManager.d.ts.map +0 -1
  84. package/src/core/HttpClient.ts +0 -346
  85. package/src/core/RequestManager.ts +0 -205
@@ -0,0 +1,481 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.HttpService = void 0;
7
+ var _cache = require("../utils/cache");
8
+ var _requestUtils = require("../utils/requestUtils");
9
+ var _asyncUtils = require("../utils/asyncUtils");
10
+ var _errorUtils = require("../utils/errorUtils");
11
+ var _jwtDecode = require("jwt-decode");
12
+ /**
13
+ * Unified HTTP Service
14
+ *
15
+ * Consolidates HttpClient + RequestManager into a single efficient class.
16
+ * Uses native fetch instead of axios for smaller bundle size.
17
+ *
18
+ * Handles:
19
+ * - Authentication (token management, auto-refresh)
20
+ * - Caching (TTL-based)
21
+ * - Deduplication (concurrent requests)
22
+ * - Retry logic
23
+ * - Error handling
24
+ * - Request queuing
25
+ */
26
+
27
+ /**
28
+ * Token store for authentication (singleton)
29
+ */
30
+ class TokenStore {
31
+ accessToken = null;
32
+ refreshToken = null;
33
+ constructor() {}
34
+ static getInstance() {
35
+ if (!TokenStore.instance) {
36
+ TokenStore.instance = new TokenStore();
37
+ }
38
+ return TokenStore.instance;
39
+ }
40
+ setTokens(accessToken, refreshToken = '') {
41
+ this.accessToken = accessToken;
42
+ this.refreshToken = refreshToken;
43
+ }
44
+ getAccessToken() {
45
+ return this.accessToken;
46
+ }
47
+ getRefreshToken() {
48
+ return this.refreshToken;
49
+ }
50
+ clearTokens() {
51
+ this.accessToken = null;
52
+ this.refreshToken = null;
53
+ }
54
+ hasAccessToken() {
55
+ return !!this.accessToken;
56
+ }
57
+ }
58
+
59
+ /**
60
+ * Unified HTTP Service
61
+ *
62
+ * Consolidates HttpClient + RequestManager into a single efficient class.
63
+ * Uses native fetch instead of axios for smaller bundle size.
64
+ */
65
+ class HttpService {
66
+ // Performance monitoring
67
+ requestMetrics = {
68
+ totalRequests: 0,
69
+ successfulRequests: 0,
70
+ failedRequests: 0,
71
+ cacheHits: 0,
72
+ cacheMisses: 0,
73
+ averageResponseTime: 0
74
+ };
75
+ constructor(config) {
76
+ this.config = config;
77
+ this.baseURL = config.baseURL;
78
+ this.tokenStore = TokenStore.getInstance();
79
+ this.logger = new _requestUtils.SimpleLogger(config.enableLogging || false, config.logLevel || 'error', 'HttpService');
80
+
81
+ // Initialize performance infrastructure
82
+ this.cache = new _cache.TTLCache(config.cacheTTL || 5 * 60 * 1000);
83
+ (0, _cache.registerCacheForCleanup)(this.cache);
84
+ this.deduplicator = new _requestUtils.RequestDeduplicator();
85
+ this.requestQueue = new _requestUtils.RequestQueue(config.maxConcurrentRequests || 10, config.requestQueueSize || 100);
86
+ }
87
+
88
+ /**
89
+ * Main request method - handles everything in one place
90
+ */
91
+ async request(config) {
92
+ const {
93
+ method,
94
+ url,
95
+ data,
96
+ params,
97
+ timeout = this.config.requestTimeout || 5000,
98
+ signal,
99
+ cache = method === 'GET',
100
+ cacheTTL,
101
+ deduplicate = true,
102
+ retry = this.config.enableRetry !== false,
103
+ maxRetries = this.config.maxRetries || 3
104
+ } = config;
105
+
106
+ // Generate cache key (optimized for large objects)
107
+ const cacheKey = cache ? this.generateCacheKey(method, url, data || params) : null;
108
+
109
+ // Check cache first
110
+ if (cache && cacheKey) {
111
+ const cached = this.cache.get(cacheKey);
112
+ if (cached !== null) {
113
+ this.requestMetrics.cacheHits++;
114
+ this.logger.debug('Cache hit:', url);
115
+ return cached;
116
+ }
117
+ this.requestMetrics.cacheMisses++;
118
+ }
119
+
120
+ // Request function
121
+ const requestFn = async () => {
122
+ const startTime = Date.now();
123
+ try {
124
+ // Build URL with params
125
+ const fullUrl = this.buildURL(url, params);
126
+
127
+ // Get auth token (with auto-refresh)
128
+ const authHeader = await this.getAuthHeader();
129
+
130
+ // Determine if data is FormData
131
+ const isFormData = data instanceof FormData;
132
+
133
+ // Make fetch request
134
+ const controller = new AbortController();
135
+ const timeoutId = timeout ? setTimeout(() => controller.abort(), timeout) : null;
136
+ if (signal) {
137
+ signal.addEventListener('abort', () => controller.abort());
138
+ }
139
+
140
+ // Build headers
141
+ const headers = {
142
+ 'Accept': 'application/json'
143
+ };
144
+
145
+ // Only set Content-Type for non-FormData requests (FormData sets it automatically with boundary)
146
+ if (!isFormData) {
147
+ headers['Content-Type'] = 'application/json';
148
+ }
149
+ if (authHeader) {
150
+ headers['Authorization'] = authHeader;
151
+ }
152
+ const response = await fetch(fullUrl, {
153
+ method,
154
+ headers,
155
+ body: method !== 'GET' && data ? isFormData ? data : JSON.stringify(data) : undefined,
156
+ signal: controller.signal
157
+ });
158
+ if (timeoutId) clearTimeout(timeoutId);
159
+
160
+ // Handle response
161
+ if (!response.ok) {
162
+ if (response.status === 401) {
163
+ this.tokenStore.clearTokens();
164
+ }
165
+
166
+ // Try to parse error response (handle empty/malformed JSON)
167
+ let errorMessage = `HTTP ${response.status}: ${response.statusText}`;
168
+ const contentType = response.headers.get('content-type');
169
+ if (contentType && contentType.includes('application/json')) {
170
+ try {
171
+ const errorData = await response.json();
172
+ if (errorData?.message) {
173
+ errorMessage = errorData.message;
174
+ }
175
+ } catch (parseError) {
176
+ // Malformed JSON or empty response - use status text
177
+ this.logger.warn('Failed to parse error response JSON:', parseError);
178
+ }
179
+ }
180
+ const error = new Error(errorMessage);
181
+ error.status = response.status;
182
+ error.response = {
183
+ status: response.status,
184
+ statusText: response.statusText
185
+ };
186
+ throw error;
187
+ }
188
+
189
+ // Handle different response types (optimized - read response once)
190
+ const contentType = response.headers.get('content-type');
191
+ let responseData;
192
+ if (contentType && contentType.includes('application/json')) {
193
+ // Use response.json() directly for better performance
194
+ try {
195
+ responseData = await response.json();
196
+ // Handle null/undefined responses
197
+ if (responseData === null || responseData === undefined) {
198
+ responseData = null;
199
+ } else {
200
+ // Unwrap standardized API response format for JSON
201
+ responseData = this.unwrapResponse(responseData);
202
+ }
203
+ } catch (parseError) {
204
+ // Handle malformed JSON or empty responses gracefully
205
+ // Note: Once response.json() is called, the body is consumed and cannot be read again
206
+ // So we check the error type to determine if it's empty or malformed
207
+ if (parseError instanceof SyntaxError) {
208
+ this.logger.warn('Failed to parse JSON response (malformed or empty):', parseError);
209
+ // SyntaxError typically means empty or malformed JSON
210
+ // For empty responses, return null; for malformed JSON, throw descriptive error
211
+ responseData = null; // Treat as empty response for safety
212
+ } else {
213
+ this.logger.warn('Failed to read response:', parseError);
214
+ throw new Error('Failed to read response from server');
215
+ }
216
+ }
217
+ } else if (contentType && (contentType.includes('application/octet-stream') || contentType.includes('image/') || contentType.includes('video/') || contentType.includes('audio/'))) {
218
+ // For binary responses (blobs), return the blob directly without unwrapping
219
+ responseData = await response.blob();
220
+ } else {
221
+ // For other responses, return as text
222
+ const text = await response.text();
223
+ responseData = text || null;
224
+ }
225
+ const duration = Date.now() - startTime;
226
+ this.updateMetrics(true, duration);
227
+ this.config.onRequestEnd?.(url, method, duration, true);
228
+ return responseData;
229
+ } catch (error) {
230
+ const duration = Date.now() - startTime;
231
+ this.updateMetrics(false, duration);
232
+ this.config.onRequestEnd?.(url, method, duration, false);
233
+ this.config.onRequestError?.(url, method, error instanceof Error ? error : new Error(String(error)));
234
+
235
+ // Handle AbortError specifically for better error messages
236
+ if (error instanceof Error && error.name === 'AbortError') {
237
+ throw (0, _errorUtils.handleHttpError)(error);
238
+ }
239
+ throw (0, _errorUtils.handleHttpError)(error);
240
+ }
241
+ };
242
+
243
+ // Wrap with retry if enabled
244
+ const requestWithRetry = retry ? () => (0, _asyncUtils.retryAsync)(requestFn, maxRetries, this.config.retryDelay || 1000) : requestFn;
245
+
246
+ // Wrap with deduplication if enabled (use optimized key generation)
247
+ const dedupeKey = deduplicate ? this.generateCacheKey(method, url, data || params) : null;
248
+ const finalRequest = dedupeKey ? () => this.deduplicator.deduplicate(dedupeKey, requestWithRetry) : requestWithRetry;
249
+
250
+ // Execute request (with queue if needed)
251
+ const result = await this.requestQueue.enqueue(finalRequest);
252
+
253
+ // Cache the result if caching is enabled
254
+ if (cache && cacheKey && result) {
255
+ this.cache.set(cacheKey, result, cacheTTL);
256
+ }
257
+ return result;
258
+ }
259
+
260
+ /**
261
+ * Generate cache key efficiently
262
+ * Uses simple hash for large objects to avoid expensive JSON.stringify
263
+ */
264
+ generateCacheKey(method, url, data) {
265
+ if (!data || typeof data === 'object' && Object.keys(data).length === 0) {
266
+ return `${method}:${url}`;
267
+ }
268
+
269
+ // For small objects, use JSON.stringify
270
+ const dataStr = JSON.stringify(data);
271
+ if (dataStr.length < 1000) {
272
+ return `${method}:${url}:${dataStr}`;
273
+ }
274
+
275
+ // For large objects, use a simple hash based on keys and values length
276
+ // This avoids expensive serialization while still being unique enough
277
+ const hash = typeof data === 'object' && data !== null ? Object.keys(data).sort().join(',') + ':' + dataStr.length : String(data).substring(0, 100);
278
+ return `${method}:${url}:${hash}`;
279
+ }
280
+
281
+ /**
282
+ * Build full URL with query params
283
+ */
284
+ buildURL(url, params) {
285
+ const base = url.startsWith('http') ? url : `${this.baseURL}${url}`;
286
+ if (!params || Object.keys(params).length === 0) {
287
+ return base;
288
+ }
289
+ const searchParams = new URLSearchParams();
290
+ Object.entries(params).forEach(([key, value]) => {
291
+ if (value !== undefined && value !== null) {
292
+ searchParams.append(key, String(value));
293
+ }
294
+ });
295
+ const queryString = searchParams.toString();
296
+ return queryString ? `${base}${base.includes('?') ? '&' : '?'}${queryString}` : base;
297
+ }
298
+
299
+ /**
300
+ * Get auth header with automatic token refresh
301
+ */
302
+ async getAuthHeader() {
303
+ const accessToken = this.tokenStore.getAccessToken();
304
+ if (!accessToken) {
305
+ return null;
306
+ }
307
+ try {
308
+ const decoded = (0, _jwtDecode.jwtDecode)(accessToken);
309
+ const currentTime = Math.floor(Date.now() / 1000);
310
+
311
+ // If token expires in less than 60 seconds, refresh it
312
+ if (decoded.exp && decoded.exp - currentTime < 60 && decoded.sessionId) {
313
+ try {
314
+ const refreshUrl = `${this.baseURL}/api/session/token/${decoded.sessionId}`;
315
+
316
+ // Use AbortSignal.timeout for consistent timeout handling
317
+ const response = await fetch(refreshUrl, {
318
+ method: 'GET',
319
+ headers: {
320
+ 'Accept': 'application/json'
321
+ },
322
+ signal: AbortSignal.timeout(5000)
323
+ });
324
+ if (response.ok) {
325
+ const {
326
+ accessToken: newToken
327
+ } = await response.json();
328
+ this.tokenStore.setTokens(newToken);
329
+ this.logger.debug('Token refreshed');
330
+ return `Bearer ${newToken}`;
331
+ }
332
+ } catch (refreshError) {
333
+ this.logger.warn('Token refresh failed, using current token');
334
+ }
335
+ }
336
+ return `Bearer ${accessToken}`;
337
+ } catch (error) {
338
+ this.logger.error('Error processing token:', error);
339
+ return `Bearer ${accessToken}`;
340
+ }
341
+ }
342
+
343
+ /**
344
+ * Unwrap standardized API response format
345
+ */
346
+ unwrapResponse(responseData) {
347
+ // Handle paginated responses: { data: [...], pagination: {...} }
348
+ if (responseData && typeof responseData === 'object' && 'data' in responseData && 'pagination' in responseData) {
349
+ return responseData;
350
+ }
351
+
352
+ // Handle regular success responses: { data: ... }
353
+ if (responseData && typeof responseData === 'object' && 'data' in responseData && !Array.isArray(responseData)) {
354
+ return responseData.data;
355
+ }
356
+
357
+ // Return as-is for responses that don't use sendSuccess wrapper
358
+ return responseData;
359
+ }
360
+
361
+ /**
362
+ * Update request metrics
363
+ */
364
+ updateMetrics(success, duration) {
365
+ this.requestMetrics.totalRequests++;
366
+ if (success) {
367
+ this.requestMetrics.successfulRequests++;
368
+ } else {
369
+ this.requestMetrics.failedRequests++;
370
+ }
371
+ const alpha = 0.1;
372
+ this.requestMetrics.averageResponseTime = this.requestMetrics.averageResponseTime * (1 - alpha) + duration * alpha;
373
+ }
374
+
375
+ // Convenience methods (for backward compatibility)
376
+ async get(url, config) {
377
+ const result = await this.request({
378
+ method: 'GET',
379
+ url,
380
+ ...config
381
+ });
382
+ return {
383
+ data: result
384
+ };
385
+ }
386
+ async post(url, data, config) {
387
+ const result = await this.request({
388
+ method: 'POST',
389
+ url,
390
+ data,
391
+ ...config
392
+ });
393
+ return {
394
+ data: result
395
+ };
396
+ }
397
+ async put(url, data, config) {
398
+ const result = await this.request({
399
+ method: 'PUT',
400
+ url,
401
+ data,
402
+ ...config
403
+ });
404
+ return {
405
+ data: result
406
+ };
407
+ }
408
+ async patch(url, data, config) {
409
+ const result = await this.request({
410
+ method: 'PATCH',
411
+ url,
412
+ data,
413
+ ...config
414
+ });
415
+ return {
416
+ data: result
417
+ };
418
+ }
419
+ async delete(url, config) {
420
+ const result = await this.request({
421
+ method: 'DELETE',
422
+ url,
423
+ ...config
424
+ });
425
+ return {
426
+ data: result
427
+ };
428
+ }
429
+
430
+ // Token management
431
+ setTokens(accessToken, refreshToken = '') {
432
+ this.tokenStore.setTokens(accessToken, refreshToken);
433
+ }
434
+ clearTokens() {
435
+ this.tokenStore.clearTokens();
436
+ }
437
+ getAccessToken() {
438
+ return this.tokenStore.getAccessToken();
439
+ }
440
+ hasAccessToken() {
441
+ return this.tokenStore.hasAccessToken();
442
+ }
443
+ getBaseURL() {
444
+ return this.baseURL;
445
+ }
446
+
447
+ // Cache management
448
+ clearCache() {
449
+ this.cache.clear();
450
+ }
451
+ clearCacheEntry(key) {
452
+ this.cache.delete(key);
453
+ }
454
+ getCacheStats() {
455
+ const cacheStats = this.cache.getStats();
456
+ const total = this.requestMetrics.cacheHits + this.requestMetrics.cacheMisses;
457
+ return {
458
+ size: cacheStats.size,
459
+ hits: this.requestMetrics.cacheHits,
460
+ misses: this.requestMetrics.cacheMisses,
461
+ hitRate: total > 0 ? this.requestMetrics.cacheHits / total : 0
462
+ };
463
+ }
464
+ getMetrics() {
465
+ return {
466
+ ...this.requestMetrics
467
+ };
468
+ }
469
+
470
+ // Test-only utility
471
+ static __resetTokensForTests() {
472
+ try {
473
+ TokenStore.getInstance().clearTokens();
474
+ } catch (error) {
475
+ // Silently fail in test cleanup - this is expected behavior
476
+ // TokenStore might not be initialized in some test scenarios
477
+ }
478
+ }
479
+ }
480
+ exports.HttpService = HttpService;
481
+ //# sourceMappingURL=HttpService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_cache","require","_requestUtils","_asyncUtils","_errorUtils","_jwtDecode","TokenStore","accessToken","refreshToken","constructor","getInstance","instance","setTokens","getAccessToken","getRefreshToken","clearTokens","hasAccessToken","HttpService","requestMetrics","totalRequests","successfulRequests","failedRequests","cacheHits","cacheMisses","averageResponseTime","config","baseURL","tokenStore","logger","SimpleLogger","enableLogging","logLevel","cache","TTLCache","cacheTTL","registerCacheForCleanup","deduplicator","RequestDeduplicator","requestQueue","RequestQueue","maxConcurrentRequests","requestQueueSize","request","method","url","data","params","timeout","requestTimeout","signal","deduplicate","retry","enableRetry","maxRetries","cacheKey","generateCacheKey","cached","get","debug","requestFn","startTime","Date","now","fullUrl","buildURL","authHeader","getAuthHeader","isFormData","FormData","controller","AbortController","timeoutId","setTimeout","abort","addEventListener","headers","response","fetch","body","JSON","stringify","undefined","clearTimeout","ok","status","errorMessage","statusText","contentType","includes","errorData","json","message","parseError","warn","error","Error","responseData","unwrapResponse","SyntaxError","blob","text","duration","updateMetrics","onRequestEnd","onRequestError","String","name","handleHttpError","requestWithRetry","retryAsync","retryDelay","dedupeKey","finalRequest","result","enqueue","set","Object","keys","length","dataStr","hash","sort","join","substring","base","startsWith","searchParams","URLSearchParams","entries","forEach","key","value","append","queryString","toString","decoded","jwtDecode","currentTime","Math","floor","exp","sessionId","refreshUrl","AbortSignal","newToken","refreshError","Array","isArray","success","alpha","post","put","patch","delete","getBaseURL","clearCache","clear","clearCacheEntry","getCacheStats","cacheStats","getStats","total","size","hits","misses","hitRate","getMetrics","__resetTokensForTests","exports"],"sourceRoot":"../../../src","sources":["core/HttpService.ts"],"mappings":"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","ignoreList":[]}
@@ -6,8 +6,7 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.OxyServicesBase = void 0;
7
7
  var _jwtDecode = require("jwt-decode");
8
8
  var _errorUtils = require("../utils/errorUtils");
9
- var _HttpClient = require("./HttpClient");
10
- var _RequestManager = require("./RequestManager");
9
+ var _HttpService = require("./HttpService");
11
10
  var _OxyServices = require("./OxyServices.errors");
12
11
  /**
13
12
  * OxyServices Base Class
@@ -27,16 +26,13 @@ class OxyServicesBase {
27
26
  this.config = config;
28
27
  this.cloudURL = config.cloudURL || 'https://cloud.oxy.so';
29
28
 
30
- // Initialize HTTP client (handles authentication and interceptors)
31
- this.httpClient = new _HttpClient.HttpClient(config);
32
-
33
- // Initialize request manager (handles caching, deduplication, queuing, retry)
34
- this.requestManager = new _RequestManager.RequestManager(this.httpClient, config);
29
+ // Initialize unified HTTP service (handles auth, caching, deduplication, queuing, retry)
30
+ this.httpService = new _HttpService.HttpService(config);
35
31
  }
36
32
 
37
33
  // Test-only utility to reset global tokens between jest tests
38
34
  static __resetTokensForTests() {
39
- _HttpClient.HttpClient.__resetTokensForTests();
35
+ _HttpService.HttpService.__resetTokensForTests();
40
36
  }
41
37
 
42
38
  /**
@@ -44,7 +40,13 @@ class OxyServicesBase {
44
40
  * This is the main method for all API calls - ensures authentication and performance features
45
41
  */
46
42
  async makeRequest(method, url, data, options = {}) {
47
- return this.requestManager.request(method, url, data, options);
43
+ return this.httpService.request({
44
+ method,
45
+ url,
46
+ data: method !== 'GET' ? data : undefined,
47
+ params: method === 'GET' ? data : undefined,
48
+ ...options
49
+ });
48
50
  }
49
51
 
50
52
  // ============================================================================
@@ -55,43 +57,43 @@ class OxyServicesBase {
55
57
  * Get the configured Oxy API base URL
56
58
  */
57
59
  getBaseURL() {
58
- return this.httpClient.getBaseURL();
60
+ return this.httpService.getBaseURL();
59
61
  }
60
62
 
61
63
  /**
62
- * Get the HTTP client instance
63
- * Useful for advanced use cases where direct access to the HTTP client is needed
64
+ * Get the HTTP service instance
65
+ * Useful for advanced use cases where direct access to the HTTP service is needed
64
66
  */
65
67
  getClient() {
66
- return this.httpClient;
68
+ return this.httpService;
67
69
  }
68
70
 
69
71
  /**
70
72
  * Get performance metrics
71
73
  */
72
74
  getMetrics() {
73
- return this.requestManager.getMetrics();
75
+ return this.httpService.getMetrics();
74
76
  }
75
77
 
76
78
  /**
77
79
  * Clear request cache
78
80
  */
79
81
  clearCache() {
80
- this.requestManager.clearCache();
82
+ this.httpService.clearCache();
81
83
  }
82
84
 
83
85
  /**
84
86
  * Clear specific cache entry
85
87
  */
86
88
  clearCacheEntry(key) {
87
- this.requestManager.clearCacheEntry(key);
89
+ this.httpService.clearCacheEntry(key);
88
90
  }
89
91
 
90
92
  /**
91
93
  * Get cache statistics
92
94
  */
93
95
  getCacheStats() {
94
- return this.requestManager.getCacheStats();
96
+ return this.httpService.getCacheStats();
95
97
  }
96
98
 
97
99
  /**
@@ -105,21 +107,21 @@ class OxyServicesBase {
105
107
  * Set authentication tokens
106
108
  */
107
109
  setTokens(accessToken, refreshToken = '') {
108
- this.httpClient.setTokens(accessToken, refreshToken);
110
+ this.httpService.setTokens(accessToken, refreshToken);
109
111
  }
110
112
 
111
113
  /**
112
114
  * Clear stored authentication tokens
113
115
  */
114
116
  clearTokens() {
115
- this.httpClient.clearTokens();
117
+ this.httpService.clearTokens();
116
118
  }
117
119
 
118
120
  /**
119
121
  * Get the current user ID from the access token
120
122
  */
121
123
  getCurrentUserId() {
122
- const accessToken = this.httpClient.getAccessToken();
124
+ const accessToken = this.httpService.getAccessToken();
123
125
  if (!accessToken) {
124
126
  return null;
125
127
  }
@@ -135,14 +137,14 @@ class OxyServicesBase {
135
137
  * Check if the client has a valid access token (public method)
136
138
  */
137
139
  hasValidToken() {
138
- return this.httpClient.hasAccessToken();
140
+ return this.httpService.hasAccessToken();
139
141
  }
140
142
 
141
143
  /**
142
144
  * Get the raw access token (for constructing anchor URLs when needed)
143
145
  */
144
146
  getAccessToken() {
145
- return this.httpClient.getAccessToken();
147
+ return this.httpService.getAccessToken();
146
148
  }
147
149
 
148
150
  /**
@@ -165,7 +167,7 @@ class OxyServicesBase {
165
167
  */
166
168
  async waitForAuth(timeoutMs = 5000) {
167
169
  // Immediate synchronous check - no delay if token is ready
168
- if (this.httpClient.hasAccessToken()) {
170
+ if (this.httpService.hasAccessToken()) {
169
171
  return true;
170
172
  }
171
173
  const startTime = performance.now();
@@ -176,7 +178,7 @@ class OxyServicesBase {
176
178
 
177
179
  while (performance.now() < maxTime) {
178
180
  await new Promise(resolve => setTimeout(resolve, pollInterval));
179
- if (this.httpClient.hasAccessToken()) {
181
+ if (this.httpService.hasAccessToken()) {
180
182
  return true;
181
183
  }
182
184
 
@@ -202,7 +204,7 @@ class OxyServicesBase {
202
204
  for (let attempt = 0; attempt <= maxRetries; attempt++) {
203
205
  try {
204
206
  // First attempt: check if we have a token
205
- if (!this.httpClient.hasAccessToken()) {
207
+ if (!this.httpService.hasAccessToken()) {
206
208
  if (attempt === 0) {
207
209
  // On first attempt, wait briefly for authentication to complete
208
210
  const authReady = await this.waitForAuth(authTimeoutMs);
@@ -219,7 +221,8 @@ class OxyServicesBase {
219
221
  return await operation();
220
222
  } catch (error) {
221
223
  const isLastAttempt = attempt === maxRetries;
222
- const isAuthError = error?.response?.status === 401 || error?.code === 'MISSING_TOKEN' || error?.message?.includes('Authentication') || error instanceof _OxyServices.OxyAuthenticationError;
224
+ const errorObj = error && typeof error === 'object' ? error : null;
225
+ const isAuthError = errorObj?.response?.status === 401 || errorObj?.code === 'MISSING_TOKEN' || errorObj?.message?.includes('Authentication') || error instanceof _OxyServices.OxyAuthenticationError;
223
226
  if (isAuthError && !isLastAttempt && !(error instanceof _OxyServices.OxyAuthenticationTimeoutError)) {
224
227
  await new Promise(resolve => setTimeout(resolve, retryDelay));
225
228
  continue;