@oxyhq/core 1.0.0

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 (277) hide show
  1. package/README.md +50 -0
  2. package/dist/cjs/AuthManager.js +361 -0
  3. package/dist/cjs/CrossDomainAuth.js +258 -0
  4. package/dist/cjs/HttpService.js +618 -0
  5. package/dist/cjs/OxyServices.base.js +263 -0
  6. package/dist/cjs/OxyServices.errors.js +22 -0
  7. package/dist/cjs/OxyServices.js +63 -0
  8. package/dist/cjs/constants/version.js +16 -0
  9. package/dist/cjs/crypto/index.js +20 -0
  10. package/dist/cjs/crypto/keyManager.js +887 -0
  11. package/dist/cjs/crypto/polyfill.js +64 -0
  12. package/dist/cjs/crypto/recoveryPhrase.js +169 -0
  13. package/dist/cjs/crypto/signatureService.js +296 -0
  14. package/dist/cjs/i18n/index.js +73 -0
  15. package/dist/cjs/i18n/locales/ar-SA.json +120 -0
  16. package/dist/cjs/i18n/locales/ca-ES.json +120 -0
  17. package/dist/cjs/i18n/locales/de-DE.json +120 -0
  18. package/dist/cjs/i18n/locales/en-US.json +956 -0
  19. package/dist/cjs/i18n/locales/es-ES.json +944 -0
  20. package/dist/cjs/i18n/locales/fr-FR.json +120 -0
  21. package/dist/cjs/i18n/locales/it-IT.json +120 -0
  22. package/dist/cjs/i18n/locales/ja-JP.json +119 -0
  23. package/dist/cjs/i18n/locales/ko-KR.json +120 -0
  24. package/dist/cjs/i18n/locales/locales/ar-SA.json +120 -0
  25. package/dist/cjs/i18n/locales/locales/ca-ES.json +120 -0
  26. package/dist/cjs/i18n/locales/locales/de-DE.json +120 -0
  27. package/dist/cjs/i18n/locales/locales/en-US.json +956 -0
  28. package/dist/cjs/i18n/locales/locales/es-ES.json +944 -0
  29. package/dist/cjs/i18n/locales/locales/fr-FR.json +120 -0
  30. package/dist/cjs/i18n/locales/locales/it-IT.json +120 -0
  31. package/dist/cjs/i18n/locales/locales/ja-JP.json +119 -0
  32. package/dist/cjs/i18n/locales/locales/ko-KR.json +120 -0
  33. package/dist/cjs/i18n/locales/locales/pt-PT.json +120 -0
  34. package/dist/cjs/i18n/locales/locales/zh-CN.json +120 -0
  35. package/dist/cjs/i18n/locales/pt-PT.json +120 -0
  36. package/dist/cjs/i18n/locales/zh-CN.json +120 -0
  37. package/dist/cjs/index.js +153 -0
  38. package/dist/cjs/mixins/OxyServices.analytics.js +49 -0
  39. package/dist/cjs/mixins/OxyServices.assets.js +380 -0
  40. package/dist/cjs/mixins/OxyServices.auth.js +259 -0
  41. package/dist/cjs/mixins/OxyServices.developer.js +97 -0
  42. package/dist/cjs/mixins/OxyServices.devices.js +116 -0
  43. package/dist/cjs/mixins/OxyServices.features.js +309 -0
  44. package/dist/cjs/mixins/OxyServices.fedcm.js +435 -0
  45. package/dist/cjs/mixins/OxyServices.karma.js +108 -0
  46. package/dist/cjs/mixins/OxyServices.language.js +154 -0
  47. package/dist/cjs/mixins/OxyServices.location.js +43 -0
  48. package/dist/cjs/mixins/OxyServices.payment.js +158 -0
  49. package/dist/cjs/mixins/OxyServices.popup.js +371 -0
  50. package/dist/cjs/mixins/OxyServices.privacy.js +162 -0
  51. package/dist/cjs/mixins/OxyServices.redirect.js +345 -0
  52. package/dist/cjs/mixins/OxyServices.security.js +81 -0
  53. package/dist/cjs/mixins/OxyServices.user.js +355 -0
  54. package/dist/cjs/mixins/OxyServices.utility.js +156 -0
  55. package/dist/cjs/mixins/index.js +79 -0
  56. package/dist/cjs/mixins/mixinHelpers.js +53 -0
  57. package/dist/cjs/models/interfaces.js +20 -0
  58. package/dist/cjs/models/session.js +2 -0
  59. package/dist/cjs/shared/index.js +70 -0
  60. package/dist/cjs/shared/utils/colorUtils.js +153 -0
  61. package/dist/cjs/shared/utils/debugUtils.js +73 -0
  62. package/dist/cjs/shared/utils/errorUtils.js +183 -0
  63. package/dist/cjs/shared/utils/index.js +49 -0
  64. package/dist/cjs/shared/utils/networkUtils.js +183 -0
  65. package/dist/cjs/shared/utils/themeUtils.js +106 -0
  66. package/dist/cjs/utils/apiUtils.js +61 -0
  67. package/dist/cjs/utils/asyncUtils.js +194 -0
  68. package/dist/cjs/utils/cache.js +226 -0
  69. package/dist/cjs/utils/deviceManager.js +205 -0
  70. package/dist/cjs/utils/errorUtils.js +154 -0
  71. package/dist/cjs/utils/index.js +26 -0
  72. package/dist/cjs/utils/languageUtils.js +165 -0
  73. package/dist/cjs/utils/loggerUtils.js +126 -0
  74. package/dist/cjs/utils/platform.js +144 -0
  75. package/dist/cjs/utils/requestUtils.js +209 -0
  76. package/dist/cjs/utils/sessionUtils.js +181 -0
  77. package/dist/cjs/utils/validationUtils.js +173 -0
  78. package/dist/esm/AuthManager.js +356 -0
  79. package/dist/esm/CrossDomainAuth.js +253 -0
  80. package/dist/esm/HttpService.js +614 -0
  81. package/dist/esm/OxyServices.base.js +259 -0
  82. package/dist/esm/OxyServices.errors.js +17 -0
  83. package/dist/esm/OxyServices.js +59 -0
  84. package/dist/esm/constants/version.js +13 -0
  85. package/dist/esm/crypto/index.js +13 -0
  86. package/dist/esm/crypto/keyManager.js +850 -0
  87. package/dist/esm/crypto/polyfill.js +61 -0
  88. package/dist/esm/crypto/recoveryPhrase.js +132 -0
  89. package/dist/esm/crypto/signatureService.js +259 -0
  90. package/dist/esm/i18n/index.js +69 -0
  91. package/dist/esm/i18n/locales/ar-SA.json +120 -0
  92. package/dist/esm/i18n/locales/ca-ES.json +120 -0
  93. package/dist/esm/i18n/locales/de-DE.json +120 -0
  94. package/dist/esm/i18n/locales/en-US.json +956 -0
  95. package/dist/esm/i18n/locales/es-ES.json +944 -0
  96. package/dist/esm/i18n/locales/fr-FR.json +120 -0
  97. package/dist/esm/i18n/locales/it-IT.json +120 -0
  98. package/dist/esm/i18n/locales/ja-JP.json +119 -0
  99. package/dist/esm/i18n/locales/ko-KR.json +120 -0
  100. package/dist/esm/i18n/locales/locales/ar-SA.json +120 -0
  101. package/dist/esm/i18n/locales/locales/ca-ES.json +120 -0
  102. package/dist/esm/i18n/locales/locales/de-DE.json +120 -0
  103. package/dist/esm/i18n/locales/locales/en-US.json +956 -0
  104. package/dist/esm/i18n/locales/locales/es-ES.json +944 -0
  105. package/dist/esm/i18n/locales/locales/fr-FR.json +120 -0
  106. package/dist/esm/i18n/locales/locales/it-IT.json +120 -0
  107. package/dist/esm/i18n/locales/locales/ja-JP.json +119 -0
  108. package/dist/esm/i18n/locales/locales/ko-KR.json +120 -0
  109. package/dist/esm/i18n/locales/locales/pt-PT.json +120 -0
  110. package/dist/esm/i18n/locales/locales/zh-CN.json +120 -0
  111. package/dist/esm/i18n/locales/pt-PT.json +120 -0
  112. package/dist/esm/i18n/locales/zh-CN.json +120 -0
  113. package/dist/esm/index.js +55 -0
  114. package/dist/esm/mixins/OxyServices.analytics.js +46 -0
  115. package/dist/esm/mixins/OxyServices.assets.js +377 -0
  116. package/dist/esm/mixins/OxyServices.auth.js +256 -0
  117. package/dist/esm/mixins/OxyServices.developer.js +94 -0
  118. package/dist/esm/mixins/OxyServices.devices.js +113 -0
  119. package/dist/esm/mixins/OxyServices.features.js +306 -0
  120. package/dist/esm/mixins/OxyServices.fedcm.js +433 -0
  121. package/dist/esm/mixins/OxyServices.karma.js +105 -0
  122. package/dist/esm/mixins/OxyServices.language.js +118 -0
  123. package/dist/esm/mixins/OxyServices.location.js +40 -0
  124. package/dist/esm/mixins/OxyServices.payment.js +155 -0
  125. package/dist/esm/mixins/OxyServices.popup.js +369 -0
  126. package/dist/esm/mixins/OxyServices.privacy.js +159 -0
  127. package/dist/esm/mixins/OxyServices.redirect.js +343 -0
  128. package/dist/esm/mixins/OxyServices.security.js +78 -0
  129. package/dist/esm/mixins/OxyServices.user.js +352 -0
  130. package/dist/esm/mixins/OxyServices.utility.js +153 -0
  131. package/dist/esm/mixins/index.js +76 -0
  132. package/dist/esm/mixins/mixinHelpers.js +48 -0
  133. package/dist/esm/models/interfaces.js +17 -0
  134. package/dist/esm/models/session.js +1 -0
  135. package/dist/esm/shared/index.js +31 -0
  136. package/dist/esm/shared/utils/colorUtils.js +143 -0
  137. package/dist/esm/shared/utils/debugUtils.js +65 -0
  138. package/dist/esm/shared/utils/errorUtils.js +170 -0
  139. package/dist/esm/shared/utils/index.js +15 -0
  140. package/dist/esm/shared/utils/networkUtils.js +173 -0
  141. package/dist/esm/shared/utils/themeUtils.js +98 -0
  142. package/dist/esm/utils/apiUtils.js +55 -0
  143. package/dist/esm/utils/asyncUtils.js +179 -0
  144. package/dist/esm/utils/cache.js +218 -0
  145. package/dist/esm/utils/deviceManager.js +168 -0
  146. package/dist/esm/utils/errorUtils.js +146 -0
  147. package/dist/esm/utils/index.js +7 -0
  148. package/dist/esm/utils/languageUtils.js +158 -0
  149. package/dist/esm/utils/loggerUtils.js +115 -0
  150. package/dist/esm/utils/platform.js +102 -0
  151. package/dist/esm/utils/requestUtils.js +203 -0
  152. package/dist/esm/utils/sessionUtils.js +171 -0
  153. package/dist/esm/utils/validationUtils.js +153 -0
  154. package/dist/types/AuthManager.d.ts +143 -0
  155. package/dist/types/CrossDomainAuth.d.ts +160 -0
  156. package/dist/types/HttpService.d.ts +163 -0
  157. package/dist/types/OxyServices.base.d.ts +126 -0
  158. package/dist/types/OxyServices.d.ts +81 -0
  159. package/dist/types/OxyServices.errors.d.ts +11 -0
  160. package/dist/types/constants/version.d.ts +13 -0
  161. package/dist/types/crypto/index.d.ts +11 -0
  162. package/dist/types/crypto/keyManager.d.ts +189 -0
  163. package/dist/types/crypto/polyfill.d.ts +11 -0
  164. package/dist/types/crypto/recoveryPhrase.d.ts +58 -0
  165. package/dist/types/crypto/signatureService.d.ts +86 -0
  166. package/dist/types/i18n/index.d.ts +3 -0
  167. package/dist/types/index.d.ts +50 -0
  168. package/dist/types/mixins/OxyServices.analytics.d.ts +66 -0
  169. package/dist/types/mixins/OxyServices.assets.d.ts +135 -0
  170. package/dist/types/mixins/OxyServices.auth.d.ts +186 -0
  171. package/dist/types/mixins/OxyServices.developer.d.ts +99 -0
  172. package/dist/types/mixins/OxyServices.devices.d.ts +96 -0
  173. package/dist/types/mixins/OxyServices.features.d.ts +228 -0
  174. package/dist/types/mixins/OxyServices.fedcm.d.ts +200 -0
  175. package/dist/types/mixins/OxyServices.karma.d.ts +85 -0
  176. package/dist/types/mixins/OxyServices.language.d.ts +81 -0
  177. package/dist/types/mixins/OxyServices.location.d.ts +64 -0
  178. package/dist/types/mixins/OxyServices.payment.d.ts +111 -0
  179. package/dist/types/mixins/OxyServices.popup.d.ts +205 -0
  180. package/dist/types/mixins/OxyServices.privacy.d.ts +122 -0
  181. package/dist/types/mixins/OxyServices.redirect.d.ts +245 -0
  182. package/dist/types/mixins/OxyServices.security.d.ts +78 -0
  183. package/dist/types/mixins/OxyServices.user.d.ts +182 -0
  184. package/dist/types/mixins/OxyServices.utility.d.ts +93 -0
  185. package/dist/types/mixins/index.d.ts +30 -0
  186. package/dist/types/mixins/mixinHelpers.d.ts +31 -0
  187. package/dist/types/models/interfaces.d.ts +415 -0
  188. package/dist/types/models/session.d.ts +27 -0
  189. package/dist/types/shared/index.d.ts +28 -0
  190. package/dist/types/shared/utils/colorUtils.d.ts +104 -0
  191. package/dist/types/shared/utils/debugUtils.d.ts +48 -0
  192. package/dist/types/shared/utils/errorUtils.d.ts +97 -0
  193. package/dist/types/shared/utils/index.d.ts +13 -0
  194. package/dist/types/shared/utils/networkUtils.d.ts +139 -0
  195. package/dist/types/shared/utils/themeUtils.d.ts +90 -0
  196. package/dist/types/utils/apiUtils.d.ts +53 -0
  197. package/dist/types/utils/asyncUtils.d.ts +58 -0
  198. package/dist/types/utils/cache.d.ts +127 -0
  199. package/dist/types/utils/deviceManager.d.ts +65 -0
  200. package/dist/types/utils/errorUtils.d.ts +46 -0
  201. package/dist/types/utils/index.d.ts +6 -0
  202. package/dist/types/utils/languageUtils.d.ts +37 -0
  203. package/dist/types/utils/loggerUtils.d.ts +48 -0
  204. package/dist/types/utils/platform.d.ts +40 -0
  205. package/dist/types/utils/requestUtils.d.ts +123 -0
  206. package/dist/types/utils/sessionUtils.d.ts +54 -0
  207. package/dist/types/utils/validationUtils.d.ts +85 -0
  208. package/package.json +84 -0
  209. package/src/AuthManager.ts +436 -0
  210. package/src/CrossDomainAuth.ts +307 -0
  211. package/src/HttpService.ts +752 -0
  212. package/src/OxyServices.base.ts +334 -0
  213. package/src/OxyServices.errors.ts +26 -0
  214. package/src/OxyServices.ts +129 -0
  215. package/src/constants/version.ts +15 -0
  216. package/src/crypto/index.ts +25 -0
  217. package/src/crypto/keyManager.ts +962 -0
  218. package/src/crypto/polyfill.ts +70 -0
  219. package/src/crypto/recoveryPhrase.ts +166 -0
  220. package/src/crypto/signatureService.ts +323 -0
  221. package/src/i18n/index.ts +75 -0
  222. package/src/i18n/locales/ar-SA.json +120 -0
  223. package/src/i18n/locales/ca-ES.json +120 -0
  224. package/src/i18n/locales/de-DE.json +120 -0
  225. package/src/i18n/locales/en-US.json +956 -0
  226. package/src/i18n/locales/es-ES.json +944 -0
  227. package/src/i18n/locales/fr-FR.json +120 -0
  228. package/src/i18n/locales/it-IT.json +120 -0
  229. package/src/i18n/locales/ja-JP.json +119 -0
  230. package/src/i18n/locales/ko-KR.json +120 -0
  231. package/src/i18n/locales/pt-PT.json +120 -0
  232. package/src/i18n/locales/zh-CN.json +120 -0
  233. package/src/index.ts +153 -0
  234. package/src/mixins/OxyServices.analytics.ts +53 -0
  235. package/src/mixins/OxyServices.assets.ts +412 -0
  236. package/src/mixins/OxyServices.auth.ts +358 -0
  237. package/src/mixins/OxyServices.developer.ts +114 -0
  238. package/src/mixins/OxyServices.devices.ts +119 -0
  239. package/src/mixins/OxyServices.features.ts +428 -0
  240. package/src/mixins/OxyServices.fedcm.ts +494 -0
  241. package/src/mixins/OxyServices.karma.ts +111 -0
  242. package/src/mixins/OxyServices.language.ts +127 -0
  243. package/src/mixins/OxyServices.location.ts +46 -0
  244. package/src/mixins/OxyServices.payment.ts +163 -0
  245. package/src/mixins/OxyServices.popup.ts +443 -0
  246. package/src/mixins/OxyServices.privacy.ts +182 -0
  247. package/src/mixins/OxyServices.redirect.ts +397 -0
  248. package/src/mixins/OxyServices.security.ts +103 -0
  249. package/src/mixins/OxyServices.user.ts +392 -0
  250. package/src/mixins/OxyServices.utility.ts +191 -0
  251. package/src/mixins/index.ts +91 -0
  252. package/src/mixins/mixinHelpers.ts +69 -0
  253. package/src/models/interfaces.ts +511 -0
  254. package/src/models/session.ts +30 -0
  255. package/src/shared/index.ts +82 -0
  256. package/src/shared/utils/colorUtils.ts +155 -0
  257. package/src/shared/utils/debugUtils.ts +73 -0
  258. package/src/shared/utils/errorUtils.ts +181 -0
  259. package/src/shared/utils/index.ts +59 -0
  260. package/src/shared/utils/networkUtils.ts +248 -0
  261. package/src/shared/utils/themeUtils.ts +115 -0
  262. package/src/types/bip39.d.ts +32 -0
  263. package/src/types/buffer.d.ts +97 -0
  264. package/src/types/color.d.ts +20 -0
  265. package/src/types/elliptic.d.ts +62 -0
  266. package/src/utils/apiUtils.ts +88 -0
  267. package/src/utils/asyncUtils.ts +252 -0
  268. package/src/utils/cache.ts +264 -0
  269. package/src/utils/deviceManager.ts +198 -0
  270. package/src/utils/errorUtils.ts +216 -0
  271. package/src/utils/index.ts +21 -0
  272. package/src/utils/languageUtils.ts +174 -0
  273. package/src/utils/loggerUtils.ts +153 -0
  274. package/src/utils/platform.ts +117 -0
  275. package/src/utils/requestUtils.ts +237 -0
  276. package/src/utils/sessionUtils.ts +206 -0
  277. package/src/utils/validationUtils.ts +174 -0
