@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,165 @@
1
+ "use strict";
2
+ /**
3
+ * Language utilities for OxyServices
4
+ * Provides access to supported languages and language metadata
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.SUPPORTED_LANGUAGES = void 0;
8
+ exports.getLanguageMetadata = getLanguageMetadata;
9
+ exports.getLanguageName = getLanguageName;
10
+ exports.getNativeLanguageName = getNativeLanguageName;
11
+ exports.normalizeLanguageCode = normalizeLanguageCode;
12
+ // Supported languages with their metadata
13
+ exports.SUPPORTED_LANGUAGES = [
14
+ {
15
+ id: 'en-US',
16
+ name: 'English',
17
+ nativeName: 'English',
18
+ flag: '🇺🇸',
19
+ icon: 'translate',
20
+ color: '#007AFF',
21
+ },
22
+ {
23
+ id: 'es-ES',
24
+ name: 'Spanish',
25
+ nativeName: 'Español',
26
+ flag: '🇪🇸',
27
+ icon: 'translate',
28
+ color: '#FF3B30',
29
+ },
30
+ {
31
+ id: 'ca-ES',
32
+ name: 'Catalan',
33
+ nativeName: 'Català',
34
+ flag: '🇪🇸',
35
+ icon: 'translate',
36
+ color: '#0CA678',
37
+ },
38
+ {
39
+ id: 'fr-FR',
40
+ name: 'French',
41
+ nativeName: 'Français',
42
+ flag: '🇫🇷',
43
+ icon: 'translate',
44
+ color: '#5856D6',
45
+ },
46
+ {
47
+ id: 'de-DE',
48
+ name: 'German',
49
+ nativeName: 'Deutsch',
50
+ flag: '🇩🇪',
51
+ icon: 'translate',
52
+ color: '#FF9500',
53
+ },
54
+ {
55
+ id: 'it-IT',
56
+ name: 'Italian',
57
+ nativeName: 'Italiano',
58
+ flag: '🇮🇹',
59
+ icon: 'translate',
60
+ color: '#34C759',
61
+ },
62
+ {
63
+ id: 'pt-PT',
64
+ name: 'Portuguese',
65
+ nativeName: 'Português',
66
+ flag: '🇵🇹',
67
+ icon: 'translate',
68
+ color: '#AF52DE',
69
+ },
70
+ {
71
+ id: 'ja-JP',
72
+ name: 'Japanese',
73
+ nativeName: '日本語',
74
+ flag: '🇯🇵',
75
+ icon: 'translate',
76
+ color: '#FF2D92',
77
+ },
78
+ {
79
+ id: 'ko-KR',
80
+ name: 'Korean',
81
+ nativeName: '한국어',
82
+ flag: '🇰🇷',
83
+ icon: 'translate',
84
+ color: '#32D74B',
85
+ },
86
+ {
87
+ id: 'zh-CN',
88
+ name: 'Chinese',
89
+ nativeName: '中文',
90
+ flag: '🇨🇳',
91
+ icon: 'translate',
92
+ color: '#FF9F0A',
93
+ },
94
+ {
95
+ id: 'ar-SA',
96
+ name: 'Arabic',
97
+ nativeName: 'العربية',
98
+ flag: '🇸🇦',
99
+ icon: 'translate',
100
+ color: '#30B0C7',
101
+ },
102
+ ];
103
+ const FALLBACK_LANGUAGE = 'en-US';
104
+ /**
105
+ * Get language metadata by language code
106
+ * @param languageCode - BCP-47 language code (e.g., 'en-US', 'es-ES')
107
+ * @returns Language metadata or null if not found
108
+ */
109
+ function getLanguageMetadata(languageCode) {
110
+ if (!languageCode)
111
+ return null;
112
+ // Direct match
113
+ const exactMatch = exports.SUPPORTED_LANGUAGES.find(lang => lang.id === languageCode);
114
+ if (exactMatch)
115
+ return exactMatch;
116
+ // Try to match base language code (e.g., 'en' matches 'en-US')
117
+ const baseCode = languageCode.split('-')[0];
118
+ const baseMatch = exports.SUPPORTED_LANGUAGES.find(lang => lang.id.startsWith(baseCode + '-'));
119
+ if (baseMatch)
120
+ return baseMatch;
121
+ return null;
122
+ }
123
+ /**
124
+ * Get language name by language code
125
+ * @param languageCode - BCP-47 language code (e.g., 'en-US', 'es-ES')
126
+ * @returns Language name (e.g., 'English') or the code if not found
127
+ */
128
+ function getLanguageName(languageCode) {
129
+ const metadata = getLanguageMetadata(languageCode);
130
+ return metadata?.name || languageCode || FALLBACK_LANGUAGE;
131
+ }
132
+ /**
133
+ * Get native language name by language code
134
+ * @param languageCode - BCP-47 language code (e.g., 'en-US', 'es-ES')
135
+ * @returns Native language name (e.g., 'Español') or the code if not found
136
+ */
137
+ function getNativeLanguageName(languageCode) {
138
+ const metadata = getLanguageMetadata(languageCode);
139
+ return metadata?.nativeName || languageCode || FALLBACK_LANGUAGE;
140
+ }
141
+ /**
142
+ * Normalize language code to BCP-47 format
143
+ * @param lang - Language code (may be short like 'en' or full like 'en-US')
144
+ * @returns Normalized BCP-47 language code
145
+ */
146
+ function normalizeLanguageCode(lang) {
147
+ if (!lang)
148
+ return FALLBACK_LANGUAGE;
149
+ if (lang.includes('-'))
150
+ return lang;
151
+ const map = {
152
+ en: 'en-US',
153
+ es: 'es-ES',
154
+ ca: 'ca-ES',
155
+ fr: 'fr-FR',
156
+ de: 'de-DE',
157
+ it: 'it-IT',
158
+ pt: 'pt-PT',
159
+ ja: 'ja-JP',
160
+ ko: 'ko-KR',
161
+ zh: 'zh-CN',
162
+ ar: 'ar-SA',
163
+ };
164
+ return map[lang] || lang;
165
+ }
@@ -0,0 +1,126 @@
1
+ "use strict";
2
+ /**
3
+ * Centralized logging utilities for consistent logging across the application
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.logPerformance = exports.logError = exports.logPayment = exports.logDevice = exports.logUser = exports.logSession = exports.logApi = exports.logAuth = exports.logger = exports.LogLevel = void 0;
7
+ var LogLevel;
8
+ (function (LogLevel) {
9
+ LogLevel[LogLevel["DEBUG"] = 0] = "DEBUG";
10
+ LogLevel[LogLevel["INFO"] = 1] = "INFO";
11
+ LogLevel[LogLevel["WARN"] = 2] = "WARN";
12
+ LogLevel[LogLevel["ERROR"] = 3] = "ERROR";
13
+ LogLevel[LogLevel["NONE"] = 4] = "NONE";
14
+ })(LogLevel || (exports.LogLevel = LogLevel = {}));
15
+ class Logger {
16
+ constructor() {
17
+ this.level = LogLevel.INFO;
18
+ this.isDevelopment = process.env.NODE_ENV === 'development';
19
+ }
20
+ setLevel(level) {
21
+ this.level = level;
22
+ }
23
+ shouldLog(level) {
24
+ return level >= this.level;
25
+ }
26
+ formatMessage(level, message, context) {
27
+ const timestamp = new Date().toISOString();
28
+ const contextStr = context ? ` [${Object.entries(context).map(([k, v]) => `${k}:${v}`).join(', ')}]` : '';
29
+ return `[${timestamp}] ${level}${contextStr}: ${message}`;
30
+ }
31
+ debug(message, context, ...args) {
32
+ if (this.shouldLog(LogLevel.DEBUG)) {
33
+ const formattedMessage = this.formatMessage('DEBUG', message, context);
34
+ if (this.isDevelopment) {
35
+ console.log(formattedMessage, ...args);
36
+ }
37
+ }
38
+ }
39
+ info(message, context, ...args) {
40
+ if (this.shouldLog(LogLevel.INFO)) {
41
+ const formattedMessage = this.formatMessage('INFO', message, context);
42
+ console.log(formattedMessage, ...args);
43
+ }
44
+ }
45
+ warn(message, context, ...args) {
46
+ if (this.shouldLog(LogLevel.WARN)) {
47
+ const formattedMessage = this.formatMessage('WARN', message, context);
48
+ console.warn(formattedMessage, ...args);
49
+ }
50
+ }
51
+ error(message, error, context, ...args) {
52
+ if (this.shouldLog(LogLevel.ERROR)) {
53
+ const formattedMessage = this.formatMessage('ERROR', message, context);
54
+ if (error) {
55
+ console.error(formattedMessage, error, ...args);
56
+ }
57
+ else {
58
+ console.error(formattedMessage, ...args);
59
+ }
60
+ }
61
+ }
62
+ // Specialized logging methods for common patterns
63
+ auth(message, context, ...args) {
64
+ this.info(`🔐 ${message}`, { ...context, category: 'auth' }, ...args);
65
+ }
66
+ api(message, context, ...args) {
67
+ this.info(`🌐 ${message}`, { ...context, category: 'api' }, ...args);
68
+ }
69
+ session(message, context, ...args) {
70
+ this.info(`📱 ${message}`, { ...context, category: 'session' }, ...args);
71
+ }
72
+ user(message, context, ...args) {
73
+ this.info(`👤 ${message}`, { ...context, category: 'user' }, ...args);
74
+ }
75
+ device(message, context, ...args) {
76
+ this.info(`📱 ${message}`, { ...context, category: 'device' }, ...args);
77
+ }
78
+ payment(message, context, ...args) {
79
+ this.info(`💳 ${message}`, { ...context, category: 'payment' }, ...args);
80
+ }
81
+ // Performance logging
82
+ performance(operation, duration, context) {
83
+ const level = duration > 1000 ? LogLevel.WARN : LogLevel.INFO;
84
+ const message = `⏱️ ${operation} completed in ${duration}ms`;
85
+ if (level === LogLevel.WARN) {
86
+ this.warn(message, { ...context, category: 'performance', duration });
87
+ }
88
+ else {
89
+ this.info(message, { ...context, category: 'performance', duration });
90
+ }
91
+ }
92
+ // Error logging with stack trace
93
+ errorWithStack(message, error, context) {
94
+ this.error(message, error, { ...context, stack: error.stack });
95
+ }
96
+ // Group related log messages
97
+ group(label, fn) {
98
+ if (this.isDevelopment && this.shouldLog(LogLevel.DEBUG)) {
99
+ console.group(label);
100
+ fn();
101
+ console.groupEnd();
102
+ }
103
+ else {
104
+ fn();
105
+ }
106
+ }
107
+ }
108
+ // Create singleton instance
109
+ exports.logger = new Logger();
110
+ // Convenience functions for common logging patterns
111
+ const logAuth = (message, context, ...args) => exports.logger.auth(message, context, ...args);
112
+ exports.logAuth = logAuth;
113
+ const logApi = (message, context, ...args) => exports.logger.api(message, context, ...args);
114
+ exports.logApi = logApi;
115
+ const logSession = (message, context, ...args) => exports.logger.session(message, context, ...args);
116
+ exports.logSession = logSession;
117
+ const logUser = (message, context, ...args) => exports.logger.user(message, context, ...args);
118
+ exports.logUser = logUser;
119
+ const logDevice = (message, context, ...args) => exports.logger.device(message, context, ...args);
120
+ exports.logDevice = logDevice;
121
+ const logPayment = (message, context, ...args) => exports.logger.payment(message, context, ...args);
122
+ exports.logPayment = logPayment;
123
+ const logError = (message, error, context, ...args) => exports.logger.error(message, error, context, ...args);
124
+ exports.logError = logError;
125
+ const logPerformance = (operation, duration, context) => exports.logger.performance(operation, duration, context);
126
+ exports.logPerformance = logPerformance;
@@ -0,0 +1,144 @@
1
+ "use strict";
2
+ /**
3
+ * Platform Detection Utility
4
+ *
5
+ * Provides platform detection WITHOUT importing from 'react-native'.
6
+ * This allows core modules to be used in web/Node.js environments
7
+ * without bundlers failing on react-native imports.
8
+ */
9
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ var desc = Object.getOwnPropertyDescriptor(m, k);
12
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
13
+ desc = { enumerable: true, get: function() { return m[k]; } };
14
+ }
15
+ Object.defineProperty(o, k2, desc);
16
+ }) : (function(o, m, k, k2) {
17
+ if (k2 === undefined) k2 = k;
18
+ o[k2] = m[k];
19
+ }));
20
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
21
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
22
+ }) : function(o, v) {
23
+ o["default"] = v;
24
+ });
25
+ var __importStar = (this && this.__importStar) || (function () {
26
+ var ownKeys = function(o) {
27
+ ownKeys = Object.getOwnPropertyNames || function (o) {
28
+ var ar = [];
29
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
30
+ return ar;
31
+ };
32
+ return ownKeys(o);
33
+ };
34
+ return function (mod) {
35
+ if (mod && mod.__esModule) return mod;
36
+ var result = {};
37
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
38
+ __setModuleDefault(result, mod);
39
+ return result;
40
+ };
41
+ })();
42
+ Object.defineProperty(exports, "__esModule", { value: true });
43
+ exports.getPlatformOS = getPlatformOS;
44
+ exports.isWeb = isWeb;
45
+ exports.isNative = isNative;
46
+ exports.isIOS = isIOS;
47
+ exports.isAndroid = isAndroid;
48
+ exports.setPlatformOS = setPlatformOS;
49
+ exports.initPlatformFromReactNative = initPlatformFromReactNative;
50
+ /**
51
+ * Detect the current platform without importing react-native
52
+ *
53
+ * Detection order:
54
+ * 1. Check for React Native's Platform object on globalThis (set by RN runtime)
55
+ * 2. Check for Node.js environment
56
+ * 3. Check for browser environment
57
+ * 4. Fall back to 'unknown'
58
+ */
59
+ function detectPlatform() {
60
+ // Check if React Native Platform is available globally (set by RN runtime)
61
+ // This avoids static imports while still detecting RN environment
62
+ const rnPlatform = globalThis.__REACT_NATIVE_PLATFORM__;
63
+ if (rnPlatform) {
64
+ return rnPlatform;
65
+ }
66
+ // Check navigator.product for React Native
67
+ if (typeof navigator !== 'undefined' && navigator.product === 'ReactNative') {
68
+ // We're in React Native but Platform wasn't set globally
69
+ // Try to get OS from userAgent or default to 'unknown'
70
+ return 'unknown';
71
+ }
72
+ // Check for Node.js environment
73
+ if (typeof process !== 'undefined' && process.versions?.node) {
74
+ return 'web'; // Treat Node.js as 'web' for compatibility (no native features)
75
+ }
76
+ // Check for browser/web environment
77
+ if (typeof window !== 'undefined' && typeof document !== 'undefined') {
78
+ return 'web';
79
+ }
80
+ return 'unknown';
81
+ }
82
+ // Cache the platform detection result
83
+ let cachedPlatform = null;
84
+ /**
85
+ * Get the current platform OS
86
+ * Safe to call from any environment (web, Node.js, React Native)
87
+ */
88
+ function getPlatformOS() {
89
+ if (cachedPlatform === null) {
90
+ cachedPlatform = detectPlatform();
91
+ }
92
+ return cachedPlatform;
93
+ }
94
+ /**
95
+ * Check if running on web platform (browser or Node.js)
96
+ */
97
+ function isWeb() {
98
+ return getPlatformOS() === 'web';
99
+ }
100
+ /**
101
+ * Check if running in a native app (iOS or Android)
102
+ */
103
+ function isNative() {
104
+ const os = getPlatformOS();
105
+ return os === 'ios' || os === 'android';
106
+ }
107
+ /**
108
+ * Check if running on iOS
109
+ */
110
+ function isIOS() {
111
+ return getPlatformOS() === 'ios';
112
+ }
113
+ /**
114
+ * Check if running on Android
115
+ */
116
+ function isAndroid() {
117
+ return getPlatformOS() === 'android';
118
+ }
119
+ /**
120
+ * Set the platform OS explicitly
121
+ * Called by React Native entry point to register the platform
122
+ * This allows lazy detection in environments where react-native is available
123
+ */
124
+ function setPlatformOS(os) {
125
+ cachedPlatform = os;
126
+ globalThis.__REACT_NATIVE_PLATFORM__ = os;
127
+ }
128
+ /**
129
+ * Try to initialize platform from react-native if available
130
+ * This is called lazily when needed, avoiding top-level imports
131
+ */
132
+ async function initPlatformFromReactNative() {
133
+ if (cachedPlatform !== null && cachedPlatform !== 'unknown') {
134
+ return; // Already initialized
135
+ }
136
+ try {
137
+ // Dynamic import to avoid bundler issues
138
+ const { Platform } = await Promise.resolve().then(() => __importStar(require('react-native')));
139
+ setPlatformOS(Platform.OS);
140
+ }
141
+ catch {
142
+ // react-native not available, use detected platform
143
+ }
144
+ }
@@ -0,0 +1,209 @@
1
+ "use strict";
2
+ /**
3
+ * Request utilities for HTTP clients
4
+ *
5
+ * Provides reusable components for request deduplication, queuing, and logging
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.SimpleLogger = exports.RequestQueue = exports.RequestDeduplicator = void 0;
9
+ /**
10
+ * Request deduplication - prevents duplicate concurrent requests
11
+ *
12
+ * When multiple requests with the same key are made simultaneously,
13
+ * only one request is executed and all callers receive the same result.
14
+ *
15
+ * @example
16
+ * ```typescript
17
+ * const deduplicator = new RequestDeduplicator();
18
+ *
19
+ * // Multiple calls with same key will share the same promise
20
+ * const promise1 = deduplicator.deduplicate('user-123', () => fetchUser('123'));
21
+ * const promise2 = deduplicator.deduplicate('user-123', () => fetchUser('123'));
22
+ * // promise1 === promise2, only one API call is made
23
+ * ```
24
+ */
25
+ class RequestDeduplicator {
26
+ constructor() {
27
+ this.pendingRequests = new Map();
28
+ }
29
+ /**
30
+ * Deduplicate a request by key
31
+ * @param key Unique key for the request
32
+ * @param requestFn Function that returns a promise
33
+ * @returns Promise that will be shared if key already exists
34
+ */
35
+ async deduplicate(key, requestFn) {
36
+ const existing = this.pendingRequests.get(key);
37
+ if (existing) {
38
+ return existing;
39
+ }
40
+ const promise = requestFn()
41
+ .finally(() => {
42
+ this.pendingRequests.delete(key);
43
+ });
44
+ this.pendingRequests.set(key, promise);
45
+ return promise;
46
+ }
47
+ /**
48
+ * Clear all pending requests
49
+ */
50
+ clear() {
51
+ this.pendingRequests.clear();
52
+ }
53
+ /**
54
+ * Get number of pending requests
55
+ */
56
+ size() {
57
+ return this.pendingRequests.size;
58
+ }
59
+ }
60
+ exports.RequestDeduplicator = RequestDeduplicator;
61
+ /**
62
+ * Request queue with concurrency control
63
+ *
64
+ * Limits the number of concurrent requests and queues excess requests.
65
+ * Useful for rate limiting and preventing request flooding.
66
+ *
67
+ * @example
68
+ * ```typescript
69
+ * const queue = new RequestQueue(5, 100); // Max 5 concurrent, queue up to 100
70
+ *
71
+ * // All requests will be queued and processed with max 5 concurrent
72
+ * await queue.enqueue(() => fetchUser('1'));
73
+ * await queue.enqueue(() => fetchUser('2'));
74
+ * // ...
75
+ * ```
76
+ */
77
+ class RequestQueue {
78
+ /**
79
+ * Create a new request queue
80
+ * @param maxConcurrent Maximum number of concurrent requests (default: 10)
81
+ * @param maxQueueSize Maximum queue size (default: 100)
82
+ */
83
+ constructor(maxConcurrent = 10, maxQueueSize = 100) {
84
+ this.queue = [];
85
+ this.running = 0;
86
+ this.maxConcurrent = maxConcurrent;
87
+ this.maxQueueSize = maxQueueSize;
88
+ }
89
+ /**
90
+ * Enqueue a request
91
+ * @param requestFn Function that returns a promise
92
+ * @returns Promise that resolves when request completes
93
+ */
94
+ async enqueue(requestFn) {
95
+ if (this.queue.length >= this.maxQueueSize) {
96
+ throw new Error('Request queue is full');
97
+ }
98
+ return new Promise((resolve, reject) => {
99
+ this.queue.push(async () => {
100
+ try {
101
+ const result = await requestFn();
102
+ resolve(result);
103
+ }
104
+ catch (error) {
105
+ reject(error);
106
+ }
107
+ });
108
+ this.process();
109
+ });
110
+ }
111
+ /**
112
+ * Process queued requests
113
+ */
114
+ async process() {
115
+ if (this.running >= this.maxConcurrent || this.queue.length === 0) {
116
+ return;
117
+ }
118
+ this.running++;
119
+ const requestFn = this.queue.shift();
120
+ if (requestFn) {
121
+ try {
122
+ await requestFn();
123
+ }
124
+ finally {
125
+ this.running--;
126
+ this.process();
127
+ }
128
+ }
129
+ else {
130
+ this.running--;
131
+ }
132
+ }
133
+ /**
134
+ * Clear all queued requests
135
+ */
136
+ clear() {
137
+ this.queue = [];
138
+ }
139
+ /**
140
+ * Get queue size
141
+ */
142
+ size() {
143
+ return this.queue.length;
144
+ }
145
+ /**
146
+ * Get number of currently running requests
147
+ */
148
+ runningCount() {
149
+ return this.running;
150
+ }
151
+ }
152
+ exports.RequestQueue = RequestQueue;
153
+ /**
154
+ * Simple logger with level support
155
+ *
156
+ * Lightweight logger for HTTP clients and utilities.
157
+ * For more advanced logging, use loggerUtils.ts
158
+ *
159
+ * @example
160
+ * ```typescript
161
+ * const logger = new SimpleLogger(true, 'debug');
162
+ * logger.debug('Debug message');
163
+ * logger.info('Info message');
164
+ * logger.error('Error message');
165
+ * ```
166
+ */
167
+ class SimpleLogger {
168
+ /**
169
+ * Create a new simple logger
170
+ * @param enabled Whether logging is enabled
171
+ * @param level Minimum log level
172
+ * @param prefix Prefix for log messages (default: '')
173
+ */
174
+ constructor(enabled = false, level = 'error', prefix = '') {
175
+ this.enabled = enabled;
176
+ this.level = level;
177
+ this.prefix = prefix;
178
+ }
179
+ shouldLog(level) {
180
+ if (!this.enabled || this.level === 'none')
181
+ return false;
182
+ const levels = ['none', 'error', 'warn', 'info', 'debug'];
183
+ return levels.indexOf(level) <= levels.indexOf(this.level);
184
+ }
185
+ formatMessage(...args) {
186
+ return this.prefix ? [`[${this.prefix}]`, ...args] : args;
187
+ }
188
+ error(...args) {
189
+ if (this.shouldLog('error')) {
190
+ console.error(...this.formatMessage(...args));
191
+ }
192
+ }
193
+ warn(...args) {
194
+ if (this.shouldLog('warn')) {
195
+ console.warn(...this.formatMessage(...args));
196
+ }
197
+ }
198
+ info(...args) {
199
+ if (this.shouldLog('info')) {
200
+ console.info(...this.formatMessage(...args));
201
+ }
202
+ }
203
+ debug(...args) {
204
+ if (this.shouldLog('debug')) {
205
+ console.log(...this.formatMessage(...args));
206
+ }
207
+ }
208
+ }
209
+ exports.SimpleLogger = SimpleLogger;