@oxyhq/services 5.13.15 → 5.13.17

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 (138) hide show
  1. package/README.md +10 -0
  2. package/lib/commonjs/core/OxyServices.base.js +271 -0
  3. package/lib/commonjs/core/OxyServices.base.js.map +1 -0
  4. package/lib/commonjs/core/OxyServices.errors.js +26 -0
  5. package/lib/commonjs/core/OxyServices.errors.js.map +1 -0
  6. package/lib/commonjs/core/OxyServices.js +58 -2168
  7. package/lib/commonjs/core/OxyServices.js.map +1 -1
  8. package/lib/commonjs/core/mixins/OxyServices.analytics.js +60 -0
  9. package/lib/commonjs/core/mixins/OxyServices.analytics.js.map +1 -0
  10. package/lib/commonjs/core/mixins/OxyServices.assets.js +424 -0
  11. package/lib/commonjs/core/mixins/OxyServices.assets.js.map +1 -0
  12. package/lib/commonjs/core/mixins/OxyServices.auth.js +303 -0
  13. package/lib/commonjs/core/mixins/OxyServices.auth.js.map +1 -0
  14. package/lib/commonjs/core/mixins/OxyServices.developer.js +115 -0
  15. package/lib/commonjs/core/mixins/OxyServices.developer.js.map +1 -0
  16. package/lib/commonjs/core/mixins/OxyServices.devices.js +119 -0
  17. package/lib/commonjs/core/mixins/OxyServices.devices.js.map +1 -0
  18. package/lib/commonjs/core/mixins/OxyServices.karma.js +117 -0
  19. package/lib/commonjs/core/mixins/OxyServices.karma.js.map +1 -0
  20. package/lib/commonjs/core/mixins/OxyServices.language.js +124 -0
  21. package/lib/commonjs/core/mixins/OxyServices.language.js.map +1 -0
  22. package/lib/commonjs/core/mixins/OxyServices.location.js +55 -0
  23. package/lib/commonjs/core/mixins/OxyServices.location.js.map +1 -0
  24. package/lib/commonjs/core/mixins/OxyServices.payment.js +66 -0
  25. package/lib/commonjs/core/mixins/OxyServices.payment.js.map +1 -0
  26. package/lib/commonjs/core/mixins/OxyServices.privacy.js +174 -0
  27. package/lib/commonjs/core/mixins/OxyServices.privacy.js.map +1 -0
  28. package/lib/commonjs/core/mixins/OxyServices.totp.js +53 -0
  29. package/lib/commonjs/core/mixins/OxyServices.totp.js.map +1 -0
  30. package/lib/commonjs/core/mixins/OxyServices.user.js +388 -0
  31. package/lib/commonjs/core/mixins/OxyServices.user.js.map +1 -0
  32. package/lib/commonjs/core/mixins/OxyServices.utility.js +161 -0
  33. package/lib/commonjs/core/mixins/OxyServices.utility.js.map +1 -0
  34. package/lib/commonjs/core/mixins/index.js +39 -0
  35. package/lib/commonjs/core/mixins/index.js.map +1 -0
  36. package/lib/commonjs/core/mixins/mixinHelpers.js +62 -0
  37. package/lib/commonjs/core/mixins/mixinHelpers.js.map +1 -0
  38. package/lib/commonjs/ui/context/OxyContext.js +27 -2
  39. package/lib/commonjs/ui/context/OxyContext.js.map +1 -1
  40. package/lib/module/core/OxyServices.base.js +265 -0
  41. package/lib/module/core/OxyServices.base.js.map +1 -0
  42. package/lib/module/core/OxyServices.errors.js +20 -0
  43. package/lib/module/core/OxyServices.errors.js.map +1 -0
  44. package/lib/module/core/OxyServices.js +43 -2164
  45. package/lib/module/core/OxyServices.js.map +1 -1
  46. package/lib/module/core/mixins/OxyServices.analytics.js +56 -0
  47. package/lib/module/core/mixins/OxyServices.analytics.js.map +1 -0
  48. package/lib/module/core/mixins/OxyServices.assets.js +420 -0
  49. package/lib/module/core/mixins/OxyServices.assets.js.map +1 -0
  50. package/lib/module/core/mixins/OxyServices.auth.js +299 -0
  51. package/lib/module/core/mixins/OxyServices.auth.js.map +1 -0
  52. package/lib/module/core/mixins/OxyServices.developer.js +111 -0
  53. package/lib/module/core/mixins/OxyServices.developer.js.map +1 -0
  54. package/lib/module/core/mixins/OxyServices.devices.js +115 -0
  55. package/lib/module/core/mixins/OxyServices.devices.js.map +1 -0
  56. package/lib/module/core/mixins/OxyServices.karma.js +113 -0
  57. package/lib/module/core/mixins/OxyServices.karma.js.map +1 -0
  58. package/lib/module/core/mixins/OxyServices.language.js +120 -0
  59. package/lib/module/core/mixins/OxyServices.language.js.map +1 -0
  60. package/lib/module/core/mixins/OxyServices.location.js +51 -0
  61. package/lib/module/core/mixins/OxyServices.location.js.map +1 -0
  62. package/lib/module/core/mixins/OxyServices.payment.js +62 -0
  63. package/lib/module/core/mixins/OxyServices.payment.js.map +1 -0
  64. package/lib/module/core/mixins/OxyServices.privacy.js +170 -0
  65. package/lib/module/core/mixins/OxyServices.privacy.js.map +1 -0
  66. package/lib/module/core/mixins/OxyServices.totp.js +49 -0
  67. package/lib/module/core/mixins/OxyServices.totp.js.map +1 -0
  68. package/lib/module/core/mixins/OxyServices.user.js +384 -0
  69. package/lib/module/core/mixins/OxyServices.user.js.map +1 -0
  70. package/lib/module/core/mixins/OxyServices.utility.js +156 -0
  71. package/lib/module/core/mixins/OxyServices.utility.js.map +1 -0
  72. package/lib/module/core/mixins/index.js +36 -0
  73. package/lib/module/core/mixins/index.js.map +1 -0
  74. package/lib/module/core/mixins/mixinHelpers.js +56 -0
  75. package/lib/module/core/mixins/mixinHelpers.js.map +1 -0
  76. package/lib/module/ui/context/OxyContext.js +27 -2
  77. package/lib/module/ui/context/OxyContext.js.map +1 -1
  78. package/lib/typescript/core/OxyServices.base.d.ts +123 -0
  79. package/lib/typescript/core/OxyServices.base.d.ts.map +1 -0
  80. package/lib/typescript/core/OxyServices.d.ts +970 -746
  81. package/lib/typescript/core/OxyServices.d.ts.map +1 -1
  82. package/lib/typescript/core/OxyServices.errors.d.ts +12 -0
  83. package/lib/typescript/core/OxyServices.errors.d.ts.map +1 -0
  84. package/lib/typescript/core/mixins/OxyServices.analytics.d.ts +70 -0
  85. package/lib/typescript/core/mixins/OxyServices.analytics.d.ts.map +1 -0
  86. package/lib/typescript/core/mixins/OxyServices.assets.d.ts +166 -0
  87. package/lib/typescript/core/mixins/OxyServices.assets.d.ts.map +1 -0
  88. package/lib/typescript/core/mixins/OxyServices.auth.d.ts +168 -0
  89. package/lib/typescript/core/mixins/OxyServices.auth.d.ts.map +1 -0
  90. package/lib/typescript/core/mixins/OxyServices.developer.d.ts +103 -0
  91. package/lib/typescript/core/mixins/OxyServices.developer.d.ts.map +1 -0
  92. package/lib/typescript/core/mixins/OxyServices.devices.d.ts +93 -0
  93. package/lib/typescript/core/mixins/OxyServices.devices.d.ts.map +1 -0
  94. package/lib/typescript/core/mixins/OxyServices.karma.d.ts +89 -0
  95. package/lib/typescript/core/mixins/OxyServices.karma.d.ts.map +1 -0
  96. package/lib/typescript/core/mixins/OxyServices.language.d.ts +85 -0
  97. package/lib/typescript/core/mixins/OxyServices.language.d.ts.map +1 -0
  98. package/lib/typescript/core/mixins/OxyServices.location.d.ts +68 -0
  99. package/lib/typescript/core/mixins/OxyServices.location.d.ts.map +1 -0
  100. package/lib/typescript/core/mixins/OxyServices.payment.d.ts +74 -0
  101. package/lib/typescript/core/mixins/OxyServices.payment.d.ts.map +1 -0
  102. package/lib/typescript/core/mixins/OxyServices.privacy.d.ts +126 -0
  103. package/lib/typescript/core/mixins/OxyServices.privacy.d.ts.map +1 -0
  104. package/lib/typescript/core/mixins/OxyServices.totp.d.ts +69 -0
  105. package/lib/typescript/core/mixins/OxyServices.totp.d.ts.map +1 -0
  106. package/lib/typescript/core/mixins/OxyServices.user.d.ts +189 -0
  107. package/lib/typescript/core/mixins/OxyServices.user.d.ts.map +1 -0
  108. package/lib/typescript/core/mixins/OxyServices.utility.d.ts +97 -0
  109. package/lib/typescript/core/mixins/OxyServices.utility.d.ts.map +1 -0
  110. package/lib/typescript/core/mixins/index.d.ts +899 -0
  111. package/lib/typescript/core/mixins/index.d.ts.map +1 -0
  112. package/lib/typescript/core/mixins/mixinHelpers.d.ts +32 -0
  113. package/lib/typescript/core/mixins/mixinHelpers.d.ts.map +1 -0
  114. package/lib/typescript/models/interfaces.d.ts +10 -0
  115. package/lib/typescript/models/interfaces.d.ts.map +1 -1
  116. package/lib/typescript/ui/context/OxyContext.d.ts +2 -0
  117. package/lib/typescript/ui/context/OxyContext.d.ts.map +1 -1
  118. package/package.json +1 -1
  119. package/src/core/OxyServices.base.ts +311 -0
  120. package/src/core/OxyServices.errors.ts +26 -0
  121. package/src/core/OxyServices.ts +43 -2199
  122. package/src/core/mixins/OxyServices.analytics.ts +53 -0
  123. package/src/core/mixins/OxyServices.assets.ts +410 -0
  124. package/src/core/mixins/OxyServices.auth.ts +275 -0
  125. package/src/core/mixins/OxyServices.developer.ts +114 -0
  126. package/src/core/mixins/OxyServices.devices.ts +103 -0
  127. package/src/core/mixins/OxyServices.karma.ts +111 -0
  128. package/src/core/mixins/OxyServices.language.ts +127 -0
  129. package/src/core/mixins/OxyServices.location.ts +46 -0
  130. package/src/core/mixins/OxyServices.payment.ts +59 -0
  131. package/src/core/mixins/OxyServices.privacy.ts +182 -0
  132. package/src/core/mixins/OxyServices.totp.ts +36 -0
  133. package/src/core/mixins/OxyServices.user.ts +384 -0
  134. package/src/core/mixins/OxyServices.utility.ts +187 -0
  135. package/src/core/mixins/index.ts +58 -0
  136. package/src/core/mixins/mixinHelpers.ts +69 -0
  137. package/src/models/interfaces.ts +12 -0
  138. package/src/ui/context/OxyContext.tsx +36 -0
