@oxyhq/services 5.13.24 → 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 (106) 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/ui/components/FollowButton.js +0 -53
  14. package/lib/commonjs/ui/components/FollowButton.js.map +1 -1
  15. package/lib/commonjs/utils/asyncUtils.js +23 -3
  16. package/lib/commonjs/utils/asyncUtils.js.map +1 -1
  17. package/lib/commonjs/utils/errorUtils.js +48 -33
  18. package/lib/commonjs/utils/errorUtils.js.map +1 -1
  19. package/lib/commonjs/utils/validationUtils.js +15 -0
  20. package/lib/commonjs/utils/validationUtils.js.map +1 -1
  21. package/lib/module/core/HttpService.js +476 -0
  22. package/lib/module/core/HttpService.js.map +1 -0
  23. package/lib/module/core/OxyServices.base.js +29 -26
  24. package/lib/module/core/OxyServices.base.js.map +1 -1
  25. package/lib/module/core/OxyServices.js +1 -2
  26. package/lib/module/core/OxyServices.js.map +1 -1
  27. package/lib/module/core/mixins/OxyServices.assets.js +3 -2
  28. package/lib/module/core/mixins/OxyServices.assets.js.map +1 -1
  29. package/lib/module/core/mixins/OxyServices.user.js +9 -5
  30. package/lib/module/core/mixins/OxyServices.user.js.map +1 -1
  31. package/lib/module/core/mixins/OxyServices.utility.js +1 -0
  32. package/lib/module/core/mixins/OxyServices.utility.js.map +1 -1
  33. package/lib/module/ui/components/FollowButton.js +1 -54
  34. package/lib/module/ui/components/FollowButton.js.map +1 -1
  35. package/lib/module/utils/asyncUtils.js +24 -3
  36. package/lib/module/utils/asyncUtils.js.map +1 -1
  37. package/lib/module/utils/errorUtils.js +43 -33
  38. package/lib/module/utils/errorUtils.js.map +1 -1
  39. package/lib/module/utils/validationUtils.js +14 -0
  40. package/lib/module/utils/validationUtils.js.map +1 -1
  41. package/lib/typescript/core/HttpService.d.ts +111 -0
  42. package/lib/typescript/core/HttpService.d.ts.map +1 -0
  43. package/lib/typescript/core/OxyServices.base.d.ts +6 -8
  44. package/lib/typescript/core/OxyServices.base.d.ts.map +1 -1
  45. package/lib/typescript/core/OxyServices.d.ts +1 -2
  46. package/lib/typescript/core/OxyServices.d.ts.map +1 -1
  47. package/lib/typescript/core/mixins/OxyServices.analytics.d.ts +4 -5
  48. package/lib/typescript/core/mixins/OxyServices.analytics.d.ts.map +1 -1
  49. package/lib/typescript/core/mixins/OxyServices.assets.d.ts +4 -5
  50. package/lib/typescript/core/mixins/OxyServices.assets.d.ts.map +1 -1
  51. package/lib/typescript/core/mixins/OxyServices.auth.d.ts +4 -5
  52. package/lib/typescript/core/mixins/OxyServices.auth.d.ts.map +1 -1
  53. package/lib/typescript/core/mixins/OxyServices.developer.d.ts +4 -5
  54. package/lib/typescript/core/mixins/OxyServices.developer.d.ts.map +1 -1
  55. package/lib/typescript/core/mixins/OxyServices.devices.d.ts +4 -5
  56. package/lib/typescript/core/mixins/OxyServices.devices.d.ts.map +1 -1
  57. package/lib/typescript/core/mixins/OxyServices.karma.d.ts +4 -5
  58. package/lib/typescript/core/mixins/OxyServices.karma.d.ts.map +1 -1
  59. package/lib/typescript/core/mixins/OxyServices.language.d.ts +4 -5
  60. package/lib/typescript/core/mixins/OxyServices.language.d.ts.map +1 -1
  61. package/lib/typescript/core/mixins/OxyServices.location.d.ts +4 -5
  62. package/lib/typescript/core/mixins/OxyServices.location.d.ts.map +1 -1
  63. package/lib/typescript/core/mixins/OxyServices.payment.d.ts +4 -5
  64. package/lib/typescript/core/mixins/OxyServices.payment.d.ts.map +1 -1
  65. package/lib/typescript/core/mixins/OxyServices.privacy.d.ts +4 -5
  66. package/lib/typescript/core/mixins/OxyServices.privacy.d.ts.map +1 -1
  67. package/lib/typescript/core/mixins/OxyServices.totp.d.ts +4 -5
  68. package/lib/typescript/core/mixins/OxyServices.totp.d.ts.map +1 -1
  69. package/lib/typescript/core/mixins/OxyServices.user.d.ts +4 -5
  70. package/lib/typescript/core/mixins/OxyServices.user.d.ts.map +1 -1
  71. package/lib/typescript/core/mixins/OxyServices.utility.d.ts +4 -5
  72. package/lib/typescript/core/mixins/OxyServices.utility.d.ts.map +1 -1
  73. package/lib/typescript/core/mixins/index.d.ts +52 -65
  74. package/lib/typescript/core/mixins/index.d.ts.map +1 -1
  75. package/lib/typescript/ui/components/FollowButton.d.ts.map +1 -1
  76. package/lib/typescript/utils/asyncUtils.d.ts +4 -0
  77. package/lib/typescript/utils/asyncUtils.d.ts.map +1 -1
  78. package/lib/typescript/utils/errorUtils.d.ts +9 -1
  79. package/lib/typescript/utils/errorUtils.d.ts.map +1 -1
  80. package/lib/typescript/utils/validationUtils.d.ts +6 -0
  81. package/lib/typescript/utils/validationUtils.d.ts.map +1 -1
  82. package/package.json +1 -1
  83. package/src/core/HttpService.ts +523 -0
  84. package/src/core/OxyServices.base.ts +36 -34
  85. package/src/core/OxyServices.ts +1 -2
  86. package/src/core/mixins/OxyServices.assets.ts +2 -1
  87. package/src/core/mixins/OxyServices.user.ts +7 -6
  88. package/src/core/mixins/OxyServices.utility.ts +1 -0
  89. package/src/ui/components/FollowButton.tsx +0 -53
  90. package/src/utils/asyncUtils.ts +23 -3
  91. package/src/utils/errorUtils.ts +72 -45
  92. package/src/utils/validationUtils.ts +14 -0
  93. package/lib/commonjs/core/HttpClient.js +0 -317
  94. package/lib/commonjs/core/HttpClient.js.map +0 -1
  95. package/lib/commonjs/core/RequestManager.js +0 -199
  96. package/lib/commonjs/core/RequestManager.js.map +0 -1
  97. package/lib/module/core/HttpClient.js +0 -311
  98. package/lib/module/core/HttpClient.js.map +0 -1
  99. package/lib/module/core/RequestManager.js +0 -194
  100. package/lib/module/core/RequestManager.js.map +0 -1
  101. package/lib/typescript/core/HttpClient.d.ts +0 -110
  102. package/lib/typescript/core/HttpClient.d.ts.map +0 -1
  103. package/lib/typescript/core/RequestManager.d.ts +0 -67
  104. package/lib/typescript/core/RequestManager.d.ts.map +0 -1
  105. package/src/core/HttpClient.ts +0 -346
  106. package/src/core/RequestManager.ts +0 -240