@@ -0,0 +1,94 @@
1
+ import { CACHE_TIMES } from './mixinHelpers';
2
+ export function OxyServicesDeveloperMixin(Base) {
3
+ return class extends Base {
4
+ constructor(...args) {
5
+ super(...args);
6
+ }
7
+ /**
8
+ * Get developer apps for the current user
9
+ * @returns Array of developer apps
10
+ */
11
+ async getDeveloperApps() {
12
+ try {
13
+ const res = await this.makeRequest('GET', '/api/developer/apps', undefined, {
14
+ cache: true,
15
+ cacheTTL: CACHE_TIMES.MEDIUM,
16
+ });
17
+ return res.apps || [];
18
+ }
19
+ catch (error) {
20
+ throw this.handleError(error);
21
+ }
22
+ }
23
+ /**
24
+ * Create a new developer app
25
+ * @param data - Developer app configuration
26
+ * @returns Created developer app
27
+ */
28
+ async createDeveloperApp(data) {
29
+ try {
30
+ const res = await this.makeRequest('POST', '/api/developer/apps', data, { cache: false });
31
+ return res.app;
32
+ }
33
+ catch (error) {
34
+ throw this.handleError(error);
35
+ }
36
+ }
37
+ /**
38
+ * Get a specific developer app
39
+ */
40
+ async getDeveloperApp(appId) {
41
+ try {
42
+ const res = await this.makeRequest('GET', `/api/developer/apps/${appId}`, undefined, {
43
+ cache: true,
44
+ cacheTTL: CACHE_TIMES.LONG,
45
+ });
46
+ return res.app;
47
+ }
48
+ catch (error) {
49
+ throw this.handleError(error);
50
+ }
51
+ }
52
+ /**
53
+ * Update a developer app
54
+ * @param appId - The developer app ID
55
+ * @param data - Updated app configuration
56
+ * @returns Updated developer app
57
+ */
58
+ async updateDeveloperApp(appId, data) {
59
+ try {
60
+ const res = await this.makeRequest('PATCH', `/api/developer/apps/${appId}`, data, { cache: false });
61
+ return res.app;
62
+ }
63
+ catch (error) {
64
+ throw this.handleError(error);
65
+ }
66
+ }
67
+ /**
68
+ * Regenerate API secret for a developer app
69
+ * @param appId - The developer app ID
70
+ * @returns App with new secret
71
+ */
72
+ async regenerateDeveloperAppSecret(appId) {
73
+ try {
74
+ return await this.makeRequest('POST', `/api/developer/apps/${appId}/regenerate-secret`, undefined, { cache: false });
75
+ }
76
+ catch (error) {
77
+ throw this.handleError(error);
78
+ }
79
+ }
80
+ /**
81
+ * Delete a developer app
82
+ * @param appId - The developer app ID
83
+ * @returns Deletion result
84
+ */
85
+ async deleteDeveloperApp(appId) {
86
+ try {
87
+ return await this.makeRequest('DELETE', `/api/developer/apps/${appId}`, undefined, { cache: false });
88
+ }
89
+ catch (error) {
90
+ throw this.handleError(error);
91
+ }
92
+ }
93
+ };
94
+ }
@@ -0,0 +1,113 @@
1
+ export function OxyServicesDevicesMixin(Base) {
2
+ return class extends Base {
3
+ constructor(...args) {
4
+ super(...args);
5
+ }
6
+ /**
7
+ * Register a new device
8
+ * @param deviceData - Device information
9
+ * @returns Registered device object
10
+ */
11
+ async registerDevice(deviceData) {
12
+ try {
13
+ return await this.makeRequest('POST', '/api/devices', deviceData, { cache: false });
14
+ }
15
+ catch (error) {
16
+ throw this.handleError(error);
17
+ }
18
+ }
19
+ /**
20
+ * Get all devices for the current user
21
+ * @returns Array of user devices
22
+ */
23
+ async getUserDevices() {
24
+ try {
25
+ return await this.makeRequest('GET', '/api/devices', undefined, {
26
+ cache: false, // Don't cache device list - always get fresh data
27
+ });
28
+ }
29
+ catch (error) {
30
+ throw this.handleError(error);
31
+ }
32
+ }
33
+ /**
34
+ * Remove a device
35
+ * @param deviceId - The device ID to remove
36
+ */
37
+ async removeDevice(deviceId) {
38
+ try {
39
+ await this.makeRequest('DELETE', `/api/devices/${deviceId}`, undefined, { cache: false });
40
+ }
41
+ catch (error) {
42
+ throw this.handleError(error);
43
+ }
44
+ }
45
+ /**
46
+ * Get device sessions for a given session ID
47
+ * Note: Not cached by default to ensure fresh data
48
+ * @param sessionId - The session ID
49
+ * @returns Array of device sessions
50
+ */
51
+ async getDeviceSessions(sessionId) {
52
+ try {
53
+ // Use makeRequest for consistent error handling and optional caching
54
+ // Cache disabled by default to ensure fresh session data
55
+ return await this.makeRequest('GET', `/api/session/device/sessions/${sessionId}`, undefined, {
56
+ cache: false, // Don't cache sessions - always get fresh data
57
+ deduplicate: true, // Deduplicate concurrent requests for same sessionId
58
+ });
59
+ }
60
+ catch (error) {
61
+ throw this.handleError(error);
62
+ }
63
+ }
64
+ /**
65
+ * Logout all device sessions
66
+ * @param sessionId - The session ID
67
+ * @param deviceId - Optional device ID to target
68
+ * @param excludeCurrent - Whether to exclude the current session
69
+ * @returns Logout result
70
+ */
71
+ async logoutAllDeviceSessions(sessionId, deviceId, excludeCurrent) {
72
+ try {
73
+ const urlParams = {};
74
+ if (deviceId)
75
+ urlParams.deviceId = deviceId;
76
+ if (excludeCurrent)
77
+ urlParams.excludeCurrent = 'true';
78
+ return await this.makeRequest('POST', `/api/session/device/logout-all/${sessionId}`, urlParams, { cache: false });
79
+ }
80
+ catch (error) {
81
+ throw this.handleError(error);
82
+ }
83
+ }
84
+ /**
85
+ * Update device name
86
+ * @param sessionId - The session ID
87
+ * @param deviceName - New device name
88
+ * @returns Updated device object
89
+ */
90
+ async updateDeviceName(sessionId, deviceName) {
91
+ try {
92
+ return await this.makeRequest('PUT', `/api/session/device/name/${sessionId}`, { deviceName }, { cache: false });
93
+ }
94
+ catch (error) {
95
+ throw this.handleError(error);
96
+ }
97
+ }
98
+ /**
99
+ * Get security information
100
+ * @returns Security information object
101
+ */
102
+ async getSecurityInfo() {
103
+ try {
104
+ return await this.makeRequest('GET', '/api/devices/security', undefined, {
105
+ cache: false,
106
+ });
107
+ }
108
+ catch (error) {
109
+ throw this.handleError(error);
110
+ }
111
+ }
112
+ };
113
+ }
@@ -0,0 +1,306 @@
1
+ import { CACHE_TIMES } from './mixinHelpers';
2
+ export function OxyServicesFeaturesMixin(Base) {
3
+ return class extends Base {
4
+ constructor(...args) {
5
+ super(...args);
6
+ }
7
+ // ==================
8
+ // FEEDBACK METHODS
9
+ // ==================
10
+ /**
11
+ * Submit user feedback
12
+ */
13
+ async submitFeedback(payload) {
14
+ try {
15
+ return await this.makeRequest('POST', '/api/feedback', payload, {
16
+ cache: false,
17
+ });
18
+ }
19
+ catch (error) {
20
+ throw this.handleError(error);
21
+ }
22
+ }
23
+ // ==================
24
+ // SUBSCRIPTION METHODS
25
+ // ==================
26
+ /**
27
+ * Get available subscription plans
28
+ */
29
+ async getSubscriptionPlans() {
30
+ try {
31
+ return await this.makeRequest('GET', '/api/subscriptions/plans', undefined, {
32
+ cache: true,
33
+ cacheTTL: CACHE_TIMES.LONG,
34
+ });
35
+ }
36
+ catch (error) {
37
+ throw this.handleError(error);
38
+ }
39
+ }
40
+ /**
41
+ * Get individual purchasable features
42
+ */
43
+ async getIndividualFeatures() {
44
+ try {
45
+ return await this.makeRequest('GET', '/api/subscriptions/features', undefined, {
46
+ cache: true,
47
+ cacheTTL: CACHE_TIMES.LONG,
48
+ });
49
+ }
50
+ catch (error) {
51
+ throw this.handleError(error);
52
+ }
53
+ }
54
+ /**
55
+ * Subscribe to a plan
56
+ */
57
+ async subscribe(planId, paymentMethodId) {
58
+ return this.withAuthRetry(async () => {
59
+ return await this.makeRequest('POST', '/api/subscriptions/subscribe', {
60
+ planId,
61
+ paymentMethodId,
62
+ }, { cache: false });
63
+ }, 'subscribe');
64
+ }
65
+ /**
66
+ * Subscribe to an individual feature
67
+ */
68
+ async subscribeToFeature(featureId, paymentMethodId) {
69
+ return this.withAuthRetry(async () => {
70
+ return await this.makeRequest('POST', '/api/subscriptions/features/subscribe', {
71
+ featureId,
72
+ paymentMethodId,
73
+ }, { cache: false });
74
+ }, 'subscribeToFeature');
75
+ }
76
+ /**
77
+ * Cancel subscription
78
+ */
79
+ async cancelSubscription(subscriptionId) {
80
+ return this.withAuthRetry(async () => {
81
+ await this.makeRequest('POST', `/api/subscriptions/${subscriptionId}/cancel`, undefined, {
82
+ cache: false,
83
+ });
84
+ }, 'cancelSubscription');
85
+ }
86
+ /**
87
+ * Reactivate subscription
88
+ */
89
+ async reactivateSubscription(subscriptionId) {
90
+ return this.withAuthRetry(async () => {
91
+ await this.makeRequest('POST', `/api/subscriptions/${subscriptionId}/reactivate`, undefined, {
92
+ cache: false,
93
+ });
94
+ }, 'reactivateSubscription');
95
+ }
96
+ /**
97
+ * Get current user's subscription
98
+ */
99
+ async getCurrentSubscription() {
100
+ return this.withAuthRetry(async () => {
101
+ try {
102
+ return await this.makeRequest('GET', '/api/subscriptions/current', undefined, {
103
+ cache: true,
104
+ cacheTTL: CACHE_TIMES.SHORT,
105
+ });
106
+ }
107
+ catch (error) {
108
+ if (error.status === 404)
109
+ return null;
110
+ throw error;
111
+ }
112
+ }, 'getCurrentSubscription');
113
+ }
114
+ // ==================
115
+ // SAVES/COLLECTIONS
116
+ // ==================
117
+ /**
118
+ * Get user's saved items
119
+ */
120
+ async getSavedItems(userId) {
121
+ return this.withAuthRetry(async () => {
122
+ const endpoint = userId ? `/api/users/${userId}/saves` : '/api/saves';
123
+ return await this.makeRequest('GET', endpoint, undefined, {
124
+ cache: true,
125
+ cacheTTL: CACHE_TIMES.SHORT,
126
+ });
127
+ }, 'getSavedItems');
128
+ }
129
+ /**
130
+ * Get user's collections
131
+ */
132
+ async getCollections(userId) {
133
+ return this.withAuthRetry(async () => {
134
+ const endpoint = userId ? `/api/users/${userId}/collections` : '/api/collections';
135
+ return await this.makeRequest('GET', endpoint, undefined, {
136
+ cache: true,
137
+ cacheTTL: CACHE_TIMES.SHORT,
138
+ });
139
+ }, 'getCollections');
140
+ }
141
+ /**
142
+ * Save an item
143
+ */
144
+ async saveItem(itemId, itemType, collectionId) {
145
+ return this.withAuthRetry(async () => {
146
+ return await this.makeRequest('POST', '/api/saves', {
147
+ itemId,
148
+ itemType,
149
+ collectionId,
150
+ }, { cache: false });
151
+ }, 'saveItem');
152
+ }
153
+ /**
154
+ * Remove an item from saves
155
+ */
156
+ async removeSavedItem(saveId) {
157
+ return this.withAuthRetry(async () => {
158
+ await this.makeRequest('DELETE', `/api/saves/${saveId}`, undefined, { cache: false });
159
+ }, 'removeSavedItem');
160
+ }
161
+ /**
162
+ * Create a collection
163
+ */
164
+ async createCollection(name, description) {
165
+ return this.withAuthRetry(async () => {
166
+ return await this.makeRequest('POST', '/api/collections', {
167
+ name,
168
+ description,
169
+ }, { cache: false });
170
+ }, 'createCollection');
171
+ }
172
+ /**
173
+ * Delete a collection
174
+ */
175
+ async deleteCollection(collectionId) {
176
+ return this.withAuthRetry(async () => {
177
+ await this.makeRequest('DELETE', `/api/collections/${collectionId}`, undefined, { cache: false });
178
+ }, 'deleteCollection');
179
+ }
180
+ // ==================
181
+ // USER STATS
182
+ // ==================
183
+ /**
184
+ * Get user statistics
185
+ */
186
+ async getUserStats(userId) {
187
+ try {
188
+ return await this.makeRequest('GET', `/api/users/${userId}/stats`, undefined, {
189
+ cache: true,
190
+ cacheTTL: CACHE_TIMES.MEDIUM,
191
+ });
192
+ }
193
+ catch (error) {
194
+ throw this.handleError(error);
195
+ }
196
+ }
197
+ // ==================
198
+ // HISTORY
199
+ // ==================
200
+ /**
201
+ * Get user history
202
+ */
203
+ async getUserHistory(userId, limit, offset) {
204
+ return this.withAuthRetry(async () => {
205
+ const params = {};
206
+ if (limit)
207
+ params.limit = limit;
208
+ if (offset)
209
+ params.offset = offset;
210
+ const endpoint = userId ? `/api/users/${userId}/history` : '/api/history';
211
+ return await this.makeRequest('GET', endpoint, params, {
212
+ cache: true,
213
+ cacheTTL: CACHE_TIMES.SHORT,
214
+ });
215
+ }, 'getUserHistory');
216
+ }
217
+ /**
218
+ * Clear user history
219
+ */
220
+ async clearUserHistory() {
221
+ return this.withAuthRetry(async () => {
222
+ await this.makeRequest('DELETE', '/api/history', undefined, { cache: false });
223
+ }, 'clearUserHistory');
224
+ }
225
+ /**
226
+ * Delete a history item
227
+ */
228
+ async deleteHistoryItem(itemId) {
229
+ return this.withAuthRetry(async () => {
230
+ await this.makeRequest('DELETE', `/api/history/${itemId}`, undefined, { cache: false });
231
+ }, 'deleteHistoryItem');
232
+ }
233
+ // ==================
234
+ // FAQ
235
+ // ==================
236
+ /**
237
+ * Get FAQs
238
+ */
239
+ async getFAQs(category) {
240
+ try {
241
+ const params = category ? { category } : undefined;
242
+ return await this.makeRequest('GET', '/api/faqs', params, {
243
+ cache: true,
244
+ cacheTTL: CACHE_TIMES.LONG,
245
+ });
246
+ }
247
+ catch (error) {
248
+ throw this.handleError(error);
249
+ }
250
+ }
251
+ /**
252
+ * Search FAQs
253
+ */
254
+ async searchFAQs(query) {
255
+ try {
256
+ return await this.makeRequest('GET', '/api/faqs/search', { query }, {
257
+ cache: true,
258
+ cacheTTL: CACHE_TIMES.MEDIUM,
259
+ });
260
+ }
261
+ catch (error) {
262
+ throw this.handleError(error);
263
+ }
264
+ }
265
+ // ==================
266
+ // ACHIEVEMENTS
267
+ // ==================
268
+ /**
269
+ * Get user achievements
270
+ */
271
+ async getUserAchievements(userId) {
272
+ return this.withAuthRetry(async () => {
273
+ const endpoint = userId ? `/api/users/${userId}/achievements` : '/api/achievements';
274
+ return await this.makeRequest('GET', endpoint, undefined, {
275
+ cache: true,
276
+ cacheTTL: CACHE_TIMES.MEDIUM,
277
+ });
278
+ }, 'getUserAchievements');
279
+ }
280
+ /**
281
+ * Get all available achievements
282
+ */
283
+ async getAllAchievements() {
284
+ try {
285
+ return await this.makeRequest('GET', '/api/achievements/all', undefined, {
286
+ cache: true,
287
+ cacheTTL: CACHE_TIMES.LONG,
288
+ });
289
+ }
290
+ catch (error) {
291
+ throw this.handleError(error);
292
+ }
293
+ }
294
+ // ==================
295
+ // ACCOUNT
296
+ // ==================
297
+ /**
298
+ * Delete user account (requires password confirmation)
299
+ */
300
+ async deleteAccount(password) {
301
+ return this.withAuthRetry(async () => {
302
+ await this.makeRequest('DELETE', '/api/account', { password }, { cache: false });
303
+ }, 'deleteAccount');
304
+ }
305
+ };
306
+ }