@@ -0,0 +1,384 @@
1
+ "use strict";
2
+
3
+ /**
4
+ * User Management Methods Mixin
5
+ */
6
+
7
+ import { buildSearchParams, buildPaginationParams } from '../../utils/apiUtils';
8
+ export function OxyServicesUserMixin(Base) {
9
+ return class extends Base {
10
+ constructor(...args) {
11
+ super(...args);
12
+ }
13
+ /**
14
+ * Get profile by username
15
+ */
16
+ async getProfileByUsername(username) {
17
+ try {
18
+ return await this.makeRequest('GET', `/api/profiles/username/${username}`, undefined, {
19
+ cache: true,
20
+ cacheTTL: 5 * 60 * 1000 // 5 minutes cache for profiles
21
+ });
22
+ } catch (error) {
23
+ throw this.handleError(error);
24
+ }
25
+ }
26
+
27
+ /**
28
+ * Search user profiles
29
+ */
30
+ async searchProfiles(query, pagination) {
31
+ try {
32
+ const params = {
33
+ query,
34
+ ...pagination
35
+ };
36
+ const searchParams = buildSearchParams(params);
37
+ const paramsObj = Object.fromEntries(searchParams.entries());
38
+ const response = await this.makeRequest('GET', '/api/profiles/search', paramsObj, {
39
+ cache: true,
40
+ cacheTTL: 2 * 60 * 1000 // 2 minutes cache
41
+ });
42
+
43
+ // New API shape: { data: User[], pagination: {...} }
44
+ const isSearchProfilesResponse = payload => typeof payload === 'object' && payload !== null && Array.isArray(payload.data);
45
+ if (isSearchProfilesResponse(response)) {
46
+ const typedResponse = response;
47
+ const paginationInfo = typedResponse.pagination ?? {
48
+ total: typedResponse.data.length,
49
+ limit: pagination?.limit ?? typedResponse.data.length,
50
+ offset: pagination?.offset ?? 0,
51
+ hasMore: typedResponse.data.length === (pagination?.limit ?? typedResponse.data.length) && (pagination?.limit ?? typedResponse.data.length) > 0
52
+ };
53
+ return {
54
+ data: typedResponse.data,
55
+ pagination: paginationInfo
56
+ };
57
+ }
58
+
59
+ // Legacy API shape: returns raw User[]
60
+ if (Array.isArray(response)) {
61
+ const fallbackLimit = pagination?.limit ?? response.length;
62
+ const fallbackPagination = {
63
+ total: response.length,
64
+ limit: fallbackLimit,
65
+ offset: pagination?.offset ?? 0,
66
+ hasMore: fallbackLimit > 0 && response.length === fallbackLimit
67
+ };
68
+ return {
69
+ data: response,
70
+ pagination: fallbackPagination
71
+ };
72
+ }
73
+
74
+ // If response is unexpected, throw an error
75
+ throw new Error('Unexpected search response format');
76
+ } catch (error) {
77
+ throw this.handleError(error);
78
+ }
79
+ }
80
+
81
+ /**
82
+ * Get profile recommendations
83
+ */
84
+ async getProfileRecommendations() {
85
+ return this.withAuthRetry(async () => {
86
+ return await this.makeRequest('GET', '/api/profiles/recommendations', undefined, {
87
+ cache: true
88
+ });
89
+ }, 'getProfileRecommendations');
90
+ }
91
+
92
+ /**
93
+ * Get user by ID
94
+ */
95
+ async getUserById(userId) {
96
+ try {
97
+ return await this.makeRequest('GET', `/api/users/${userId}`, undefined, {
98
+ cache: true,
99
+ cacheTTL: 5 * 60 * 1000 // 5 minutes cache
100
+ });
101
+ } catch (error) {
102
+ throw this.handleError(error);
103
+ }
104
+ }
105
+
106
+ /**
107
+ * Get current user
108
+ */
109
+ async getCurrentUser() {
110
+ return this.withAuthRetry(async () => {
111
+ return await this.makeRequest('GET', '/api/users/me', undefined, {
112
+ cache: true,
113
+ cacheTTL: 1 * 60 * 1000 // 1 minute cache for current user
114
+ });
115
+ }, 'getCurrentUser');
116
+ }
117
+
118
+ /**
119
+ * Update user profile
120
+ */
121
+ async updateProfile(updates) {
122
+ try {
123
+ return await this.makeRequest('PUT', '/api/users/me', updates, {
124
+ cache: false
125
+ });
126
+ } catch (error) {
127
+ throw this.handleError(error);
128
+ }
129
+ }
130
+
131
+ /**
132
+ * Get privacy settings for a user
133
+ * @param userId - The user ID (defaults to current user)
134
+ */
135
+ async getPrivacySettings(userId) {
136
+ try {
137
+ const id = userId || (await this.getCurrentUser()).id;
138
+ return await this.makeRequest('GET', `/api/privacy/${id}/privacy`, undefined, {
139
+ cache: true,
140
+ cacheTTL: 2 * 60 * 1000 // 2 minutes cache
141
+ });
142
+ } catch (error) {
143
+ throw this.handleError(error);
144
+ }
145
+ }
146
+
147
+ /**
148
+ * Update privacy settings
149
+ * @param settings - Partial privacy settings object
150
+ * @param userId - The user ID (defaults to current user)
151
+ */
152
+ async updatePrivacySettings(settings, userId) {
153
+ try {
154
+ const id = userId || (await this.getCurrentUser()).id;
155
+ return await this.makeRequest('PATCH', `/api/privacy/${id}/privacy`, settings, {
156
+ cache: false
157
+ });
158
+ } catch (error) {
159
+ throw this.handleError(error);
160
+ }
161
+ }
162
+
163
+ /**
164
+ * Request account verification
165
+ */
166
+ async requestAccountVerification(reason, evidence) {
167
+ try {
168
+ return await this.makeRequest('POST', '/api/users/verify/request', {
169
+ reason,
170
+ evidence
171
+ }, {
172
+ cache: false
173
+ });
174
+ } catch (error) {
175
+ throw this.handleError(error);
176
+ }
177
+ }
178
+
179
+ /**
180
+ * Download account data export
181
+ */
182
+ async downloadAccountData(format = 'json') {
183
+ try {
184
+ // Use axios instance directly for blob responses since RequestManager doesn't handle blobs
185
+ const axiosInstance = this.getClient().getAxiosInstance();
186
+ const response = await axiosInstance.get(`/api/users/me/data?format=${format}`, {
187
+ responseType: 'blob'
188
+ });
189
+ return response.data;
190
+ } catch (error) {
191
+ throw this.handleError(error);
192
+ }
193
+ }
194
+
195
+ /**
196
+ * Delete account permanently
197
+ * @param password - User password for confirmation
198
+ * @param confirmText - Confirmation text (usually username)
199
+ */
200
+ async deleteAccount(password, confirmText) {
201
+ try {
202
+ return await this.makeRequest('DELETE', '/api/users/me', {
203
+ password,
204
+ confirmText
205
+ }, {
206
+ cache: false
207
+ });
208
+ } catch (error) {
209
+ throw this.handleError(error);
210
+ }
211
+ }
212
+
213
+ /**
214
+ * Update user by ID (admin function)
215
+ */
216
+ async updateUser(userId, updates) {
217
+ try {
218
+ return await this.makeRequest('PUT', `/api/users/${userId}`, updates, {
219
+ cache: false
220
+ });
221
+ } catch (error) {
222
+ throw this.handleError(error);
223
+ }
224
+ }
225
+
226
+ /**
227
+ * Follow a user
228
+ */
229
+ async followUser(userId) {
230
+ try {
231
+ return await this.makeRequest('POST', `/api/users/${userId}/follow`, undefined, {
232
+ cache: false
233
+ });
234
+ } catch (error) {
235
+ throw this.handleError(error);
236
+ }
237
+ }
238
+
239
+ /**
240
+ * Unfollow a user
241
+ */
242
+ async unfollowUser(userId) {
243
+ try {
244
+ return await this.makeRequest('DELETE', `/api/users/${userId}/follow`, undefined, {
245
+ cache: false
246
+ });
247
+ } catch (error) {
248
+ throw this.handleError(error);
249
+ }
250
+ }
251
+
252
+ /**
253
+ * Get follow status
254
+ */
255
+ async getFollowStatus(userId) {
256
+ try {
257
+ return await this.makeRequest('GET', `/api/users/${userId}/follow-status`, undefined, {
258
+ cache: true,
259
+ cacheTTL: 1 * 60 * 1000 // 1 minute cache
260
+ });
261
+ } catch (error) {
262
+ throw this.handleError(error);
263
+ }
264
+ }
265
+
266
+ /**
267
+ * Get user followers
268
+ */
269
+ async getUserFollowers(userId, pagination) {
270
+ try {
271
+ const params = buildPaginationParams(pagination || {});
272
+ const response = await this.makeRequest('GET', `/api/users/${userId}/followers`, params, {
273
+ cache: true,
274
+ cacheTTL: 2 * 60 * 1000 // 2 minutes cache
275
+ });
276
+ return {
277
+ followers: response.data || [],
278
+ total: response.pagination.total,
279
+ hasMore: response.pagination.hasMore
280
+ };
281
+ } catch (error) {
282
+ throw this.handleError(error);
283
+ }
284
+ }
285
+
286
+ /**
287
+ * Get user following
288
+ */
289
+ async getUserFollowing(userId, pagination) {
290
+ try {
291
+ const params = buildPaginationParams(pagination || {});
292
+ const response = await this.makeRequest('GET', `/api/users/${userId}/following`, params, {
293
+ cache: true,
294
+ cacheTTL: 2 * 60 * 1000 // 2 minutes cache
295
+ });
296
+ return {
297
+ following: response.data || [],
298
+ total: response.pagination.total,
299
+ hasMore: response.pagination.hasMore
300
+ };
301
+ } catch (error) {
302
+ throw this.handleError(error);
303
+ }
304
+ }
305
+
306
+ /**
307
+ * Get notifications
308
+ */
309
+ async getNotifications() {
310
+ return this.withAuthRetry(async () => {
311
+ return await this.makeRequest('GET', '/api/notifications', undefined, {
312
+ cache: false // Don't cache notifications - always get fresh data
313
+ });
314
+ }, 'getNotifications');
315
+ }
316
+
317
+ /**
318
+ * Get unread notification count
319
+ */
320
+ async getUnreadCount() {
321
+ try {
322
+ const res = await this.makeRequest('GET', '/api/notifications/unread-count', undefined, {
323
+ cache: false // Don't cache unread count - always get fresh data
324
+ });
325
+ return res.count;
326
+ } catch (error) {
327
+ throw this.handleError(error);
328
+ }
329
+ }
330
+
331
+ /**
332
+ * Create notification
333
+ */
334
+ async createNotification(data) {
335
+ try {
336
+ return await this.makeRequest('POST', '/api/notifications', data, {
337
+ cache: false
338
+ });
339
+ } catch (error) {
340
+ throw this.handleError(error);
341
+ }
342
+ }
343
+
344
+ /**
345
+ * Mark notification as read
346
+ */
347
+ async markNotificationAsRead(notificationId) {
348
+ try {
349
+ await this.makeRequest('PUT', `/api/notifications/${notificationId}/read`, undefined, {
350
+ cache: false
351
+ });
352
+ } catch (error) {
353
+ throw this.handleError(error);
354
+ }
355
+ }
356
+
357
+ /**
358
+ * Mark all notifications as read
359
+ */
360
+ async markAllNotificationsAsRead() {
361
+ try {
362
+ await this.makeRequest('PUT', '/api/notifications/read-all', undefined, {
363
+ cache: false
364
+ });
365
+ } catch (error) {
366
+ throw this.handleError(error);
367
+ }
368
+ }
369
+
370
+ /**
371
+ * Delete notification
372
+ */
373
+ async deleteNotification(notificationId) {
374
+ try {
375
+ await this.makeRequest('DELETE', `/api/notifications/${notificationId}`, undefined, {
376
+ cache: false
377
+ });
378
+ } catch (error) {
379
+ throw this.handleError(error);
380
+ }
381
+ }
382
+ };
383
+ }
384
+ //# sourceMappingURL=OxyServices.user.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["buildSearchParams","buildPaginationParams","OxyServicesUserMixin","Base","constructor","args","getProfileByUsername","username","makeRequest","undefined","cache","cacheTTL","error","handleError","searchProfiles","query","pagination","params","searchParams","paramsObj","Object","fromEntries","entries","response","isSearchProfilesResponse","payload","Array","isArray","data","typedResponse","paginationInfo","total","length","limit","offset","hasMore","fallbackLimit","fallbackPagination","Error","getProfileRecommendations","withAuthRetry","getUserById","userId","getCurrentUser","updateProfile","updates","getPrivacySettings","id","updatePrivacySettings","settings","requestAccountVerification","reason","evidence","downloadAccountData","format","axiosInstance","getClient","getAxiosInstance","get","responseType","deleteAccount","password","confirmText","updateUser","followUser","unfollowUser","getFollowStatus","getUserFollowers","followers","getUserFollowing","following","getNotifications","getUnreadCount","res","count","createNotification","markNotificationAsRead","notificationId","markAllNotificationsAsRead","deleteNotification"],"sourceRoot":"../../../../src","sources":["core/mixins/OxyServices.user.ts"],"mappings":";;AAAA;AACA;AACA;;AAGA,SAASA,iBAAiB,EAAEC,qBAAqB,QAA+B,sBAAsB;AAEtG,OAAO,SAASC,oBAAoBA,CAAmCC,IAAO,EAAE;EAC9E,OAAO,cAAcA,IAAI,CAAC;IACxBC,WAAWA,CAAC,GAAGC,IAAW,EAAE;MAC1B,KAAK,CAAC,GAAIA,IAAc,CAAC;IAC3B;IACA;AACJ;AACA;IACI,MAAMC,oBAAoBA,CAACC,QAAgB,EAAiB;MAC1D,IAAI;QACF,OAAO,MAAM,IAAI,CAACC,WAAW,CAAO,KAAK,EAAE,0BAA0BD,QAAQ,EAAE,EAAEE,SAAS,EAAE;UAC1FC,KAAK,EAAE,IAAI;UACXC,QAAQ,EAAE,CAAC,GAAG,EAAE,GAAG,IAAI,CAAE;QAC3B,CAAC,CAAC;MACJ,CAAC,CAAC,OAAOC,KAAK,EAAE;QACd,MAAM,IAAI,CAACC,WAAW,CAACD,KAAK,CAAC;MAC/B;IACF;;IAEA;AACJ;AACA;IACI,MAAME,cAAcA,CAACC,KAAa,EAAEC,UAA6B,EAAmC;MAClG,IAAI;QACF,MAAMC,MAAM,GAAG;UAAEF,KAAK;UAAE,GAAGC;QAAW,CAAC;QACvC,MAAME,YAAY,GAAGlB,iBAAiB,CAACiB,MAAM,CAAC;QAC9C,MAAME,SAAS,GAAGC,MAAM,CAACC,WAAW,CAACH,YAAY,CAACI,OAAO,CAAC,CAAC,CAAC;QAE5D,MAAMC,QAAQ,GAAG,MAAM,IAAI,CAACf,WAAW,CACrC,KAAK,EACL,sBAAsB,EACtBW,SAAS,EACT;UACET,KAAK,EAAE,IAAI;UACXC,QAAQ,EAAE,CAAC,GAAG,EAAE,GAAG,IAAI,CAAE;QAC3B,CACF,CAAC;;QAED;QACA,MAAMa,wBAAwB,GAAIC,OAAgB,IAChD,OAAOA,OAAO,KAAK,QAAQ,IAC3BA,OAAO,KAAK,IAAI,IAChBC,KAAK,CAACC,OAAO,CAAEF,OAAO,CAA4BG,IAAI,CAAC;QAEzD,IAAIJ,wBAAwB,CAACD,QAAQ,CAAC,EAAE;UACtC,MAAMM,aAAa,GAAGN,QAAQ;UAC9B,MAAMO,cAA8B,GAAGD,aAAa,CAACb,UAAU,IAAI;YACjEe,KAAK,EAAEF,aAAa,CAACD,IAAI,CAACI,MAAM;YAChCC,KAAK,EAAEjB,UAAU,EAAEiB,KAAK,IAAIJ,aAAa,CAACD,IAAI,CAACI,MAAM;YACrDE,MAAM,EAAElB,UAAU,EAAEkB,MAAM,IAAI,CAAC;YAC/BC,OAAO,EAAEN,aAAa,CAACD,IAAI,CAACI,MAAM,MAAMhB,UAAU,EAAEiB,KAAK,IAAIJ,aAAa,CAACD,IAAI,CAACI,MAAM,CAAC,IACrF,CAAChB,UAAU,EAAEiB,KAAK,IAAIJ,aAAa,CAACD,IAAI,CAACI,MAAM,IAAI;UACvD,CAAC;UAED,OAAO;YACLJ,IAAI,EAAEC,aAAa,CAACD,IAAI;YACxBZ,UAAU,EAAEc;UACd,CAAC;QACH;;QAEA;QACA,IAAIJ,KAAK,CAACC,OAAO,CAACJ,QAAQ,CAAC,EAAE;UAC3B,MAAMa,aAAa,GAAGpB,UAAU,EAAEiB,KAAK,IAAIV,QAAQ,CAACS,MAAM;UAC1D,MAAMK,kBAAkC,GAAG;YACzCN,KAAK,EAAER,QAAQ,CAACS,MAAM;YACtBC,KAAK,EAAEG,aAAa;YACpBF,MAAM,EAAElB,UAAU,EAAEkB,MAAM,IAAI,CAAC;YAC/BC,OAAO,EAAEC,aAAa,GAAG,CAAC,IAAIb,QAAQ,CAACS,MAAM,KAAKI;UACpD,CAAC;UAED,OAAO;YAAER,IAAI,EAAEL,QAAQ;YAAEP,UAAU,EAAEqB;UAAmB,CAAC;QAC3D;;QAEA;QACA,MAAM,IAAIC,KAAK,CAAC,mCAAmC,CAAC;MACtD,CAAC,CAAC,OAAO1B,KAAK,EAAE;QACd,MAAM,IAAI,CAACC,WAAW,CAACD,KAAK,CAAC;MAC/B;IACF;;IAEA;AACJ;AACA;IACI,MAAM2B,yBAAyBA,CAAA,EAO3B;MACF,OAAO,IAAI,CAACC,aAAa,CAAC,YAAY;QACpC,OAAO,MAAM,IAAI,CAAChC,WAAW,CAAC,KAAK,EAAE,+BAA+B,EAAEC,SAAS,EAAE;UAAEC,KAAK,EAAE;QAAK,CAAC,CAAC;MACnG,CAAC,EAAE,2BAA2B,CAAC;IACjC;;IAEA;AACJ;AACA;IACI,MAAM+B,WAAWA,CAACC,MAAc,EAAiB;MAC/C,IAAI;QACF,OAAO,MAAM,IAAI,CAAClC,WAAW,CAAO,KAAK,EAAE,cAAckC,MAAM,EAAE,EAAEjC,SAAS,EAAE;UAC5EC,KAAK,EAAE,IAAI;UACXC,QAAQ,EAAE,CAAC,GAAG,EAAE,GAAG,IAAI,CAAE;QAC3B,CAAC,CAAC;MACJ,CAAC,CAAC,OAAOC,KAAK,EAAE;QACd,MAAM,IAAI,CAACC,WAAW,CAACD,KAAK,CAAC;MAC/B;IACF;;IAEA;AACJ;AACA;IACI,MAAM+B,cAAcA,CAAA,EAAkB;MACpC,OAAO,IAAI,CAACH,aAAa,CAAC,YAAY;QACpC,OAAO,MAAM,IAAI,CAAChC,WAAW,CAAO,KAAK,EAAE,eAAe,EAAEC,SAAS,EAAE;UACrEC,KAAK,EAAE,IAAI;UACXC,QAAQ,EAAE,CAAC,GAAG,EAAE,GAAG,IAAI,CAAE;QAC3B,CAAC,CAAC;MACJ,CAAC,EAAE,gBAAgB,CAAC;IACtB;;IAEA;AACJ;AACA;IACI,MAAMiC,aAAaA,CAACC,OAA4B,EAAiB;MAC/D,IAAI;QACF,OAAO,MAAM,IAAI,CAACrC,WAAW,CAAO,KAAK,EAAE,eAAe,EAAEqC,OAAO,EAAE;UAAEnC,KAAK,EAAE;QAAM,CAAC,CAAC;MACxF,CAAC,CAAC,OAAOE,KAAK,EAAE;QACd,MAAM,IAAI,CAACC,WAAW,CAACD,KAAK,CAAC;MAC/B;IACF;;IAEA;AACJ;AACA;AACA;IACI,MAAMkC,kBAAkBA,CAACJ,MAAe,EAAgB;MACtD,IAAI;QACF,MAAMK,EAAE,GAAGL,MAAM,IAAI,CAAC,MAAM,IAAI,CAACC,cAAc,CAAC,CAAC,EAAEI,EAAE;QACrD,OAAO,MAAM,IAAI,CAACvC,WAAW,CAAM,KAAK,EAAE,gBAAgBuC,EAAE,UAAU,EAAEtC,SAAS,EAAE;UACjFC,KAAK,EAAE,IAAI;UACXC,QAAQ,EAAE,CAAC,GAAG,EAAE,GAAG,IAAI,CAAE;QAC3B,CAAC,CAAC;MACJ,CAAC,CAAC,OAAOC,KAAK,EAAE;QACd,MAAM,IAAI,CAACC,WAAW,CAACD,KAAK,CAAC;MAC/B;IACF;;IAEA;AACJ;AACA;AACA;AACA;IACI,MAAMoC,qBAAqBA,CAACC,QAA6B,EAAEP,MAAe,EAAgB;MACxF,IAAI;QACF,MAAMK,EAAE,GAAGL,MAAM,IAAI,CAAC,MAAM,IAAI,CAACC,cAAc,CAAC,CAAC,EAAEI,EAAE;QACrD,OAAO,MAAM,IAAI,CAACvC,WAAW,CAAM,OAAO,EAAE,gBAAgBuC,EAAE,UAAU,EAAEE,QAAQ,EAAE;UAClFvC,KAAK,EAAE;QACT,CAAC,CAAC;MACJ,CAAC,CAAC,OAAOE,KAAK,EAAE;QACd,MAAM,IAAI,CAACC,WAAW,CAACD,KAAK,CAAC;MAC/B;IACF;;IAEA;AACJ;AACA;IACI,MAAMsC,0BAA0BA,CAACC,MAAc,EAAEC,QAAiB,EAAmD;MACnH,IAAI;QACF,OAAO,MAAM,IAAI,CAAC5C,WAAW,CAAyC,MAAM,EAAE,2BAA2B,EAAE;UACzG2C,MAAM;UACNC;QACF,CAAC,EAAE;UAAE1C,KAAK,EAAE;QAAM,CAAC,CAAC;MACtB,CAAC,CAAC,OAAOE,KAAK,EAAE;QACd,MAAM,IAAI,CAACC,WAAW,CAACD,KAAK,CAAC;MAC/B;IACF;;IAEA;AACJ;AACA;IACI,MAAMyC,mBAAmBA,CAACC,MAAsB,GAAG,MAAM,EAAiB;MACxE,IAAI;QACF;QACA,MAAMC,aAAa,GAAG,IAAI,CAACC,SAAS,CAAC,CAAC,CAACC,gBAAgB,CAAC,CAAC;QAEzD,MAAMlC,QAAQ,GAAG,MAAMgC,aAAa,CAACG,GAAG,CAAC,6BAA6BJ,MAAM,EAAE,EAAE;UAC9EK,YAAY,EAAE;QAChB,CAAC,CAAC;QAEF,OAAOpC,QAAQ,CAACK,IAAI;MACtB,CAAC,CAAC,OAAOhB,KAAK,EAAE;QACd,MAAM,IAAI,CAACC,WAAW,CAACD,KAAK,CAAC;MAC/B;IACF;;IAEA;AACJ;AACA;AACA;AACA;IACI,MAAMgD,aAAaA,CAACC,QAAgB,EAAEC,WAAmB,EAAgC;MACvF,IAAI;QACF,OAAO,MAAM,IAAI,CAACtD,WAAW,CAAsB,QAAQ,EAAE,eAAe,EAAE;UAC5EqD,QAAQ;UACRC;QACF,CAAC,EAAE;UAAEpD,KAAK,EAAE;QAAM,CAAC,CAAC;MACtB,CAAC,CAAC,OAAOE,KAAK,EAAE;QACd,MAAM,IAAI,CAACC,WAAW,CAACD,KAAK,CAAC;MAC/B;IACF;;IAEA;AACJ;AACA;IACI,MAAMmD,UAAUA,CAACrB,MAAc,EAAEG,OAA4B,EAAiB;MAC5E,IAAI;QACF,OAAO,MAAM,IAAI,CAACrC,WAAW,CAAO,KAAK,EAAE,cAAckC,MAAM,EAAE,EAAEG,OAAO,EAAE;UAAEnC,KAAK,EAAE;QAAM,CAAC,CAAC;MAC/F,CAAC,CAAC,OAAOE,KAAK,EAAE;QACd,MAAM,IAAI,CAACC,WAAW,CAACD,KAAK,CAAC;MAC/B;IACF;;IAEA;AACJ;AACA;IACI,MAAMoD,UAAUA,CAACtB,MAAc,EAAkD;MAC/E,IAAI;QACF,OAAO,MAAM,IAAI,CAAClC,WAAW,CAAC,MAAM,EAAE,cAAckC,MAAM,SAAS,EAAEjC,SAAS,EAAE;UAAEC,KAAK,EAAE;QAAM,CAAC,CAAC;MACnG,CAAC,CAAC,OAAOE,KAAK,EAAE;QACd,MAAM,IAAI,CAACC,WAAW,CAACD,KAAK,CAAC;MAC/B;IACF;;IAEA;AACJ;AACA;IACI,MAAMqD,YAAYA,CAACvB,MAAc,EAAkD;MACjF,IAAI;QACF,OAAO,MAAM,IAAI,CAAClC,WAAW,CAAC,QAAQ,EAAE,cAAckC,MAAM,SAAS,EAAEjC,SAAS,EAAE;UAAEC,KAAK,EAAE;QAAM,CAAC,CAAC;MACrG,CAAC,CAAC,OAAOE,KAAK,EAAE;QACd,MAAM,IAAI,CAACC,WAAW,CAACD,KAAK,CAAC;MAC/B;IACF;;IAEA;AACJ;AACA;IACI,MAAMsD,eAAeA,CAACxB,MAAc,EAAqC;MACvE,IAAI;QACF,OAAO,MAAM,IAAI,CAAClC,WAAW,CAAC,KAAK,EAAE,cAAckC,MAAM,gBAAgB,EAAEjC,SAAS,EAAE;UACpFC,KAAK,EAAE,IAAI;UACXC,QAAQ,EAAE,CAAC,GAAG,EAAE,GAAG,IAAI,CAAE;QAC3B,CAAC,CAAC;MACJ,CAAC,CAAC,OAAOC,KAAK,EAAE;QACd,MAAM,IAAI,CAACC,WAAW,CAACD,KAAK,CAAC;MAC/B;IACF;;IAEA;AACJ;AACA;IACI,MAAMuD,gBAAgBA,CACpBzB,MAAc,EACd1B,UAA6B,EACoC;MACjE,IAAI;QACF,MAAMC,MAAM,GAAGhB,qBAAqB,CAACe,UAAU,IAAI,CAAC,CAAC,CAAC;QACtD,MAAMO,QAAQ,GAAG,MAAM,IAAI,CAACf,WAAW,CAAoE,KAAK,EAAE,cAAckC,MAAM,YAAY,EAAEzB,MAAM,EAAE;UAC1JP,KAAK,EAAE,IAAI;UACXC,QAAQ,EAAE,CAAC,GAAG,EAAE,GAAG,IAAI,CAAE;QAC3B,CAAC,CAAC;QACF,OAAO;UACLyD,SAAS,EAAE7C,QAAQ,CAACK,IAAI,IAAI,EAAE;UAC9BG,KAAK,EAAER,QAAQ,CAACP,UAAU,CAACe,KAAK;UAChCI,OAAO,EAAEZ,QAAQ,CAACP,UAAU,CAACmB;QAC/B,CAAC;MACH,CAAC,CAAC,OAAOvB,KAAK,EAAE;QACd,MAAM,IAAI,CAACC,WAAW,CAACD,KAAK,CAAC;MAC/B;IACF;;IAEA;AACJ;AACA;IACI,MAAMyD,gBAAgBA,CACpB3B,MAAc,EACd1B,UAA6B,EACoC;MACjE,IAAI;QACF,MAAMC,MAAM,GAAGhB,qBAAqB,CAACe,UAAU,IAAI,CAAC,CAAC,CAAC;QACtD,MAAMO,QAAQ,GAAG,MAAM,IAAI,CAACf,WAAW,CAAoE,KAAK,EAAE,cAAckC,MAAM,YAAY,EAAEzB,MAAM,EAAE;UAC1JP,KAAK,EAAE,IAAI;UACXC,QAAQ,EAAE,CAAC,GAAG,EAAE,GAAG,IAAI,CAAE;QAC3B,CAAC,CAAC;QACF,OAAO;UACL2D,SAAS,EAAE/C,QAAQ,CAACK,IAAI,IAAI,EAAE;UAC9BG,KAAK,EAAER,QAAQ,CAACP,UAAU,CAACe,KAAK;UAChCI,OAAO,EAAEZ,QAAQ,CAACP,UAAU,CAACmB;QAC/B,CAAC;MACH,CAAC,CAAC,OAAOvB,KAAK,EAAE;QACd,MAAM,IAAI,CAACC,WAAW,CAACD,KAAK,CAAC;MAC/B;IACF;;IAEA;AACJ;AACA;IACI,MAAM2D,gBAAgBA,CAAA,EAA4B;MAChD,OAAO,IAAI,CAAC/B,aAAa,CAAC,YAAY;QACpC,OAAO,MAAM,IAAI,CAAChC,WAAW,CAAiB,KAAK,EAAE,oBAAoB,EAAEC,SAAS,EAAE;UACpFC,KAAK,EAAE,KAAK,CAAE;QAChB,CAAC,CAAC;MACJ,CAAC,EAAE,kBAAkB,CAAC;IACxB;;IAEA;AACJ;AACA;IACI,MAAM8D,cAAcA,CAAA,EAAoB;MACtC,IAAI;QACF,MAAMC,GAAG,GAAG,MAAM,IAAI,CAACjE,WAAW,CAAoB,KAAK,EAAE,iCAAiC,EAAEC,SAAS,EAAE;UACzGC,KAAK,EAAE,KAAK,CAAE;QAChB,CAAC,CAAC;QACF,OAAO+D,GAAG,CAACC,KAAK;MAClB,CAAC,CAAC,OAAO9D,KAAK,EAAE;QACd,MAAM,IAAI,CAACC,WAAW,CAACD,KAAK,CAAC;MAC/B;IACF;;IAEA;AACJ;AACA;IACI,MAAM+D,kBAAkBA,CAAC/C,IAA2B,EAAyB;MAC3E,IAAI;QACF,OAAO,MAAM,IAAI,CAACpB,WAAW,CAAe,MAAM,EAAE,oBAAoB,EAAEoB,IAAI,EAAE;UAAElB,KAAK,EAAE;QAAM,CAAC,CAAC;MACnG,CAAC,CAAC,OAAOE,KAAK,EAAE;QACd,MAAM,IAAI,CAACC,WAAW,CAACD,KAAK,CAAC;MAC/B;IACF;;IAEA;AACJ;AACA;IACI,MAAMgE,sBAAsBA,CAACC,cAAsB,EAAiB;MAClE,IAAI;QACF,MAAM,IAAI,CAACrE,WAAW,CAAC,KAAK,EAAE,sBAAsBqE,cAAc,OAAO,EAAEpE,SAAS,EAAE;UAAEC,KAAK,EAAE;QAAM,CAAC,CAAC;MACzG,CAAC,CAAC,OAAOE,KAAK,EAAE;QACd,MAAM,IAAI,CAACC,WAAW,CAACD,KAAK,CAAC;MAC/B;IACF;;IAEA;AACJ;AACA;IACI,MAAMkE,0BAA0BA,CAAA,EAAkB;MAChD,IAAI;QACF,MAAM,IAAI,CAACtE,WAAW,CAAC,KAAK,EAAE,6BAA6B,EAAEC,SAAS,EAAE;UAAEC,KAAK,EAAE;QAAM,CAAC,CAAC;MAC3F,CAAC,CAAC,OAAOE,KAAK,EAAE;QACd,MAAM,IAAI,CAACC,WAAW,CAACD,KAAK,CAAC;MAC/B;IACF;;IAEA;AACJ;AACA;IACI,MAAMmE,kBAAkBA,CAACF,cAAsB,EAAiB;MAC9D,IAAI;QACF,MAAM,IAAI,CAACrE,WAAW,CAAC,QAAQ,EAAE,sBAAsBqE,cAAc,EAAE,EAAEpE,SAAS,EAAE;UAAEC,KAAK,EAAE;QAAM,CAAC,CAAC;MACvG,CAAC,CAAC,OAAOE,KAAK,EAAE;QACd,MAAM,IAAI,CAACC,WAAW,CAACD,KAAK,CAAC;MAC/B;IACF;EACF,CAAC;AACH","ignoreList":[]}
@@ -0,0 +1,156 @@
1
+ "use strict";
2
+
3
+ /**
4
+ * Utility Methods Mixin
5
+ *
6
+ * Provides utility methods including link metadata fetching
7
+ * and Express.js authentication middleware
8
+ */
9
+ import { jwtDecode } from 'jwt-decode';
10
+ import { CACHE_TIMES } from './mixinHelpers';
11
+ export function OxyServicesUtilityMixin(Base) {
12
+ return class extends Base {
13
+ constructor(...args) {
14
+ super(...args);
15
+ }
16
+ /**
17
+ * Fetch link metadata
18
+ */
19
+ async fetchLinkMetadata(url) {
20
+ try {
21
+ return await this.makeRequest('GET', '/api/link-metadata', {
22
+ url
23
+ }, {
24
+ cache: true,
25
+ cacheTTL: CACHE_TIMES.EXTRA_LONG
26
+ });
27
+ } catch (error) {
28
+ throw this.handleError(error);
29
+ }
30
+ }
31
+
32
+ /**
33
+ * Simple Express.js authentication middleware
34
+ *
35
+ * Built-in authentication middleware that validates JWT tokens and adds user data to requests.
36
+ *
37
+ * @example
38
+ * ```typescript
39
+ * // Basic usage - just add it to your routes
40
+ * app.use('/api/protected', oxyServices.auth());
41
+ *
42
+ * // With debug logging
43
+ * app.use('/api/protected', oxyServices.auth({ debug: true }));
44
+ *
45
+ * // With custom error handling
46
+ * app.use('/api/protected', oxyServices.auth({
47
+ * onError: (error) => console.error('Auth failed:', error)
48
+ * }));
49
+ *
50
+ * // Load full user data
51
+ * app.use('/api/protected', oxyServices.auth({ loadUser: true }));
52
+ * ```
53
+ *
54
+ * @param options Optional configuration
55
+ * @param options.debug Enable debug logging (default: false)
56
+ * @param options.onError Custom error handler
57
+ * @param options.loadUser Load full user data (default: false for performance)
58
+ * @param options.session Use session-based validation (default: false)
59
+ * @returns Express middleware function
60
+ */
61
+ auth(options = {}) {
62
+ const {
63
+ debug = false,
64
+ onError,
65
+ loadUser = false,
66
+ session = false
67
+ } = options;
68
+
69
+ // Return a synchronous middleware function
70
+ return (req, res, next) => {
71
+ try {
72
+ // Extract token from Authorization header
73
+ const authHeader = req.headers['authorization'];
74
+ const token = authHeader?.startsWith('Bearer ') ? authHeader.substring(7) : null;
75
+ if (debug) {
76
+ console.log(`🔐 Auth: Processing ${req.method} ${req.path}`);
77
+ console.log(`🔐 Auth: Token present: ${!!token}`);
78
+ }
79
+ if (!token) {
80
+ const error = {
81
+ message: 'Access token required',
82
+ code: 'MISSING_TOKEN',
83
+ status: 401
84
+ };
85
+ if (debug) console.log(`❌ Auth: Missing token`);
86
+ if (onError) return onError(error);
87
+ return res.status(401).json(error);
88
+ }
89
+
90
+ // Decode and validate token
91
+ let decoded;
92
+ try {
93
+ decoded = jwtDecode(token);
94
+ if (debug) {
95
+ console.log(`🔐 Auth: Token decoded, User ID: ${decoded.userId || decoded.id}`);
96
+ }
97
+ } catch (decodeError) {
98
+ const error = {
99
+ message: 'Invalid token format',
100
+ code: 'INVALID_TOKEN_FORMAT',
101
+ status: 403
102
+ };
103
+ if (debug) console.log(`❌ Auth: Token decode failed`);
104
+ if (onError) return onError(error);
105
+ return res.status(403).json(error);
106
+ }
107
+ const userId = decoded.userId || decoded.id;
108
+ if (!userId) {
109
+ const error = {
110
+ message: 'Token missing user ID',
111
+ code: 'INVALID_TOKEN_PAYLOAD',
112
+ status: 403
113
+ };
114
+ if (debug) console.log(`❌ Auth: Token missing user ID`);
115
+ if (onError) return onError(error);
116
+ return res.status(403).json(error);
117
+ }
118
+
119
+ // Check token expiration
120
+ if (decoded.exp && decoded.exp < Math.floor(Date.now() / 1000)) {
121
+ const error = {
122
+ message: 'Token expired',
123
+ code: 'TOKEN_EXPIRED',
124
+ status: 403
125
+ };
126
+ if (debug) console.log(`❌ Auth: Token expired`);
127
+ if (onError) return onError(error);
128
+ return res.status(403).json(error);
129
+ }
130
+
131
+ // For now, skip session validation to keep it simple
132
+ // Session validation can be added later if needed
133
+
134
+ // Set request properties immediately
135
+ req.userId = userId;
136
+ req.accessToken = token;
137
+ req.user = {
138
+ id: userId
139
+ };
140
+ if (debug) {
141
+ console.log(`✅ Auth: Authentication successful for user ${userId}`);
142
+ }
143
+ next();
144
+ } catch (error) {
145
+ const apiError = this.handleError(error);
146
+ if (debug) {
147
+ console.log(`❌ Auth: Unexpected error:`, apiError);
148
+ }
149
+ if (onError) return onError(apiError);
150
+ return res.status(apiError && apiError.status || 500).json(apiError);
151
+ }
152
+ };
153
+ }
154
+ };
155
+ }
156
+ //# sourceMappingURL=OxyServices.utility.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["jwtDecode","CACHE_TIMES","OxyServicesUtilityMixin","Base","constructor","args","fetchLinkMetadata","url","makeRequest","cache","cacheTTL","EXTRA_LONG","error","handleError","auth","options","debug","onError","loadUser","session","req","res","next","authHeader","headers","token","startsWith","substring","console","log","method","path","message","code","status","json","decoded","userId","id","decodeError","exp","Math","floor","Date","now","accessToken","user","apiError"],"sourceRoot":"../../../../src","sources":["core/mixins/OxyServices.utility.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+
3
+ /**
4
+ * Centralized mixin exports and composition helper
5
+ *
6
+ * This module provides a clean way to compose all mixins
7
+ * and ensures consistent ordering for better maintainability
8
+ */
9
+
10
+ import { OxyServicesBase } from '../OxyServices.base';
11
+ import { OxyServicesAuthMixin } from './OxyServices.auth';
12
+ import { OxyServicesUserMixin } from './OxyServices.user';
13
+ import { OxyServicesTotpMixin } from './OxyServices.totp';
14
+ import { OxyServicesPrivacyMixin } from './OxyServices.privacy';
15
+ import { OxyServicesLanguageMixin } from './OxyServices.language';
16
+ import { OxyServicesPaymentMixin } from './OxyServices.payment';
17
+ import { OxyServicesKarmaMixin } from './OxyServices.karma';
18
+ import { OxyServicesAssetsMixin } from './OxyServices.assets';
19
+ import { OxyServicesDeveloperMixin } from './OxyServices.developer';
20
+ import { OxyServicesLocationMixin } from './OxyServices.location';
21
+ import { OxyServicesAnalyticsMixin } from './OxyServices.analytics';
22
+ import { OxyServicesDevicesMixin } from './OxyServices.devices';
23
+ import { OxyServicesUtilityMixin } from './OxyServices.utility';
24
+
25
+ /**
26
+ * Composes all OxyServices mixins in the correct order
27
+ *
28
+ * Order matters for mixins - dependencies should be applied first.
29
+ * This function ensures consistent composition across the codebase.
30
+ *
31
+ * @returns The fully composed OxyServices class with all mixins applied
32
+ */
33
+ export function composeOxyServices() {
34
+ return OxyServicesUtilityMixin(OxyServicesDevicesMixin(OxyServicesAnalyticsMixin(OxyServicesLocationMixin(OxyServicesDeveloperMixin(OxyServicesAssetsMixin(OxyServicesKarmaMixin(OxyServicesPaymentMixin(OxyServicesLanguageMixin(OxyServicesPrivacyMixin(OxyServicesTotpMixin(OxyServicesUserMixin(OxyServicesAuthMixin(OxyServicesBase)))))))))))));
35
+ }
36
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["OxyServicesBase","OxyServicesAuthMixin","OxyServicesUserMixin","OxyServicesTotpMixin","OxyServicesPrivacyMixin","OxyServicesLanguageMixin","OxyServicesPaymentMixin","OxyServicesKarmaMixin","OxyServicesAssetsMixin","OxyServicesDeveloperMixin","OxyServicesLocationMixin","OxyServicesAnalyticsMixin","OxyServicesDevicesMixin","OxyServicesUtilityMixin","composeOxyServices"],"sourceRoot":"../../../../src","sources":["core/mixins/index.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASA,eAAe,QAAQ,qBAAqB;AACrD,SAASC,oBAAoB,QAAQ,oBAAoB;AACzD,SAASC,oBAAoB,QAAQ,oBAAoB;AACzD,SAASC,oBAAoB,QAAQ,oBAAoB;AACzD,SAASC,uBAAuB,QAAQ,uBAAuB;AAC/D,SAASC,wBAAwB,QAAQ,wBAAwB;AACjE,SAASC,uBAAuB,QAAQ,uBAAuB;AAC/D,SAASC,qBAAqB,QAAQ,qBAAqB;AAC3D,SAASC,sBAAsB,QAAQ,sBAAsB;AAC7D,SAASC,yBAAyB,QAAQ,yBAAyB;AACnE,SAASC,wBAAwB,QAAQ,wBAAwB;AACjE,SAASC,yBAAyB,QAAQ,yBAAyB;AACnE,SAASC,uBAAuB,QAAQ,uBAAuB;AAC/D,SAASC,uBAAuB,QAAQ,uBAAuB;;AAE/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,kBAAkBA,CAAA,EAAG;EACnC,OAAOD,uBAAuB,CAC5BD,uBAAuB,CACrBD,yBAAyB,CACvBD,wBAAwB,CACtBD,yBAAyB,CACvBD,sBAAsB,CACpBD,qBAAqB,CACnBD,uBAAuB,CACrBD,wBAAwB,CACtBD,uBAAuB,CACrBD,oBAAoB,CAClBD,oBAAoB,CAClBD,oBAAoB,CAACD,eAAe,CACtC,CACF,CACF,CACF,CACF,CACF,CACF,CACF,CACF,CACF,CACF,CACF,CAAC;AACH","ignoreList":[]}
@@ -0,0 +1,56 @@
1
+ "use strict";
2
+
3
+ /**
4
+ * Helper utilities for mixin classes
5
+ * Provides common patterns to reduce code duplication
6
+ */
7
+
8
+ /**
9
+ * Wraps an async method with standard error handling
10
+ * Reduces boilerplate in mixin methods
11
+ */
12
+ export async function withErrorHandling(operation, handleError) {
13
+ try {
14
+ return await operation();
15
+ } catch (error) {
16
+ throw handleError(error);
17
+ }
18
+ }
19
+
20
+ /**
21
+ * Creates a standard API request method with error handling
22
+ * Reduces duplication across mixin methods
23
+ */
24
+ export function createApiMethod(makeRequest, handleError, method, url, options = {}) {
25
+ return async (...args) => {
26
+ const urlString = typeof url === 'function' ? url(...args) : url;
27
+ const requestData = options.transformData ? options.transformData(args) : args[0];
28
+ const requestOptions = {
29
+ cache: options.cache ?? true,
30
+ cacheTTL: options.cacheTTL,
31
+ retry: options.retry ?? true
32
+ };
33
+ try {
34
+ const response = await makeRequest(method, urlString, requestData, requestOptions);
35
+ return options.transformResponse ? options.transformResponse(response) : response;
36
+ } catch (error) {
37
+ throw handleError(error);
38
+ }
39
+ };
40
+ }
41
+
42
+ /**
43
+ * Cache time constants (in milliseconds)
44
+ */
45
+ export const CACHE_TIMES = {
46
+ SHORT: 1 * 60 * 1000,
47
+ // 1 minute
48
+ MEDIUM: 2 * 60 * 1000,
49
+ // 2 minutes
50
+ LONG: 5 * 60 * 1000,
51
+ // 5 minutes
52
+ VERY_LONG: 10 * 60 * 1000,
53
+ // 10 minutes
54
+ EXTRA_LONG: 30 * 60 * 1000 // 30 minutes
55
+ };
56
+ //# sourceMappingURL=mixinHelpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["withErrorHandling","operation","handleError","error","createApiMethod","makeRequest","method","url","options","args","urlString","requestData","transformData","requestOptions","cache","cacheTTL","retry","response","transformResponse","CACHE_TIMES","SHORT","MEDIUM","LONG","VERY_LONG","EXTRA_LONG"],"sourceRoot":"../../../../src","sources":["core/mixins/mixinHelpers.ts"],"mappings":";;AAAA;AACA;AACA;AACA;;AAIA;AACA;AACA;AACA;AACA,OAAO,eAAeA,iBAAiBA,CACrCC,SAA2B,EAC3BC,WAAkC,EACtB;EACZ,IAAI;IACF,OAAO,MAAMD,SAAS,CAAC,CAAC;EAC1B,CAAC,CAAC,OAAOE,KAAK,EAAE;IACd,MAAMD,WAAW,CAACC,KAAK,CAAC;EAC1B;AACF;;AAEA;AACA;AACA;AACA;AACA,OAAO,SAASC,eAAeA,CAC7BC,WAA2C,EAC3CH,WAA2C,EAC3CI,MAAmD,EACnDC,GAA0C,EAC1CC,OAMC,GAAG,CAAC,CAAC,EACN;EACA,OAAO,OAAO,GAAGC,IAAW,KAAiB;IAC3C,MAAMC,SAAS,GAAG,OAAOH,GAAG,KAAK,UAAU,GAAGA,GAAG,CAAC,GAAGE,IAAI,CAAC,GAAGF,GAAG;IAChE,MAAMI,WAAW,GAAGH,OAAO,CAACI,aAAa,GAAGJ,OAAO,CAACI,aAAa,CAACH,IAAI,CAAC,GAAGA,IAAI,CAAC,CAAC,CAAC;IAEjF,MAAMI,cAAc,GAAG;MACrBC,KAAK,EAAEN,OAAO,CAACM,KAAK,IAAI,IAAI;MAC5BC,QAAQ,EAAEP,OAAO,CAACO,QAAQ;MAC1BC,KAAK,EAAER,OAAO,CAACQ,KAAK,IAAI;IAC1B,CAAC;IAED,IAAI;MACF,MAAMC,QAAQ,GAAG,MAAMZ,WAAW,CAAIC,MAAM,EAAEI,SAAS,EAAEC,WAAW,EAAEE,cAAc,CAAC;MACrF,OAAOL,OAAO,CAACU,iBAAiB,GAAGV,OAAO,CAACU,iBAAiB,CAACD,QAAQ,CAAC,GAAGA,QAAQ;IACnF,CAAC,CAAC,OAAOd,KAAK,EAAE;MACd,MAAMD,WAAW,CAACC,KAAK,CAAC;IAC1B;EACF,CAAC;AACH;;AAEA;AACA;AACA;AACA,OAAO,MAAMgB,WAAW,GAAG;EACzBC,KAAK,EAAE,CAAC,GAAG,EAAE,GAAG,IAAI;EAAO;EAC3BC,MAAM,EAAE,CAAC,GAAG,EAAE,GAAG,IAAI;EAAM;EAC3BC,IAAI,EAAE,CAAC,GAAG,EAAE,GAAG,IAAI;EAAQ;EAC3BC,SAAS,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI;EAAE;EAC3BC,UAAU,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI,CAAE;AAC9B,CAAU","ignoreList":[]}