@@ -1,317 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.HttpClient = void 0;
7
- var _axios = _interopRequireDefault(require("axios"));
8
- var _jwtDecode = require("jwt-decode");
9
- var _errorUtils = require("../utils/errorUtils");
10
- var _requestUtils = require("../utils/requestUtils");
11
- function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
12
- /**
13
- * HTTP Client Service
14
- *
15
- * Handles all HTTP communication with authentication, interceptors, and error handling.
16
- * This is the single source of truth for making authenticated HTTP requests.
17
- */
18
-
19
- /**
20
- * Token store for authentication
21
- */
22
- class TokenStore {
23
- accessToken = null;
24
- refreshToken = null;
25
- constructor() {}
26
- static getInstance() {
27
- if (!TokenStore.instance) {
28
- TokenStore.instance = new TokenStore();
29
- }
30
- return TokenStore.instance;
31
- }
32
- setTokens(accessToken, refreshToken = '') {
33
- this.accessToken = accessToken;
34
- this.refreshToken = refreshToken;
35
- }
36
- getAccessToken() {
37
- return this.accessToken;
38
- }
39
- getRefreshToken() {
40
- return this.refreshToken;
41
- }
42
- clearTokens() {
43
- this.accessToken = null;
44
- this.refreshToken = null;
45
- }
46
- hasAccessToken() {
47
- return !!this.accessToken;
48
- }
49
- }
50
-
51
- /**
52
- * HTTP Client Service
53
- *
54
- * Manages Axios instance with authentication interceptors.
55
- * All HTTP requests should go through this service to ensure authentication.
56
- */
57
- class HttpClient {
58
- constructor(config) {
59
- this.baseURL = config.baseURL;
60
- this.tokenStore = TokenStore.getInstance();
61
- this.logger = new _requestUtils.SimpleLogger(config.enableLogging || false, config.logLevel || 'error', 'HttpClient');
62
- const timeout = config.requestTimeout || 5000;
63
-
64
- // Create Axios instance with optimized configuration
65
- this.client = _axios.default.create({
66
- baseURL: config.baseURL,
67
- timeout,
68
- headers: {
69
- 'Accept': 'application/json'
70
- },
71
- // Enable HTTP keep-alive for connection reuse (Node.js only)
72
- ...(typeof process !== 'undefined' && process.env && typeof window === 'undefined' && typeof require !== 'undefined' ? {
73
- httpAgent: new (require('http').Agent)({
74
- keepAlive: true,
75
- keepAliveMsecs: 1000,
76
- maxSockets: 50
77
- }),
78
- httpsAgent: new (require('https').Agent)({
79
- keepAlive: true,
80
- keepAliveMsecs: 1000,
81
- maxSockets: 50
82
- })
83
- } : {})
84
- });
85
- this.setupInterceptors();
86
- }
87
-
88
- /**
89
- * Setup axios interceptors for authentication and error handling
90
- */
91
- setupInterceptors() {
92
- // Request interceptor: Add authentication header
93
- this.client.interceptors.request.use(async req => {
94
- const accessToken = this.tokenStore.getAccessToken();
95
- if (!accessToken) {
96
- return req;
97
- }
98
- try {
99
- const decoded = (0, _jwtDecode.jwtDecode)(accessToken);
100
- const currentTime = Math.floor(Date.now() / 1000);
101
-
102
- // If token expires in less than 60 seconds, refresh it
103
- if (decoded.exp && decoded.exp - currentTime < 60) {
104
- if (decoded.sessionId) {
105
- try {
106
- // Create a new axios instance to avoid interceptor recursion
107
- const refreshClient = _axios.default.create({
108
- baseURL: this.client.defaults.baseURL,
109
- timeout: this.client.defaults.timeout
110
- });
111
- const res = await refreshClient.get(`/api/session/token/${decoded.sessionId}`);
112
- this.tokenStore.setTokens(res.data.accessToken);
113
- req.headers.Authorization = `Bearer ${res.data.accessToken}`;
114
- this.logger.debug('Token refreshed');
115
- } catch (refreshError) {
116
- // If refresh fails, use current token anyway
117
- req.headers.Authorization = `Bearer ${accessToken}`;
118
- this.logger.warn('Token refresh failed, using current token');
119
- }
120
- } else {
121
- req.headers.Authorization = `Bearer ${accessToken}`;
122
- }
123
- } else {
124
- req.headers.Authorization = `Bearer ${accessToken}`;
125
- }
126
- } catch (error) {
127
- this.logger.error('Error processing token:', error);
128
- // Even if there's an error, still try to use the token
129
- req.headers.Authorization = `Bearer ${accessToken}`;
130
- }
131
- return req;
132
- }, error => {
133
- this.logger.error('Request interceptor error:', error);
134
- return Promise.reject(error);
135
- });
136
-
137
- // Response interceptor: Handle auth errors
138
- this.client.interceptors.response.use(response => response, error => {
139
- if (error.response?.status === 401) {
140
- this.logger.warn('401 Unauthorized, clearing tokens');
141
- this.tokenStore.clearTokens();
142
- }
143
- return Promise.reject(error);
144
- });
145
- }
146
-
147
- /**
148
- * Get the underlying Axios instance
149
- * Use this only when you need direct access to Axios features
150
- */
151
- getAxiosInstance() {
152
- return this.client;
153
- }
154
-
155
- /**
156
- * Make a raw HTTP request (no caching, deduplication, etc.)
157
- * Use this for requests that need to bypass performance features
158
- */
159
- async request(config) {
160
- try {
161
- const response = await this.client.request({
162
- method: config.method,
163
- url: config.url,
164
- data: config.data,
165
- params: config.params,
166
- timeout: config.timeout,
167
- signal: config.signal
168
- });
169
-
170
- // Unwrap standardized API response format: { data: ... }
171
- // This handles responses from sendSuccess() and sendPaginated() helpers
172
- const responseData = response.data;
173
-
174
- // Handle paginated responses: { data: [...], pagination: {...} }
175
- // Return the data array directly - the calling method will wrap it appropriately
176
- if (responseData && typeof responseData === 'object' && 'data' in responseData && 'pagination' in responseData) {
177
- // For paginated responses, return the data array directly
178
- // The calling methods like getUserFollowers/getUserFollowing will handle wrapping
179
- // We return the whole response so methods can access both data and pagination
180
- return responseData;
181
- }
182
-
183
- // Handle regular success responses: { data: ... }
184
- if (responseData && typeof responseData === 'object' && 'data' in responseData && !Array.isArray(responseData)) {
185
- return responseData.data;
186
- }
187
-
188
- // Return as-is for responses that don't use sendSuccess wrapper
189
- return responseData;
190
- } catch (error) {
191
- throw (0, _errorUtils.handleHttpError)(error);
192
- }
193
- }
194
-
195
- /**
196
- * GET request convenience method
197
- */
198
- async get(url, config) {
199
- const response = await this.request({
200
- method: 'GET',
201
- url,
202
- params: config?.params,
203
- timeout: config?.timeout,
204
- signal: config?.signal
205
- });
206
- return {
207
- data: response
208
- };
209
- }
210
-
211
- /**
212
- * POST request convenience method
213
- */
214
- async post(url, data, config) {
215
- const response = await this.request({
216
- method: 'POST',
217
- url,
218
- data,
219
- timeout: config?.timeout,
220
- signal: config?.signal
221
- });
222
- return {
223
- data: response
224
- };
225
- }
226
-
227
- /**
228
- * PUT request convenience method
229
- */
230
- async put(url, data, config) {
231
- const response = await this.request({
232
- method: 'PUT',
233
- url,
234
- data,
235
- timeout: config?.timeout,
236
- signal: config?.signal
237
- });
238
- return {
239
- data: response
240
- };
241
- }
242
-
243
- /**
244
- * PATCH request convenience method
245
- */
246
- async patch(url, data, config) {
247
- const response = await this.request({
248
- method: 'PATCH',
249
- url,
250
- data,
251
- timeout: config?.timeout,
252
- signal: config?.signal
253
- });
254
- return {
255
- data: response
256
- };
257
- }
258
-
259
- /**
260
- * DELETE request convenience method
261
- */
262
- async delete(url, config) {
263
- const response = await this.request({
264
- method: 'DELETE',
265
- url,
266
- timeout: config?.timeout,
267
- signal: config?.signal
268
- });
269
- return {
270
- data: response
271
- };
272
- }
273
-
274
- /**
275
- * Get base URL
276
- */
277
- getBaseURL() {
278
- return this.baseURL;
279
- }
280
-
281
- /**
282
- * Set authentication tokens
283
- */
284
- setTokens(accessToken, refreshToken = '') {
285
- this.tokenStore.setTokens(accessToken, refreshToken);
286
- }
287
-
288
- /**
289
- * Clear authentication tokens
290
- */
291
- clearTokens() {
292
- this.tokenStore.clearTokens();
293
- }
294
-
295
- /**
296
- * Get access token
297
- */
298
- getAccessToken() {
299
- return this.tokenStore.getAccessToken();
300
- }
301
-
302
- /**
303
- * Check if has access token
304
- */
305
- hasAccessToken() {
306
- return this.tokenStore.hasAccessToken();
307
- }
308
-
309
- // Test-only utility to reset global tokens between jest tests
310
- static __resetTokensForTests() {
311
- try {
312
- TokenStore.getInstance().clearTokens();
313
- } catch {}
314
- }
315
- }
316
- exports.HttpClient = HttpClient;
317
- //# sourceMappingURL=HttpClient.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["_axios","_interopRequireDefault","require","_jwtDecode","_errorUtils","_requestUtils","e","__esModule","default","TokenStore","accessToken","refreshToken","constructor","getInstance","instance","setTokens","getAccessToken","getRefreshToken","clearTokens","hasAccessToken","HttpClient","config","baseURL","tokenStore","logger","SimpleLogger","enableLogging","logLevel","timeout","requestTimeout","client","axios","create","headers","process","env","window","httpAgent","Agent","keepAlive","keepAliveMsecs","maxSockets","httpsAgent","setupInterceptors","interceptors","request","use","req","decoded","jwtDecode","currentTime","Math","floor","Date","now","exp","sessionId","refreshClient","defaults","res","get","data","Authorization","debug","refreshError","warn","error","Promise","reject","response","status","getAxiosInstance","method","url","params","signal","responseData","Array","isArray","handleHttpError","post","put","patch","delete","getBaseURL","__resetTokensForTests","exports"],"sourceRoot":"../../../src","sources":["core/HttpClient.ts"],"mappings":"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","ignoreList":[]}
@@ -1,199 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.RequestManager = void 0;
7
- var _cache = require("../utils/cache");
8
- var _requestUtils = require("../utils/requestUtils");
9
- /**
10
- * Request Manager
11
- *
12
- * Handles request-level optimizations: caching, deduplication, queuing, and retry.
13
- * Works on top of HttpClient to add performance features.
14
- */
15
-
16
- /**
17
- * Request Manager
18
- *
19
- * Manages request-level optimizations while delegating actual HTTP calls to HttpClient.
20
- */
21
- class RequestManager {
22
- // Performance monitoring
23
- requestMetrics = {
24
- totalRequests: 0,
25
- successfulRequests: 0,
26
- failedRequests: 0,
27
- cacheHits: 0,
28
- cacheMisses: 0,
29
- averageResponseTime: 0
30
- };
31
- constructor(httpClient, config) {
32
- this.httpClient = httpClient;
33
- this.config = config;
34
-
35
- // Initialize performance infrastructure
36
- this.cache = new _cache.TTLCache(config.cacheTTL || 5 * 60 * 1000);
37
- (0, _cache.registerCacheForCleanup)(this.cache);
38
- this.deduplicator = new _requestUtils.RequestDeduplicator();
39
- this.requestQueue = new _requestUtils.RequestQueue(config.maxConcurrentRequests || 10, config.requestQueueSize || 100);
40
- this.logger = new _requestUtils.SimpleLogger(config.enableLogging || false, config.logLevel || 'error', 'RequestManager');
41
- }
42
-
43
- /**
44
- * Make a request with all performance optimizations
45
- */
46
- async request(method, url, data, options = {}) {
47
- const {
48
- cache = method === 'GET',
49
- // Cache GET requests by default
50
- cacheTTL,
51
- deduplicate = true,
52
- retry = this.config.enableRetry !== false,
53
- maxRetries = this.config.maxRetries || 3,
54
- timeout,
55
- signal
56
- } = options;
57
-
58
- // Generate cache key
59
- const cacheKey = cache ? `${method}:${url}:${JSON.stringify(data || {})}` : null;
60
-
61
- // Check cache first
62
- if (cache && cacheKey) {
63
- const cached = this.cache.get(cacheKey);
64
- if (cached !== null) {
65
- this.requestMetrics.cacheHits++;
66
- this.logger.debug('Cache hit:', url);
67
- return cached;
68
- }
69
- this.requestMetrics.cacheMisses++;
70
- }
71
-
72
- // Request function that uses HttpClient
73
- const requestFn = async () => {
74
- const startTime = Date.now();
75
- try {
76
- const result = await this.httpClient.request({
77
- method,
78
- url,
79
- data: method !== 'GET' ? data : undefined,
80
- params: method === 'GET' ? data : undefined,
81
- timeout: timeout || this.config.requestTimeout || 5000,
82
- signal
83
- });
84
- const duration = Date.now() - startTime;
85
- this.updateMetrics(true, duration);
86
- this.config.onRequestEnd?.(url, method, duration, true);
87
- return result;
88
- } catch (error) {
89
- const duration = Date.now() - startTime;
90
- this.updateMetrics(false, duration);
91
- this.config.onRequestEnd?.(url, method, duration, false);
92
- this.config.onRequestError?.(url, method, error);
93
- throw error;
94
- }
95
- };
96
-
97
- // Wrap with retry if enabled
98
- const requestWithRetry = retry ? () => this.retryWithBackoff(requestFn, maxRetries) : requestFn;
99
-
100
- // Wrap with deduplication if enabled
101
- const dedupeKey = deduplicate ? `${method}:${url}:${JSON.stringify(data || {})}` : null;
102
- const finalRequest = dedupeKey ? () => this.deduplicator.deduplicate(dedupeKey, requestWithRetry) : requestWithRetry;
103
-
104
- // Execute request (with queue if needed)
105
- const result = await this.requestQueue.enqueue(finalRequest);
106
-
107
- // Cache the result if caching is enabled
108
- if (cache && cacheKey && result) {
109
- this.cache.set(cacheKey, result, cacheTTL);
110
- }
111
- return result;
112
- }
113
-
114
- /**
115
- * Exponential backoff retry logic with 4xx error handling
116
- */
117
- async retryWithBackoff(fn, maxRetries = 3, baseDelay = 1000) {
118
- let lastError;
119
- for (let attempt = 0; attempt <= maxRetries; attempt++) {
120
- try {
121
- return await fn();
122
- } catch (error) {
123
- lastError = error;
124
-
125
- // Don't retry on 4xx errors (client errors)
126
- if (error.response?.status >= 400 && error.response?.status < 500) {
127
- throw error;
128
- }
129
-
130
- // Don't retry on last attempt
131
- if (attempt === maxRetries) {
132
- break;
133
- }
134
-
135
- // Calculate delay with exponential backoff and jitter
136
- const delay = baseDelay * Math.pow(2, attempt) + Math.random() * 1000;
137
- this.logger.debug(`Retry attempt ${attempt + 1}/${maxRetries} after ${delay}ms`);
138
- await new Promise(resolve => setTimeout(resolve, delay));
139
- }
140
- }
141
- throw lastError;
142
- }
143
-
144
- /**
145
- * Update request metrics
146
- */
147
- updateMetrics(success, duration) {
148
- this.requestMetrics.totalRequests++;
149
- if (success) {
150
- this.requestMetrics.successfulRequests++;
151
- } else {
152
- this.requestMetrics.failedRequests++;
153
- }
154
-
155
- // Update average response time (exponential moving average)
156
- const alpha = 0.1; // Smoothing factor
157
- this.requestMetrics.averageResponseTime = this.requestMetrics.averageResponseTime * (1 - alpha) + duration * alpha;
158
- }
159
-
160
- /**
161
- * Get performance metrics
162
- */
163
- getMetrics() {
164
- return {
165
- ...this.requestMetrics
166
- };
167
- }
168
-
169
- /**
170
- * Clear request cache
171
- */
172
- clearCache() {
173
- this.cache.clear();
174
- this.logger.debug('Cache cleared');
175
- }
176
-
177
- /**
178
- * Clear specific cache entry
179
- */
180
- clearCacheEntry(key) {
181
- this.cache.delete(key);
182
- }
183
-
184
- /**
185
- * Get cache statistics
186
- */
187
- getCacheStats() {
188
- const cacheStats = this.cache.getStats();
189
- const total = this.requestMetrics.cacheHits + this.requestMetrics.cacheMisses;
190
- return {
191
- size: cacheStats.size,
192
- hits: this.requestMetrics.cacheHits,
193
- misses: this.requestMetrics.cacheMisses,
194
- hitRate: total > 0 ? this.requestMetrics.cacheHits / total : 0
195
- };
196
- }
197
- }
198
- exports.RequestManager = RequestManager;
199
- //# sourceMappingURL=RequestManager.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["_cache","require","_requestUtils","RequestManager","requestMetrics","totalRequests","successfulRequests","failedRequests","cacheHits","cacheMisses","averageResponseTime","constructor","httpClient","config","cache","TTLCache","cacheTTL","registerCacheForCleanup","deduplicator","RequestDeduplicator","requestQueue","RequestQueue","maxConcurrentRequests","requestQueueSize","logger","SimpleLogger","enableLogging","logLevel","request","method","url","data","options","deduplicate","retry","enableRetry","maxRetries","timeout","signal","cacheKey","JSON","stringify","cached","get","debug","requestFn","startTime","Date","now","result","undefined","params","requestTimeout","duration","updateMetrics","onRequestEnd","error","onRequestError","requestWithRetry","retryWithBackoff","dedupeKey","finalRequest","enqueue","set","fn","baseDelay","lastError","attempt","response","status","delay","Math","pow","random","Promise","resolve","setTimeout","success","alpha","getMetrics","clearCache","clear","clearCacheEntry","key","delete","getCacheStats","cacheStats","getStats","total","size","hits","misses","hitRate","exports"],"sourceRoot":"../../../src","sources":["core/RequestManager.ts"],"mappings":"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","ignoreList":[]}