@oxyhq/services 5.9.2 → 5.9.3
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 -33
- package/lib/commonjs/core/OxyServices.js +159 -0
- package/lib/commonjs/core/OxyServices.js.map +1 -0
- package/lib/commonjs/core/OxyServicesMain.js +51 -0
- package/lib/commonjs/core/OxyServicesMain.js.map +1 -0
- package/lib/commonjs/core/analytics/AnalyticsService.js +67 -0
- package/lib/commonjs/core/analytics/AnalyticsService.js.map +1 -0
- package/lib/commonjs/core/auth/AuthService.js +526 -0
- package/lib/commonjs/core/auth/AuthService.js.map +1 -0
- package/lib/commonjs/core/devices/DeviceService.js +61 -0
- package/lib/commonjs/core/devices/DeviceService.js.map +1 -0
- package/lib/commonjs/core/files/FileService.js +176 -0
- package/lib/commonjs/core/files/FileService.js.map +1 -0
- package/lib/commonjs/core/index.js +103 -1701
- package/lib/commonjs/core/index.js.map +1 -1
- package/lib/commonjs/core/karma/KarmaService.js +100 -0
- package/lib/commonjs/core/karma/KarmaService.js.map +1 -0
- package/lib/commonjs/core/locations/LocationService.js +131 -0
- package/lib/commonjs/core/locations/LocationService.js.map +1 -0
- package/lib/commonjs/core/payments/PaymentService.js +124 -0
- package/lib/commonjs/core/payments/PaymentService.js.map +1 -0
- package/lib/commonjs/core/users/UserService.js +234 -0
- package/lib/commonjs/core/users/UserService.js.map +1 -0
- package/lib/commonjs/index.js +164 -3
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/models/session.js +2 -0
- package/lib/commonjs/{types/middleware.js.map → models/session.js.map} +1 -1
- package/lib/commonjs/ui/context/OxyContext.js +28 -24
- package/lib/commonjs/ui/context/OxyContext.js.map +1 -1
- package/lib/commonjs/ui/screens/AccountSwitcherScreen.js +2 -2
- package/lib/commonjs/ui/screens/AccountSwitcherScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/FileManagementScreen.js +12 -12
- package/lib/commonjs/ui/screens/FileManagementScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/ProfileScreen.js +2 -2
- package/lib/commonjs/ui/screens/ProfileScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/SessionManagementScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/SignInScreen.js +1 -1
- package/lib/commonjs/ui/screens/SignInScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/karma/KarmaCenterScreen.js +1 -1
- package/lib/commonjs/ui/screens/karma/KarmaCenterScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/karma/KarmaLeaderboardScreen.js +1 -1
- package/lib/commonjs/ui/screens/karma/KarmaLeaderboardScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/karma/KarmaRulesScreen.js +1 -1
- package/lib/commonjs/ui/screens/karma/KarmaRulesScreen.js.map +1 -1
- package/lib/commonjs/ui/stores/followStore.js +4 -4
- package/lib/commonjs/ui/stores/followStore.js.map +1 -1
- package/lib/commonjs/utils/apiUtils.js +93 -0
- package/lib/commonjs/utils/apiUtils.js.map +1 -0
- package/lib/commonjs/utils/asyncUtils.js +219 -0
- package/lib/commonjs/utils/asyncUtils.js.map +1 -0
- package/lib/commonjs/utils/errorUtils.js +148 -0
- package/lib/commonjs/utils/errorUtils.js.map +1 -0
- package/lib/commonjs/utils/hookUtils.js +399 -0
- package/lib/commonjs/utils/hookUtils.js.map +1 -0
- package/lib/commonjs/utils/loggerUtils.js +160 -0
- package/lib/commonjs/utils/loggerUtils.js.map +1 -0
- package/lib/commonjs/utils/validationUtils.js +174 -0
- package/lib/commonjs/utils/validationUtils.js.map +1 -0
- package/lib/module/core/OxyServices.js +153 -0
- package/lib/module/core/OxyServices.js.map +1 -0
- package/lib/module/core/OxyServicesMain.js +47 -0
- package/lib/module/core/OxyServicesMain.js.map +1 -0
- package/lib/module/core/analytics/AnalyticsService.js +62 -0
- package/lib/module/core/analytics/AnalyticsService.js.map +1 -0
- package/lib/module/core/auth/AuthService.js +521 -0
- package/lib/module/core/auth/AuthService.js.map +1 -0
- package/lib/module/core/devices/DeviceService.js +57 -0
- package/lib/module/core/devices/DeviceService.js.map +1 -0
- package/lib/module/core/files/FileService.js +171 -0
- package/lib/module/core/files/FileService.js.map +1 -0
- package/lib/module/core/index.js +25 -1690
- package/lib/module/core/index.js.map +1 -1
- package/lib/module/core/karma/KarmaService.js +95 -0
- package/lib/module/core/karma/KarmaService.js.map +1 -0
- package/lib/module/core/locations/LocationService.js +127 -0
- package/lib/module/core/locations/LocationService.js.map +1 -0
- package/lib/module/core/payments/PaymentService.js +119 -0
- package/lib/module/core/payments/PaymentService.js.map +1 -0
- package/lib/module/core/users/UserService.js +230 -0
- package/lib/module/core/users/UserService.js.map +1 -0
- package/lib/module/index.js +8 -4
- package/lib/module/index.js.map +1 -1
- package/lib/module/models/session.js +2 -0
- package/lib/module/{types/middleware.js.map → models/session.js.map} +1 -1
- package/lib/module/ui/context/OxyContext.js +28 -24
- package/lib/module/ui/context/OxyContext.js.map +1 -1
- package/lib/module/ui/screens/AccountSwitcherScreen.js +2 -2
- package/lib/module/ui/screens/AccountSwitcherScreen.js.map +1 -1
- package/lib/module/ui/screens/FileManagementScreen.js +12 -12
- package/lib/module/ui/screens/FileManagementScreen.js.map +1 -1
- package/lib/module/ui/screens/ProfileScreen.js +2 -2
- package/lib/module/ui/screens/ProfileScreen.js.map +1 -1
- package/lib/module/ui/screens/SessionManagementScreen.js.map +1 -1
- package/lib/module/ui/screens/SignInScreen.js +1 -1
- package/lib/module/ui/screens/SignInScreen.js.map +1 -1
- package/lib/module/ui/screens/karma/KarmaCenterScreen.js +1 -1
- package/lib/module/ui/screens/karma/KarmaCenterScreen.js.map +1 -1
- package/lib/module/ui/screens/karma/KarmaLeaderboardScreen.js +1 -1
- package/lib/module/ui/screens/karma/KarmaLeaderboardScreen.js.map +1 -1
- package/lib/module/ui/screens/karma/KarmaRulesScreen.js +1 -1
- package/lib/module/ui/screens/karma/KarmaRulesScreen.js.map +1 -1
- package/lib/module/ui/stores/followStore.js +4 -4
- package/lib/module/ui/stores/followStore.js.map +1 -1
- package/lib/module/utils/apiUtils.js +85 -0
- package/lib/module/utils/apiUtils.js.map +1 -0
- package/lib/module/utils/asyncUtils.js +202 -0
- package/lib/module/utils/asyncUtils.js.map +1 -0
- package/lib/module/utils/errorUtils.js +139 -0
- package/lib/module/utils/errorUtils.js.map +1 -0
- package/lib/module/utils/hookUtils.js +381 -0
- package/lib/module/utils/hookUtils.js.map +1 -0
- package/lib/module/utils/loggerUtils.js +149 -0
- package/lib/module/utils/loggerUtils.js.map +1 -0
- package/lib/module/utils/validationUtils.js +154 -0
- package/lib/module/utils/validationUtils.js.map +1 -0
- package/lib/typescript/core/OxyServices.d.ts +64 -0
- package/lib/typescript/core/OxyServices.d.ts.map +1 -0
- package/lib/typescript/core/OxyServicesMain.d.ts +33 -0
- package/lib/typescript/core/OxyServicesMain.d.ts.map +1 -0
- package/lib/typescript/core/analytics/AnalyticsService.d.ts +26 -0
- package/lib/typescript/core/analytics/AnalyticsService.d.ts.map +1 -0
- package/lib/typescript/core/auth/AuthService.d.ts +165 -0
- package/lib/typescript/core/auth/AuthService.d.ts.map +1 -0
- package/lib/typescript/core/devices/DeviceService.d.ts +20 -0
- package/lib/typescript/core/devices/DeviceService.d.ts.map +1 -0
- package/lib/typescript/core/files/FileService.d.ts +59 -0
- package/lib/typescript/core/files/FileService.d.ts.map +1 -0
- package/lib/typescript/core/index.d.ts +19 -656
- package/lib/typescript/core/index.d.ts.map +1 -1
- package/lib/typescript/core/karma/KarmaService.d.ts +50 -0
- package/lib/typescript/core/karma/KarmaService.d.ts.map +1 -0
- package/lib/typescript/core/locations/LocationService.d.ts +39 -0
- package/lib/typescript/core/locations/LocationService.d.ts.map +1 -0
- package/lib/typescript/core/payments/PaymentService.d.ts +50 -0
- package/lib/typescript/core/payments/PaymentService.d.ts.map +1 -0
- package/lib/typescript/core/users/UserService.d.ts +111 -0
- package/lib/typescript/core/users/UserService.d.ts.map +1 -0
- package/lib/typescript/index.d.ts +7 -3
- package/lib/typescript/index.d.ts.map +1 -1
- package/lib/typescript/models/{secureSession.d.ts → session.d.ts} +4 -4
- package/lib/typescript/models/session.d.ts.map +1 -0
- package/lib/typescript/ui/context/OxyContext.d.ts +2 -2
- package/lib/typescript/ui/context/OxyContext.d.ts.map +1 -1
- package/lib/typescript/utils/apiUtils.d.ts +61 -0
- package/lib/typescript/utils/apiUtils.d.ts.map +1 -0
- package/lib/typescript/utils/asyncUtils.d.ts +64 -0
- package/lib/typescript/utils/asyncUtils.d.ts.map +1 -0
- package/lib/typescript/utils/errorUtils.d.ts +45 -0
- package/lib/typescript/utils/errorUtils.d.ts.map +1 -0
- package/lib/typescript/utils/hookUtils.d.ts +102 -0
- package/lib/typescript/utils/hookUtils.d.ts.map +1 -0
- package/lib/typescript/utils/loggerUtils.d.ts +49 -0
- package/lib/typescript/utils/loggerUtils.d.ts.map +1 -0
- package/lib/typescript/utils/validationUtils.d.ts +80 -0
- package/lib/typescript/utils/validationUtils.d.ts.map +1 -0
- package/package.json +2 -8
- package/src/core/OxyServices.ts +168 -0
- package/src/core/OxyServicesMain.ts +57 -0
- package/src/core/analytics/AnalyticsService.ts +64 -0
- package/src/core/auth/AuthService.ts +544 -0
- package/src/core/devices/DeviceService.ts +55 -0
- package/src/core/files/FileService.ts +194 -0
- package/src/core/index.ts +27 -1765
- package/src/core/karma/KarmaService.ts +104 -0
- package/src/core/locations/LocationService.ts +141 -0
- package/src/core/payments/PaymentService.ts +133 -0
- package/src/core/users/UserService.ts +241 -0
- package/src/index.ts +29 -8
- package/src/models/{secureSession.ts → session.ts} +5 -5
- package/src/ui/context/OxyContext.tsx +34 -30
- package/src/ui/screens/AccountSwitcherScreen.tsx +4 -4
- package/src/ui/screens/FileManagementScreen.tsx +12 -12
- package/src/ui/screens/ProfileScreen.tsx +3 -3
- package/src/ui/screens/SessionManagementScreen.tsx +2 -2
- package/src/ui/screens/SignInScreen.tsx +1 -1
- package/src/ui/screens/karma/KarmaCenterScreen.tsx +2 -2
- package/src/ui/screens/karma/KarmaLeaderboardScreen.tsx +3 -3
- package/src/ui/screens/karma/KarmaRulesScreen.tsx +3 -3
- package/src/ui/stores/followStore.ts +4 -4
- package/src/utils/apiUtils.ts +102 -0
- package/src/utils/asyncUtils.ts +265 -0
- package/src/utils/errorUtils.ts +172 -0
- package/src/utils/hookUtils.ts +397 -0
- package/src/utils/loggerUtils.ts +153 -0
- package/src/utils/validationUtils.ts +158 -0
- package/lib/commonjs/middleware.js +0 -17
- package/lib/commonjs/middleware.js.map +0 -1
- package/lib/commonjs/models/secureSession.js +0 -2
- package/lib/commonjs/models/secureSession.js.map +0 -1
- package/lib/commonjs/types/middleware.js +0 -6
- package/lib/module/middleware.js +0 -12
- package/lib/module/middleware.js.map +0 -1
- package/lib/module/models/secureSession.js +0 -2
- package/lib/module/models/secureSession.js.map +0 -1
- package/lib/module/types/middleware.js +0 -4
- package/lib/typescript/middleware.d.ts +0 -9
- package/lib/typescript/middleware.d.ts.map +0 -1
- package/lib/typescript/models/secureSession.d.ts.map +0 -1
- package/lib/typescript/types/middleware.d.ts +0 -19
- package/lib/typescript/types/middleware.d.ts.map +0 -1
- package/src/middleware.ts +0 -11
- package/src/types/middleware.ts +0 -20
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.batchAsync = batchAsync;
|
|
7
|
+
exports.createAsyncCache = createAsyncCache;
|
|
8
|
+
exports.createCancellableAsync = createCancellableAsync;
|
|
9
|
+
exports.debounceAsync = debounceAsync;
|
|
10
|
+
exports.delay = void 0;
|
|
11
|
+
exports.parallelWithErrorHandling = parallelWithErrorHandling;
|
|
12
|
+
exports.retryAsync = retryAsync;
|
|
13
|
+
exports.retryOnError = retryOnError;
|
|
14
|
+
exports.sequentialWithProgress = sequentialWithProgress;
|
|
15
|
+
exports.throttleAsync = throttleAsync;
|
|
16
|
+
exports.withErrorHandling = withErrorHandling;
|
|
17
|
+
exports.withLoadingState = withLoadingState;
|
|
18
|
+
exports.withTimeout = withTimeout;
|
|
19
|
+
/**
|
|
20
|
+
* Async utilities for common asynchronous patterns and error handling
|
|
21
|
+
*/
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Wrapper for async operations with automatic error handling
|
|
25
|
+
*/
|
|
26
|
+
async function withErrorHandling(operation, errorHandler, context) {
|
|
27
|
+
try {
|
|
28
|
+
return await operation();
|
|
29
|
+
} catch (error) {
|
|
30
|
+
if (errorHandler) {
|
|
31
|
+
errorHandler(error);
|
|
32
|
+
} else {
|
|
33
|
+
console.error(`Error in ${context || 'operation'}:`, error);
|
|
34
|
+
}
|
|
35
|
+
return null;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Execute multiple async operations in parallel with error handling
|
|
41
|
+
*/
|
|
42
|
+
async function parallelWithErrorHandling(operations, errorHandler) {
|
|
43
|
+
const results = await Promise.allSettled(operations.map((op, index) => withErrorHandling(op, error => errorHandler?.(error, index))));
|
|
44
|
+
return results.map(result => result.status === 'fulfilled' ? result.value : null);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Retry an async operation with exponential backoff
|
|
49
|
+
*/
|
|
50
|
+
async function retryAsync(operation, maxRetries = 3, baseDelay = 1000, shouldRetry) {
|
|
51
|
+
let lastError;
|
|
52
|
+
for (let attempt = 0; attempt <= maxRetries; attempt++) {
|
|
53
|
+
try {
|
|
54
|
+
return await operation();
|
|
55
|
+
} catch (error) {
|
|
56
|
+
lastError = error;
|
|
57
|
+
if (attempt === maxRetries) {
|
|
58
|
+
break;
|
|
59
|
+
}
|
|
60
|
+
if (shouldRetry && !shouldRetry(error)) {
|
|
61
|
+
break;
|
|
62
|
+
}
|
|
63
|
+
const delay = baseDelay * Math.pow(2, attempt);
|
|
64
|
+
await new Promise(resolve => setTimeout(resolve, delay));
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
throw lastError;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* Debounce async function calls
|
|
72
|
+
*/
|
|
73
|
+
function debounceAsync(func, delay) {
|
|
74
|
+
let timeoutId;
|
|
75
|
+
let lastPromise = null;
|
|
76
|
+
return (...args) => {
|
|
77
|
+
return new Promise((resolve, reject) => {
|
|
78
|
+
clearTimeout(timeoutId);
|
|
79
|
+
timeoutId = setTimeout(async () => {
|
|
80
|
+
try {
|
|
81
|
+
const result = await func(...args);
|
|
82
|
+
resolve(result);
|
|
83
|
+
} catch (error) {
|
|
84
|
+
reject(error);
|
|
85
|
+
}
|
|
86
|
+
}, delay);
|
|
87
|
+
});
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* Throttle async function calls
|
|
93
|
+
*/
|
|
94
|
+
function throttleAsync(func, limit, interval) {
|
|
95
|
+
let inThrottle = false;
|
|
96
|
+
let lastPromise = null;
|
|
97
|
+
return (...args) => {
|
|
98
|
+
if (inThrottle) {
|
|
99
|
+
return lastPromise;
|
|
100
|
+
}
|
|
101
|
+
inThrottle = true;
|
|
102
|
+
lastPromise = func(...args);
|
|
103
|
+
setTimeout(() => {
|
|
104
|
+
inThrottle = false;
|
|
105
|
+
}, interval);
|
|
106
|
+
return lastPromise;
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
* Execute async operations sequentially with progress tracking
|
|
112
|
+
*/
|
|
113
|
+
async function sequentialWithProgress(operations, onProgress) {
|
|
114
|
+
const results = [];
|
|
115
|
+
for (let i = 0; i < operations.length; i++) {
|
|
116
|
+
const result = await operations[i]();
|
|
117
|
+
results.push(result);
|
|
118
|
+
onProgress?.(i + 1, operations.length);
|
|
119
|
+
}
|
|
120
|
+
return results;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
/**
|
|
124
|
+
* Batch async operations
|
|
125
|
+
*/
|
|
126
|
+
async function batchAsync(items, batchSize, processor) {
|
|
127
|
+
for (let i = 0; i < items.length; i += batchSize) {
|
|
128
|
+
const batch = items.slice(i, i + batchSize);
|
|
129
|
+
await processor(batch);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
/**
|
|
134
|
+
* Create a cancellable async operation
|
|
135
|
+
*/
|
|
136
|
+
function createCancellableAsync(operation) {
|
|
137
|
+
let abortController = null;
|
|
138
|
+
return {
|
|
139
|
+
execute: async () => {
|
|
140
|
+
abortController = new AbortController();
|
|
141
|
+
return await operation(abortController.signal);
|
|
142
|
+
},
|
|
143
|
+
cancel: () => {
|
|
144
|
+
abortController?.abort();
|
|
145
|
+
}
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
/**
|
|
150
|
+
* Timeout wrapper for async operations
|
|
151
|
+
*/
|
|
152
|
+
async function withTimeout(operation, timeoutMs, timeoutMessage) {
|
|
153
|
+
const timeoutPromise = new Promise((_, reject) => {
|
|
154
|
+
setTimeout(() => {
|
|
155
|
+
reject(new Error(timeoutMessage || `Operation timed out after ${timeoutMs}ms`));
|
|
156
|
+
}, timeoutMs);
|
|
157
|
+
});
|
|
158
|
+
return Promise.race([operation, timeoutPromise]);
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
/**
|
|
162
|
+
* Cache async operation results
|
|
163
|
+
*/
|
|
164
|
+
function createAsyncCache(ttl = 5 * 60 * 1000 // 5 minutes default
|
|
165
|
+
) {
|
|
166
|
+
const cache = new Map();
|
|
167
|
+
return {
|
|
168
|
+
get: key => {
|
|
169
|
+
const item = cache.get(key);
|
|
170
|
+
if (!item) return null;
|
|
171
|
+
if (Date.now() - item.timestamp > ttl) {
|
|
172
|
+
cache.delete(key);
|
|
173
|
+
return null;
|
|
174
|
+
}
|
|
175
|
+
return item.data;
|
|
176
|
+
},
|
|
177
|
+
set: (key, data) => {
|
|
178
|
+
cache.set(key, {
|
|
179
|
+
data,
|
|
180
|
+
timestamp: Date.now()
|
|
181
|
+
});
|
|
182
|
+
},
|
|
183
|
+
clear: () => {
|
|
184
|
+
cache.clear();
|
|
185
|
+
},
|
|
186
|
+
delete: key => {
|
|
187
|
+
return cache.delete(key);
|
|
188
|
+
}
|
|
189
|
+
};
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
/**
|
|
193
|
+
* Execute async operation with loading state
|
|
194
|
+
*/
|
|
195
|
+
async function withLoadingState(operation, setLoading) {
|
|
196
|
+
setLoading(true);
|
|
197
|
+
try {
|
|
198
|
+
return await operation();
|
|
199
|
+
} finally {
|
|
200
|
+
setLoading(false);
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
/**
|
|
205
|
+
* Create a promise that resolves after a delay
|
|
206
|
+
*/
|
|
207
|
+
const delay = ms => new Promise(resolve => setTimeout(resolve, ms));
|
|
208
|
+
|
|
209
|
+
/**
|
|
210
|
+
* Execute async operation with retry on specific errors
|
|
211
|
+
*/
|
|
212
|
+
exports.delay = delay;
|
|
213
|
+
async function retryOnError(operation, retryableErrors, maxRetries = 3) {
|
|
214
|
+
return retryAsync(operation, maxRetries, 1000, error => {
|
|
215
|
+
const errorCode = error?.code || error?.status || error?.message;
|
|
216
|
+
return retryableErrors.includes(errorCode);
|
|
217
|
+
});
|
|
218
|
+
}
|
|
219
|
+
//# sourceMappingURL=asyncUtils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["withErrorHandling","operation","errorHandler","context","error","console","parallelWithErrorHandling","operations","results","Promise","allSettled","map","op","index","result","status","value","retryAsync","maxRetries","baseDelay","shouldRetry","lastError","attempt","delay","Math","pow","resolve","setTimeout","debounceAsync","func","timeoutId","lastPromise","args","reject","clearTimeout","throttleAsync","limit","interval","inThrottle","sequentialWithProgress","onProgress","i","length","push","batchAsync","items","batchSize","processor","batch","slice","createCancellableAsync","abortController","execute","AbortController","signal","cancel","abort","withTimeout","timeoutMs","timeoutMessage","timeoutPromise","_","Error","race","createAsyncCache","ttl","cache","Map","get","key","item","Date","now","timestamp","delete","data","set","clear","withLoadingState","setLoading","ms","exports","retryOnError","retryableErrors","errorCode","code","message","includes"],"sourceRoot":"../../../src","sources":["utils/asyncUtils.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.ErrorCodes = void 0;
|
|
7
|
+
exports.createApiError = createApiError;
|
|
8
|
+
exports.handleHttpError = handleHttpError;
|
|
9
|
+
exports.logError = logError;
|
|
10
|
+
exports.retryWithBackoff = retryWithBackoff;
|
|
11
|
+
exports.validateRequiredFields = validateRequiredFields;
|
|
12
|
+
/**
|
|
13
|
+
* Error handling utilities for consistent error processing
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Common error codes
|
|
18
|
+
*/
|
|
19
|
+
const ErrorCodes = exports.ErrorCodes = {
|
|
20
|
+
// Authentication errors
|
|
21
|
+
UNAUTHORIZED: 'UNAUTHORIZED',
|
|
22
|
+
FORBIDDEN: 'FORBIDDEN',
|
|
23
|
+
INVALID_TOKEN: 'INVALID_TOKEN',
|
|
24
|
+
MISSING_TOKEN: 'MISSING_TOKEN',
|
|
25
|
+
// Validation errors
|
|
26
|
+
VALIDATION_ERROR: 'VALIDATION_ERROR',
|
|
27
|
+
MISSING_PARAMETER: 'MISSING_PARAMETER',
|
|
28
|
+
INVALID_FORMAT: 'INVALID_FORMAT',
|
|
29
|
+
// Resource errors
|
|
30
|
+
NOT_FOUND: 'NOT_FOUND',
|
|
31
|
+
ALREADY_EXISTS: 'ALREADY_EXISTS',
|
|
32
|
+
CONFLICT: 'CONFLICT',
|
|
33
|
+
// Server errors
|
|
34
|
+
INTERNAL_ERROR: 'INTERNAL_ERROR',
|
|
35
|
+
SERVICE_UNAVAILABLE: 'SERVICE_UNAVAILABLE',
|
|
36
|
+
TIMEOUT: 'TIMEOUT',
|
|
37
|
+
// Network errors
|
|
38
|
+
NETWORK_ERROR: 'NETWORK_ERROR',
|
|
39
|
+
CONNECTION_FAILED: 'CONNECTION_FAILED'
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Create a standardized API error
|
|
44
|
+
*/
|
|
45
|
+
function createApiError(message, code = ErrorCodes.INTERNAL_ERROR, status = 500, details) {
|
|
46
|
+
return {
|
|
47
|
+
message,
|
|
48
|
+
code,
|
|
49
|
+
status,
|
|
50
|
+
details
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* Handle common HTTP errors and convert to ApiError
|
|
56
|
+
*/
|
|
57
|
+
function handleHttpError(error) {
|
|
58
|
+
// If it's already an ApiError, return it
|
|
59
|
+
if (error && typeof error === 'object' && 'code' in error && 'status' in error) {
|
|
60
|
+
return error;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
// Handle axios errors
|
|
64
|
+
if (error?.response) {
|
|
65
|
+
const {
|
|
66
|
+
status,
|
|
67
|
+
data
|
|
68
|
+
} = error.response;
|
|
69
|
+
return createApiError(data?.message || `HTTP ${status} error`, data?.code || getErrorCodeFromStatus(status), status, data);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
// Handle network errors
|
|
73
|
+
if (error?.request) {
|
|
74
|
+
return createApiError('Network error - no response received', ErrorCodes.NETWORK_ERROR, 0);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
// Handle other errors
|
|
78
|
+
return createApiError(error?.message || 'Unknown error occurred', ErrorCodes.INTERNAL_ERROR, 500);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* Get error code from HTTP status
|
|
83
|
+
*/
|
|
84
|
+
function getErrorCodeFromStatus(status) {
|
|
85
|
+
switch (status) {
|
|
86
|
+
case 400:
|
|
87
|
+
return ErrorCodes.VALIDATION_ERROR;
|
|
88
|
+
case 401:
|
|
89
|
+
return ErrorCodes.UNAUTHORIZED;
|
|
90
|
+
case 403:
|
|
91
|
+
return ErrorCodes.FORBIDDEN;
|
|
92
|
+
case 404:
|
|
93
|
+
return ErrorCodes.NOT_FOUND;
|
|
94
|
+
case 409:
|
|
95
|
+
return ErrorCodes.CONFLICT;
|
|
96
|
+
case 422:
|
|
97
|
+
return ErrorCodes.VALIDATION_ERROR;
|
|
98
|
+
case 500:
|
|
99
|
+
return ErrorCodes.INTERNAL_ERROR;
|
|
100
|
+
case 503:
|
|
101
|
+
return ErrorCodes.SERVICE_UNAVAILABLE;
|
|
102
|
+
default:
|
|
103
|
+
return ErrorCodes.INTERNAL_ERROR;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* Validate required fields and throw error if missing
|
|
109
|
+
*/
|
|
110
|
+
function validateRequiredFields(data, fields) {
|
|
111
|
+
const missing = fields.filter(field => !data[field]);
|
|
112
|
+
if (missing.length > 0) {
|
|
113
|
+
throw createApiError(`Missing required fields: ${missing.join(', ')}`, ErrorCodes.MISSING_PARAMETER, 400);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
/**
|
|
118
|
+
* Safe error logging with context
|
|
119
|
+
*/
|
|
120
|
+
function logError(error, context) {
|
|
121
|
+
const prefix = context ? `[${context}]` : '[Error]';
|
|
122
|
+
if (error instanceof Error) {
|
|
123
|
+
console.error(`${prefix} ${error.message}`, error.stack);
|
|
124
|
+
} else {
|
|
125
|
+
console.error(`${prefix}`, error);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
/**
|
|
130
|
+
* Retry function with exponential backoff
|
|
131
|
+
*/
|
|
132
|
+
async function retryWithBackoff(fn, maxRetries = 3, baseDelay = 1000) {
|
|
133
|
+
let lastError;
|
|
134
|
+
for (let attempt = 0; attempt <= maxRetries; attempt++) {
|
|
135
|
+
try {
|
|
136
|
+
return await fn();
|
|
137
|
+
} catch (error) {
|
|
138
|
+
lastError = error;
|
|
139
|
+
if (attempt === maxRetries) {
|
|
140
|
+
break;
|
|
141
|
+
}
|
|
142
|
+
const delay = baseDelay * Math.pow(2, attempt);
|
|
143
|
+
await new Promise(resolve => setTimeout(resolve, delay));
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
throw lastError;
|
|
147
|
+
}
|
|
148
|
+
//# sourceMappingURL=errorUtils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["ErrorCodes","exports","UNAUTHORIZED","FORBIDDEN","INVALID_TOKEN","MISSING_TOKEN","VALIDATION_ERROR","MISSING_PARAMETER","INVALID_FORMAT","NOT_FOUND","ALREADY_EXISTS","CONFLICT","INTERNAL_ERROR","SERVICE_UNAVAILABLE","TIMEOUT","NETWORK_ERROR","CONNECTION_FAILED","createApiError","message","code","status","details","handleHttpError","error","response","data","getErrorCodeFromStatus","request","validateRequiredFields","fields","missing","filter","field","length","join","logError","context","prefix","Error","console","stack","retryWithBackoff","fn","maxRetries","baseDelay","lastError","attempt","delay","Math","pow","Promise","resolve","setTimeout"],"sourceRoot":"../../../src","sources":["utils/errorUtils.ts"],"mappings":"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","ignoreList":[]}
|