@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,6 @@
1
+ export { DeviceManager } from './deviceManager';
2
+ export type { DeviceFingerprint, StoredDeviceInfo } from './deviceManager';
3
+ export { RequestDeduplicator, RequestQueue, SimpleLogger } from './requestUtils';
4
+ export { TTLCache, createCache, registerCacheForCleanup, unregisterCacheFromCleanup } from './cache';
5
+ export type { CacheStats } from './cache';
6
+ export { normalizeSession, sortSessions, deduplicateSessions, deduplicateSessionsByUserId, normalizeAndSortSessions, mergeSessions, sessionsEqual, sessionsArraysEqual } from './sessionUtils';
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Language utilities for OxyServices
3
+ * Provides access to supported languages and language metadata
4
+ */
5
+ export interface LanguageMetadata {
6
+ id: string;
7
+ name: string;
8
+ nativeName: string;
9
+ flag: string;
10
+ icon: string;
11
+ color: string;
12
+ }
13
+ export declare const SUPPORTED_LANGUAGES: LanguageMetadata[];
14
+ /**
15
+ * Get language metadata by language code
16
+ * @param languageCode - BCP-47 language code (e.g., 'en-US', 'es-ES')
17
+ * @returns Language metadata or null if not found
18
+ */
19
+ export declare function getLanguageMetadata(languageCode: string | null | undefined): LanguageMetadata | null;
20
+ /**
21
+ * Get language name by language code
22
+ * @param languageCode - BCP-47 language code (e.g., 'en-US', 'es-ES')
23
+ * @returns Language name (e.g., 'English') or the code if not found
24
+ */
25
+ export declare function getLanguageName(languageCode: string | null | undefined): string;
26
+ /**
27
+ * Get native language name by language code
28
+ * @param languageCode - BCP-47 language code (e.g., 'en-US', 'es-ES')
29
+ * @returns Native language name (e.g., 'Español') or the code if not found
30
+ */
31
+ export declare function getNativeLanguageName(languageCode: string | null | undefined): string;
32
+ /**
33
+ * Normalize language code to BCP-47 format
34
+ * @param lang - Language code (may be short like 'en' or full like 'en-US')
35
+ * @returns Normalized BCP-47 language code
36
+ */
37
+ export declare function normalizeLanguageCode(lang?: string | null): string;
@@ -0,0 +1,48 @@
1
+ /**
2
+ * Centralized logging utilities for consistent logging across the application
3
+ */
4
+ export declare enum LogLevel {
5
+ DEBUG = 0,
6
+ INFO = 1,
7
+ WARN = 2,
8
+ ERROR = 3,
9
+ NONE = 4
10
+ }
11
+ export interface LogContext {
12
+ component?: string;
13
+ method?: string;
14
+ userId?: string;
15
+ sessionId?: string;
16
+ requestId?: string;
17
+ [key: string]: unknown;
18
+ }
19
+ declare class Logger {
20
+ private level;
21
+ private isDevelopment;
22
+ setLevel(level: LogLevel): void;
23
+ private shouldLog;
24
+ private formatMessage;
25
+ debug(message: string, context?: LogContext, ...args: unknown[]): void;
26
+ info(message: string, context?: LogContext, ...args: unknown[]): void;
27
+ warn(message: string, context?: LogContext, ...args: unknown[]): void;
28
+ error(message: string, error?: Error | unknown, context?: LogContext, ...args: unknown[]): void;
29
+ auth(message: string, context?: LogContext, ...args: unknown[]): void;
30
+ api(message: string, context?: LogContext, ...args: unknown[]): void;
31
+ session(message: string, context?: LogContext, ...args: unknown[]): void;
32
+ user(message: string, context?: LogContext, ...args: unknown[]): void;
33
+ device(message: string, context?: LogContext, ...args: unknown[]): void;
34
+ payment(message: string, context?: LogContext, ...args: unknown[]): void;
35
+ performance(operation: string, duration: number, context?: LogContext): void;
36
+ errorWithStack(message: string, error: Error, context?: LogContext): void;
37
+ group(label: string, fn: () => void): void;
38
+ }
39
+ export declare const logger: Logger;
40
+ export declare const logAuth: (message: string, context?: LogContext, ...args: unknown[]) => void;
41
+ export declare const logApi: (message: string, context?: LogContext, ...args: unknown[]) => void;
42
+ export declare const logSession: (message: string, context?: LogContext, ...args: unknown[]) => void;
43
+ export declare const logUser: (message: string, context?: LogContext, ...args: unknown[]) => void;
44
+ export declare const logDevice: (message: string, context?: LogContext, ...args: unknown[]) => void;
45
+ export declare const logPayment: (message: string, context?: LogContext, ...args: unknown[]) => void;
46
+ export declare const logError: (message: string, error?: Error | unknown, context?: LogContext, ...args: unknown[]) => void;
47
+ export declare const logPerformance: (operation: string, duration: number, context?: LogContext) => void;
48
+ export {};
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Platform Detection Utility
3
+ *
4
+ * Provides platform detection WITHOUT importing from 'react-native'.
5
+ * This allows core modules to be used in web/Node.js environments
6
+ * without bundlers failing on react-native imports.
7
+ */
8
+ export type PlatformOS = 'ios' | 'android' | 'web' | 'windows' | 'macos' | 'unknown';
9
+ /**
10
+ * Get the current platform OS
11
+ * Safe to call from any environment (web, Node.js, React Native)
12
+ */
13
+ export declare function getPlatformOS(): PlatformOS;
14
+ /**
15
+ * Check if running on web platform (browser or Node.js)
16
+ */
17
+ export declare function isWeb(): boolean;
18
+ /**
19
+ * Check if running in a native app (iOS or Android)
20
+ */
21
+ export declare function isNative(): boolean;
22
+ /**
23
+ * Check if running on iOS
24
+ */
25
+ export declare function isIOS(): boolean;
26
+ /**
27
+ * Check if running on Android
28
+ */
29
+ export declare function isAndroid(): boolean;
30
+ /**
31
+ * Set the platform OS explicitly
32
+ * Called by React Native entry point to register the platform
33
+ * This allows lazy detection in environments where react-native is available
34
+ */
35
+ export declare function setPlatformOS(os: PlatformOS): void;
36
+ /**
37
+ * Try to initialize platform from react-native if available
38
+ * This is called lazily when needed, avoiding top-level imports
39
+ */
40
+ export declare function initPlatformFromReactNative(): Promise<void>;
@@ -0,0 +1,123 @@
1
+ /**
2
+ * Request utilities for HTTP clients
3
+ *
4
+ * Provides reusable components for request deduplication, queuing, and logging
5
+ */
6
+ /**
7
+ * Request deduplication - prevents duplicate concurrent requests
8
+ *
9
+ * When multiple requests with the same key are made simultaneously,
10
+ * only one request is executed and all callers receive the same result.
11
+ *
12
+ * @example
13
+ * ```typescript
14
+ * const deduplicator = new RequestDeduplicator();
15
+ *
16
+ * // Multiple calls with same key will share the same promise
17
+ * const promise1 = deduplicator.deduplicate('user-123', () => fetchUser('123'));
18
+ * const promise2 = deduplicator.deduplicate('user-123', () => fetchUser('123'));
19
+ * // promise1 === promise2, only one API call is made
20
+ * ```
21
+ */
22
+ export declare class RequestDeduplicator {
23
+ private pendingRequests;
24
+ /**
25
+ * Deduplicate a request by key
26
+ * @param key Unique key for the request
27
+ * @param requestFn Function that returns a promise
28
+ * @returns Promise that will be shared if key already exists
29
+ */
30
+ deduplicate<T>(key: string, requestFn: () => Promise<T>): Promise<T>;
31
+ /**
32
+ * Clear all pending requests
33
+ */
34
+ clear(): void;
35
+ /**
36
+ * Get number of pending requests
37
+ */
38
+ size(): number;
39
+ }
40
+ /**
41
+ * Request queue with concurrency control
42
+ *
43
+ * Limits the number of concurrent requests and queues excess requests.
44
+ * Useful for rate limiting and preventing request flooding.
45
+ *
46
+ * @example
47
+ * ```typescript
48
+ * const queue = new RequestQueue(5, 100); // Max 5 concurrent, queue up to 100
49
+ *
50
+ * // All requests will be queued and processed with max 5 concurrent
51
+ * await queue.enqueue(() => fetchUser('1'));
52
+ * await queue.enqueue(() => fetchUser('2'));
53
+ * // ...
54
+ * ```
55
+ */
56
+ export declare class RequestQueue {
57
+ private queue;
58
+ private running;
59
+ private maxConcurrent;
60
+ private maxQueueSize;
61
+ /**
62
+ * Create a new request queue
63
+ * @param maxConcurrent Maximum number of concurrent requests (default: 10)
64
+ * @param maxQueueSize Maximum queue size (default: 100)
65
+ */
66
+ constructor(maxConcurrent?: number, maxQueueSize?: number);
67
+ /**
68
+ * Enqueue a request
69
+ * @param requestFn Function that returns a promise
70
+ * @returns Promise that resolves when request completes
71
+ */
72
+ enqueue<T>(requestFn: () => Promise<T>): Promise<T>;
73
+ /**
74
+ * Process queued requests
75
+ */
76
+ private process;
77
+ /**
78
+ * Clear all queued requests
79
+ */
80
+ clear(): void;
81
+ /**
82
+ * Get queue size
83
+ */
84
+ size(): number;
85
+ /**
86
+ * Get number of currently running requests
87
+ */
88
+ runningCount(): number;
89
+ }
90
+ /** Log level type for SimpleLogger */
91
+ export type LogLevel = 'none' | 'error' | 'warn' | 'info' | 'debug';
92
+ /**
93
+ * Simple logger with level support
94
+ *
95
+ * Lightweight logger for HTTP clients and utilities.
96
+ * For more advanced logging, use loggerUtils.ts
97
+ *
98
+ * @example
99
+ * ```typescript
100
+ * const logger = new SimpleLogger(true, 'debug');
101
+ * logger.debug('Debug message');
102
+ * logger.info('Info message');
103
+ * logger.error('Error message');
104
+ * ```
105
+ */
106
+ export declare class SimpleLogger {
107
+ private enabled;
108
+ private level;
109
+ private prefix;
110
+ /**
111
+ * Create a new simple logger
112
+ * @param enabled Whether logging is enabled
113
+ * @param level Minimum log level
114
+ * @param prefix Prefix for log messages (default: '')
115
+ */
116
+ constructor(enabled?: boolean, level?: LogLevel, prefix?: string);
117
+ private shouldLog;
118
+ private formatMessage;
119
+ error(...args: any[]): void;
120
+ warn(...args: any[]): void;
121
+ info(...args: any[]): void;
122
+ debug(...args: any[]): void;
123
+ }
@@ -0,0 +1,54 @@
1
+ /**
2
+ * Session management utilities
3
+ *
4
+ * Provides consistent session normalization, deduplication, and sorting
5
+ * to ensure sessions are always displayed in a predictable order.
6
+ */
7
+ import type { ClientSession } from '../models/session';
8
+ /**
9
+ * Normalize a session to ensure all required fields are present
10
+ */
11
+ export declare function normalizeSession(session: Partial<ClientSession> & {
12
+ sessionId: string;
13
+ }): ClientSession;
14
+ /**
15
+ * Compare two sessions for equality
16
+ */
17
+ export declare function sessionsEqual(a: ClientSession, b: ClientSession): boolean;
18
+ /**
19
+ * Sort sessions by lastActive (most recent first), then by sessionId for stability
20
+ */
21
+ export declare function sortSessions(sessions: ClientSession[]): ClientSession[];
22
+ /**
23
+ * Deduplicate sessions by sessionId, keeping the most recent version
24
+ */
25
+ export declare function deduplicateSessions(sessions: ClientSession[]): ClientSession[];
26
+ /**
27
+ * Deduplicate sessions by userId, keeping only one session per user
28
+ * Priority: 1) Active session (if provided), 2) Most recent session
29
+ * This prevents showing duplicate accounts for the same user
30
+ */
31
+ export declare function deduplicateSessionsByUserId(sessions: ClientSession[], activeSessionId?: string | null): ClientSession[];
32
+ /**
33
+ * Normalize, deduplicate, and sort sessions
34
+ * This ensures consistent session ordering across the application
35
+ *
36
+ * @param sessions - Array of sessions to normalize
37
+ * @param activeSessionId - Optional active session ID to prioritize
38
+ * @param deduplicateByUserId - If true, deduplicate by userId (one account per user). Default: true
39
+ */
40
+ export declare function normalizeAndSortSessions(sessions: ClientSession[], activeSessionId?: string | null, deduplicateByUserId?: boolean): ClientSession[];
41
+ /**
42
+ * Merge two session arrays, prioritizing newer data
43
+ * Returns normalized, deduplicated, and sorted sessions
44
+ *
45
+ * @param existing - Existing sessions array
46
+ * @param incoming - New sessions to merge in
47
+ * @param activeSessionId - Optional active session ID to prioritize
48
+ * @param deduplicateByUserId - If true, deduplicate by userId (one account per user). Default: true
49
+ */
50
+ export declare function mergeSessions(existing: ClientSession[], incoming: ClientSession[], activeSessionId?: string | null, deduplicateByUserId?: boolean): ClientSession[];
51
+ /**
52
+ * Check if two session arrays are equal (same sessionIds in same order)
53
+ */
54
+ export declare function sessionsArraysEqual(a: ClientSession[], b: ClientSession[]): boolean;
@@ -0,0 +1,85 @@
1
+ /**
2
+ * Validation utilities for common data validation patterns
3
+ */
4
+ /**
5
+ * Email validation regex
6
+ */
7
+ export declare const EMAIL_REGEX: RegExp;
8
+ /**
9
+ * Username validation regex (alphanumeric, underscores, and hyphens, 3-30 chars)
10
+ */
11
+ export declare const USERNAME_REGEX: RegExp;
12
+ /**
13
+ * Password validation regex (at least 8 chars, 1 uppercase, 1 lowercase, 1 number)
14
+ */
15
+ export declare const PASSWORD_REGEX: RegExp;
16
+ /**
17
+ * Validate email format
18
+ */
19
+ export declare function isValidEmail(email: string): boolean;
20
+ /**
21
+ * Validate username format
22
+ */
23
+ export declare function isValidUsername(username: string): boolean;
24
+ /**
25
+ * Validate password strength
26
+ */
27
+ export declare function isValidPassword(password: string): boolean;
28
+ /**
29
+ * Validate required string
30
+ */
31
+ export declare function isRequiredString(value: unknown): boolean;
32
+ /**
33
+ * Validate required number
34
+ */
35
+ export declare function isRequiredNumber(value: unknown): boolean;
36
+ /**
37
+ * Validate required boolean
38
+ */
39
+ export declare function isRequiredBoolean(value: unknown): boolean;
40
+ /**
41
+ * Validate array
42
+ */
43
+ export declare function isValidArray(value: unknown): boolean;
44
+ /**
45
+ * Validate object
46
+ */
47
+ export declare function isValidObject(value: unknown): boolean;
48
+ /**
49
+ * Validate UUID format
50
+ */
51
+ export declare function isValidUUID(uuid: string): boolean;
52
+ /**
53
+ * Validate URL format
54
+ */
55
+ export declare function isValidURL(url: string): boolean;
56
+ /**
57
+ * Validate date string
58
+ */
59
+ export declare function isValidDate(dateString: string): boolean;
60
+ /**
61
+ * Validate file size (in bytes)
62
+ */
63
+ export declare function isValidFileSize(size: number, maxSize: number): boolean;
64
+ /**
65
+ * Validate file type
66
+ */
67
+ export declare function isValidFileType(filename: string, allowedTypes: string[]): boolean;
68
+ /**
69
+ * Sanitize string input
70
+ */
71
+ export declare function sanitizeString(input: string): string;
72
+ /**
73
+ * Sanitize HTML input
74
+ */
75
+ export declare function sanitizeHTML(input: string): string;
76
+ /**
77
+ * Validate MongoDB ObjectId format
78
+ * Note: This is a basic format check. For full validation, use mongoose.Types.ObjectId.isValid()
79
+ * This function works in environments where mongoose may not be available (e.g., client-side)
80
+ */
81
+ export declare function isValidObjectId(id: string): boolean;
82
+ /**
83
+ * Validate and sanitize user input
84
+ */
85
+ export declare function validateAndSanitizeUserInput(input: unknown, type: 'string' | 'email' | 'username'): string | null;
package/package.json ADDED
@@ -0,0 +1,84 @@
1
+ {
2
+ "name": "@oxyhq/core",
3
+ "version": "1.0.0",
4
+ "description": "OxyHQ SDK Foundation — API client, authentication, cryptographic identity, and shared utilities",
5
+ "main": "dist/cjs/index.js",
6
+ "module": "dist/esm/index.js",
7
+ "types": "dist/types/index.d.ts",
8
+ "source": "src/index.ts",
9
+ "sideEffects": false,
10
+ "publishConfig": {
11
+ "access": "public"
12
+ },
13
+ "exports": {
14
+ ".": {
15
+ "types": "./dist/types/index.d.ts",
16
+ "import": "./dist/esm/index.js",
17
+ "require": "./dist/cjs/index.js",
18
+ "default": "./dist/esm/index.js"
19
+ },
20
+ "./crypto": {
21
+ "types": "./dist/types/crypto/index.d.ts",
22
+ "import": "./dist/esm/crypto/index.js",
23
+ "require": "./dist/cjs/crypto/index.js",
24
+ "default": "./dist/esm/crypto/index.js"
25
+ },
26
+ "./shared": {
27
+ "types": "./dist/types/shared/index.d.ts",
28
+ "import": "./dist/esm/shared/index.js",
29
+ "require": "./dist/cjs/shared/index.js",
30
+ "default": "./dist/esm/shared/index.js"
31
+ },
32
+ "./package.json": "./package.json"
33
+ },
34
+ "files": [
35
+ "dist",
36
+ "src"
37
+ ],
38
+ "keywords": [
39
+ "oxyhq",
40
+ "sdk",
41
+ "authentication",
42
+ "api-client",
43
+ "crypto",
44
+ "identity"
45
+ ],
46
+ "repository": {
47
+ "type": "git",
48
+ "url": "https://github.com/oxyhq/sdk",
49
+ "directory": "packages/core"
50
+ },
51
+ "author": "OxyHQ",
52
+ "license": "MIT",
53
+ "homepage": "https://oxy.so",
54
+ "engines": {
55
+ "node": ">=18.0.0"
56
+ },
57
+ "scripts": {
58
+ "build": "npm run build:cjs && npm run build:esm && npm run build:types && npm run copy-assets",
59
+ "copy-assets": "cp -r src/i18n/locales dist/cjs/i18n/locales && cp -r src/i18n/locales dist/esm/i18n/locales",
60
+ "build:cjs": "tsc -p tsconfig.cjs.json",
61
+ "build:esm": "tsc -p tsconfig.esm.json",
62
+ "build:types": "tsc -p tsconfig.types.json",
63
+ "clean": "rm -rf dist",
64
+ "typescript": "tsc --noEmit",
65
+ "lint": "biome lint --error-on-warnings ./src"
66
+ },
67
+ "dependencies": {
68
+ "axios": "^1.9.0",
69
+ "bip39": "^3.1.0",
70
+ "buffer": "^6.0.3",
71
+ "elliptic": "^6.6.1",
72
+ "invariant": "^2.2.4",
73
+ "jwt-decode": "^4.0.0",
74
+ "socket.io-client": "^4.8.1",
75
+ "zod": "^3.25.64"
76
+ },
77
+ "devDependencies": {
78
+ "@biomejs/biome": "^1.9.4",
79
+ "@types/elliptic": "^6.4.18",
80
+ "@types/invariant": "^2.2.34",
81
+ "@types/node": "^20.19.9",
82
+ "typescript": "^5.9.2"
83
+ }
84
+ }