@tyrads.com/tyrads-sdk 3.0.0-beta.0 → 3.2.0-beta.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 (289) hide show
  1. package/android/build.gradle +1 -1
  2. package/android/src/main/java/com/tyradssdk/TyradsSdkModule.kt +130 -29
  3. package/ios/Tyrads/AcmoAssets.swift +14 -0
  4. package/ios/Tyrads/ApiHeaders.swift +1 -0
  5. package/ios/Tyrads/InitModel.swift +3 -0
  6. package/ios/Tyrads/Tyrads.swift +255 -213
  7. package/ios/Tyrads/WebViewController.swift +195 -0
  8. package/ios/Tyrads/core/utils/AcmoKeyNames.swift +29 -0
  9. package/ios/Tyrads/core/utils/ColorExtension.swift +55 -0
  10. package/ios/Tyrads/core/utils/Services/LocalizationService.swift +175 -0
  11. package/ios/Tyrads/helpers/device_details.swift +160 -0
  12. package/ios/Tyrads/legal/AcmoPrivacyPage.swift +353 -0
  13. package/ios/Tyrads/legal/PrivacyPageController.swift +31 -0
  14. package/ios/Tyrads/user/AcmoUserUpdatePage.swift +302 -0
  15. package/ios/Tyrads/user/AcmoUsersUpdateController.swift +26 -0
  16. package/ios/Tyrads/user/Repository.swift +89 -0
  17. package/ios/TyradsSdk.mm +22 -4
  18. package/ios/TyradsSdk.swift +101 -31
  19. package/lib/commonjs/acmo/core/helpers/launcher.js +20 -0
  20. package/lib/commonjs/acmo/core/helpers/launcher.js.map +1 -0
  21. package/lib/commonjs/acmo/core/helpers/native_methods.js +37 -0
  22. package/lib/commonjs/acmo/core/helpers/native_methods.js.map +1 -0
  23. package/lib/commonjs/acmo/core/helpers/numeral.js +19 -0
  24. package/lib/commonjs/acmo/core/helpers/numeral.js.map +1 -0
  25. package/lib/commonjs/acmo/core/services/localization_service.js +164 -0
  26. package/lib/commonjs/acmo/core/services/localization_service.js.map +1 -0
  27. package/lib/commonjs/acmo/core/storage/storage.js +15 -1
  28. package/lib/commonjs/acmo/core/storage/storage.js.map +1 -1
  29. package/lib/commonjs/acmo/modules/dashboard/components/active_offers_button.js +79 -0
  30. package/lib/commonjs/acmo/modules/dashboard/components/active_offers_button.js.map +1 -0
  31. package/lib/commonjs/acmo/modules/dashboard/components/custom_card.js +7 -10
  32. package/lib/commonjs/acmo/modules/dashboard/components/custom_card.js.map +1 -1
  33. package/lib/commonjs/acmo/modules/dashboard/components/custom_scroller.js +141 -0
  34. package/lib/commonjs/acmo/modules/dashboard/components/custom_scroller.js.map +1 -0
  35. package/lib/commonjs/acmo/{core/marquee.js → modules/dashboard/components/custom_shimmer.js} +46 -34
  36. package/lib/commonjs/acmo/modules/dashboard/components/custom_shimmer.js.map +1 -0
  37. package/lib/commonjs/acmo/modules/dashboard/components/offer_card.js +263 -0
  38. package/lib/commonjs/acmo/modules/dashboard/components/offer_card.js.map +1 -0
  39. package/lib/commonjs/acmo/modules/dashboard/components/offer_list_item.js +203 -0
  40. package/lib/commonjs/acmo/modules/dashboard/components/offer_list_item.js.map +1 -0
  41. package/lib/commonjs/acmo/modules/dashboard/components/premium_empty_widget.js +87 -0
  42. package/lib/commonjs/acmo/modules/dashboard/components/premium_empty_widget.js.map +1 -0
  43. package/lib/commonjs/acmo/modules/dashboard/components/premium_header.js +16 -14
  44. package/lib/commonjs/acmo/modules/dashboard/components/premium_header.js.map +1 -1
  45. package/lib/commonjs/acmo/modules/dashboard/components/premium_loading.js +111 -0
  46. package/lib/commonjs/acmo/modules/dashboard/components/premium_loading.js.map +1 -0
  47. package/lib/commonjs/acmo/modules/dashboard/repository.js +108 -32
  48. package/lib/commonjs/acmo/modules/dashboard/repository.js.map +1 -1
  49. package/lib/commonjs/acmo/modules/dashboard/top_offers.js +85 -63
  50. package/lib/commonjs/acmo/modules/dashboard/top_offers.js.map +1 -1
  51. package/lib/commonjs/acmo/modules/localization/localization_context.js +56 -0
  52. package/lib/commonjs/acmo/modules/localization/localization_context.js.map +1 -0
  53. package/lib/commonjs/assets/images/angle_up.png +0 -0
  54. package/lib/commonjs/assets/images/diamond.png +0 -0
  55. package/lib/commonjs/assets/images/info.png +0 -0
  56. package/lib/commonjs/assets/images/info_icon.png +0 -0
  57. package/lib/commonjs/assets/images/premium-emptybg.jpeg +0 -0
  58. package/lib/commonjs/assets/images/rank_1.png +0 -0
  59. package/lib/commonjs/assets/images/rank_2.png +0 -0
  60. package/lib/commonjs/assets/images/rank_3.png +0 -0
  61. package/lib/commonjs/assets/images/rank_4.png +0 -0
  62. package/lib/commonjs/assets/images/rank_5.png +0 -0
  63. package/lib/commonjs/index.js +50 -16
  64. package/lib/commonjs/index.js.map +1 -1
  65. package/lib/module/acmo/core/helpers/launcher.js +15 -0
  66. package/lib/module/acmo/core/helpers/launcher.js.map +1 -0
  67. package/lib/module/acmo/core/helpers/native_methods.js +33 -0
  68. package/lib/module/acmo/core/helpers/native_methods.js.map +1 -0
  69. package/lib/module/acmo/core/helpers/numeral.js +14 -0
  70. package/lib/module/acmo/core/helpers/numeral.js.map +1 -0
  71. package/lib/module/acmo/core/services/localization_service.js +159 -0
  72. package/lib/module/acmo/core/services/localization_service.js.map +1 -0
  73. package/lib/module/acmo/core/storage/storage.js +13 -0
  74. package/lib/module/acmo/core/storage/storage.js.map +1 -1
  75. package/lib/module/acmo/modules/dashboard/components/active_offers_button.js +73 -0
  76. package/lib/module/acmo/modules/dashboard/components/active_offers_button.js.map +1 -0
  77. package/lib/module/acmo/modules/dashboard/components/custom_card.js +7 -10
  78. package/lib/module/acmo/modules/dashboard/components/custom_card.js.map +1 -1
  79. package/lib/module/acmo/modules/dashboard/components/custom_scroller.js +135 -0
  80. package/lib/module/acmo/modules/dashboard/components/custom_scroller.js.map +1 -0
  81. package/lib/module/acmo/modules/dashboard/components/custom_shimmer.js +66 -0
  82. package/lib/module/acmo/modules/dashboard/components/custom_shimmer.js.map +1 -0
  83. package/lib/module/acmo/modules/dashboard/components/offer_card.js +257 -0
  84. package/lib/module/acmo/modules/dashboard/components/offer_card.js.map +1 -0
  85. package/lib/module/acmo/modules/dashboard/components/offer_list_item.js +197 -0
  86. package/lib/module/acmo/modules/dashboard/components/offer_list_item.js.map +1 -0
  87. package/lib/module/acmo/modules/dashboard/components/premium_empty_widget.js +82 -0
  88. package/lib/module/acmo/modules/dashboard/components/premium_empty_widget.js.map +1 -0
  89. package/lib/module/acmo/modules/dashboard/components/premium_header.js +16 -14
  90. package/lib/module/acmo/modules/dashboard/components/premium_header.js.map +1 -1
  91. package/lib/module/acmo/modules/dashboard/components/premium_loading.js +106 -0
  92. package/lib/module/acmo/modules/dashboard/components/premium_loading.js.map +1 -0
  93. package/lib/module/acmo/modules/dashboard/repository.js +105 -30
  94. package/lib/module/acmo/modules/dashboard/repository.js.map +1 -1
  95. package/lib/module/acmo/modules/dashboard/top_offers.js +86 -64
  96. package/lib/module/acmo/modules/dashboard/top_offers.js.map +1 -1
  97. package/lib/module/acmo/modules/localization/localization_context.js +45 -0
  98. package/lib/module/acmo/modules/localization/localization_context.js.map +1 -0
  99. package/lib/module/assets/images/angle_up.png +0 -0
  100. package/lib/module/assets/images/diamond.png +0 -0
  101. package/lib/module/assets/images/info.png +0 -0
  102. package/lib/module/assets/images/info_icon.png +0 -0
  103. package/lib/module/assets/images/premium-emptybg.jpeg +0 -0
  104. package/lib/module/assets/images/rank_1.png +0 -0
  105. package/lib/module/assets/images/rank_2.png +0 -0
  106. package/lib/module/assets/images/rank_3.png +0 -0
  107. package/lib/module/assets/images/rank_4.png +0 -0
  108. package/lib/module/assets/images/rank_5.png +0 -0
  109. package/lib/module/index.js +49 -17
  110. package/lib/module/index.js.map +1 -1
  111. package/lib/typescript/commonjs/src/acmo/core/helpers/launcher.d.ts +3 -0
  112. package/lib/typescript/commonjs/src/acmo/core/helpers/launcher.d.ts.map +1 -0
  113. package/lib/typescript/commonjs/src/acmo/core/helpers/native_methods.d.ts +6 -0
  114. package/lib/typescript/commonjs/src/acmo/core/helpers/native_methods.d.ts.map +1 -0
  115. package/lib/typescript/commonjs/src/acmo/core/helpers/numeral.d.ts +2 -0
  116. package/lib/typescript/commonjs/src/acmo/core/helpers/numeral.d.ts.map +1 -0
  117. package/lib/typescript/commonjs/src/acmo/core/services/localization_service.d.ts +18 -0
  118. package/lib/typescript/commonjs/src/acmo/core/services/localization_service.d.ts.map +1 -0
  119. package/lib/typescript/commonjs/src/acmo/core/storage/storage.d.ts +1 -0
  120. package/lib/typescript/commonjs/src/acmo/core/storage/storage.d.ts.map +1 -1
  121. package/lib/typescript/commonjs/src/acmo/modules/dashboard/components/active_offers_button.d.ts +9 -0
  122. package/lib/typescript/commonjs/src/acmo/modules/dashboard/components/active_offers_button.d.ts.map +1 -0
  123. package/lib/typescript/commonjs/src/acmo/modules/dashboard/components/custom_card.d.ts.map +1 -1
  124. package/lib/typescript/commonjs/src/acmo/modules/dashboard/components/custom_scroller.d.ts +17 -0
  125. package/lib/typescript/commonjs/src/acmo/modules/dashboard/components/custom_scroller.d.ts.map +1 -0
  126. package/lib/typescript/commonjs/src/acmo/modules/dashboard/components/custom_shimmer.d.ts +11 -0
  127. package/lib/typescript/commonjs/src/acmo/modules/dashboard/components/custom_shimmer.d.ts.map +1 -0
  128. package/lib/typescript/commonjs/src/acmo/modules/dashboard/components/offer_card.d.ts +12 -0
  129. package/lib/typescript/commonjs/src/acmo/modules/dashboard/components/offer_card.d.ts.map +1 -0
  130. package/lib/typescript/commonjs/src/acmo/modules/dashboard/components/offer_list_item.d.ts +15 -0
  131. package/lib/typescript/commonjs/src/acmo/modules/dashboard/components/offer_list_item.d.ts.map +1 -0
  132. package/lib/typescript/commonjs/src/acmo/modules/dashboard/components/premium_empty_widget.d.ts +7 -0
  133. package/lib/typescript/commonjs/src/acmo/modules/dashboard/components/premium_empty_widget.d.ts.map +1 -0
  134. package/lib/typescript/commonjs/src/acmo/modules/dashboard/components/premium_header.d.ts.map +1 -1
  135. package/lib/typescript/commonjs/src/acmo/modules/dashboard/components/premium_loading.d.ts +8 -0
  136. package/lib/typescript/commonjs/src/acmo/modules/dashboard/components/premium_loading.d.ts.map +1 -0
  137. package/lib/typescript/commonjs/src/acmo/modules/dashboard/repository.d.ts +2 -1
  138. package/lib/typescript/commonjs/src/acmo/modules/dashboard/repository.d.ts.map +1 -1
  139. package/lib/typescript/commonjs/src/acmo/modules/dashboard/top_offers.d.ts +8 -7
  140. package/lib/typescript/commonjs/src/acmo/modules/dashboard/top_offers.d.ts.map +1 -1
  141. package/lib/typescript/commonjs/src/acmo/modules/localization/localization_context.d.ts +14 -0
  142. package/lib/typescript/commonjs/src/acmo/modules/localization/localization_context.d.ts.map +1 -0
  143. package/lib/typescript/commonjs/src/index.d.ts +8 -6
  144. package/lib/typescript/commonjs/src/index.d.ts.map +1 -1
  145. package/lib/typescript/module/src/acmo/core/helpers/launcher.d.ts +3 -0
  146. package/lib/typescript/module/src/acmo/core/helpers/launcher.d.ts.map +1 -0
  147. package/lib/typescript/module/src/acmo/core/helpers/native_methods.d.ts +6 -0
  148. package/lib/typescript/module/src/acmo/core/helpers/native_methods.d.ts.map +1 -0
  149. package/lib/typescript/module/src/acmo/core/helpers/numeral.d.ts +2 -0
  150. package/lib/typescript/module/src/acmo/core/helpers/numeral.d.ts.map +1 -0
  151. package/lib/typescript/module/src/acmo/core/services/localization_service.d.ts +18 -0
  152. package/lib/typescript/module/src/acmo/core/services/localization_service.d.ts.map +1 -0
  153. package/lib/typescript/module/src/acmo/core/storage/storage.d.ts +1 -0
  154. package/lib/typescript/module/src/acmo/core/storage/storage.d.ts.map +1 -1
  155. package/lib/typescript/module/src/acmo/modules/dashboard/components/active_offers_button.d.ts +9 -0
  156. package/lib/typescript/module/src/acmo/modules/dashboard/components/active_offers_button.d.ts.map +1 -0
  157. package/lib/typescript/module/src/acmo/modules/dashboard/components/custom_card.d.ts.map +1 -1
  158. package/lib/typescript/module/src/acmo/modules/dashboard/components/custom_scroller.d.ts +17 -0
  159. package/lib/typescript/module/src/acmo/modules/dashboard/components/custom_scroller.d.ts.map +1 -0
  160. package/lib/typescript/module/src/acmo/modules/dashboard/components/custom_shimmer.d.ts +11 -0
  161. package/lib/typescript/module/src/acmo/modules/dashboard/components/custom_shimmer.d.ts.map +1 -0
  162. package/lib/typescript/module/src/acmo/modules/dashboard/components/offer_card.d.ts +12 -0
  163. package/lib/typescript/module/src/acmo/modules/dashboard/components/offer_card.d.ts.map +1 -0
  164. package/lib/typescript/module/src/acmo/modules/dashboard/components/offer_list_item.d.ts +15 -0
  165. package/lib/typescript/module/src/acmo/modules/dashboard/components/offer_list_item.d.ts.map +1 -0
  166. package/lib/typescript/module/src/acmo/modules/dashboard/components/premium_empty_widget.d.ts +7 -0
  167. package/lib/typescript/module/src/acmo/modules/dashboard/components/premium_empty_widget.d.ts.map +1 -0
  168. package/lib/typescript/module/src/acmo/modules/dashboard/components/premium_header.d.ts.map +1 -1
  169. package/lib/typescript/module/src/acmo/modules/dashboard/components/premium_loading.d.ts +8 -0
  170. package/lib/typescript/module/src/acmo/modules/dashboard/components/premium_loading.d.ts.map +1 -0
  171. package/lib/typescript/module/src/acmo/modules/dashboard/repository.d.ts +2 -1
  172. package/lib/typescript/module/src/acmo/modules/dashboard/repository.d.ts.map +1 -1
  173. package/lib/typescript/module/src/acmo/modules/dashboard/top_offers.d.ts +8 -7
  174. package/lib/typescript/module/src/acmo/modules/dashboard/top_offers.d.ts.map +1 -1
  175. package/lib/typescript/module/src/acmo/modules/localization/localization_context.d.ts +14 -0
  176. package/lib/typescript/module/src/acmo/modules/localization/localization_context.d.ts.map +1 -0
  177. package/lib/typescript/module/src/index.d.ts +8 -6
  178. package/lib/typescript/module/src/index.d.ts.map +1 -1
  179. package/package.json +3 -6
  180. package/readme.md +8 -8
  181. package/src/acmo/core/helpers/launcher.ts +14 -0
  182. package/src/acmo/core/helpers/native_methods.ts +43 -0
  183. package/src/acmo/core/helpers/numeral.ts +14 -0
  184. package/src/acmo/core/services/localization_service.ts +200 -0
  185. package/src/acmo/core/storage/storage.ts +14 -0
  186. package/src/acmo/core/types/types.d.ts +11 -13
  187. package/src/acmo/modules/dashboard/components/active_offers_button.tsx +62 -0
  188. package/src/acmo/modules/dashboard/components/custom_card.tsx +5 -8
  189. package/src/acmo/modules/dashboard/components/custom_scroller.tsx +164 -0
  190. package/src/acmo/modules/dashboard/components/custom_shimmer.tsx +75 -0
  191. package/src/acmo/modules/dashboard/components/offer_card.tsx +248 -0
  192. package/src/acmo/modules/dashboard/components/offer_list_item.tsx +228 -0
  193. package/src/acmo/modules/dashboard/components/premium_empty_widget.tsx +79 -0
  194. package/src/acmo/modules/dashboard/components/premium_header.tsx +14 -13
  195. package/src/acmo/modules/dashboard/components/premium_loading.tsx +72 -0
  196. package/src/acmo/modules/dashboard/repository.ts +121 -46
  197. package/src/acmo/modules/dashboard/top_offers.tsx +105 -53
  198. package/src/acmo/modules/localization/localization_context.tsx +52 -0
  199. package/src/assets/images/angle_up.png +0 -0
  200. package/src/assets/images/diamond.png +0 -0
  201. package/src/assets/images/info.png +0 -0
  202. package/src/assets/images/info_icon.png +0 -0
  203. package/src/assets/images/premium-emptybg.jpeg +0 -0
  204. package/src/assets/images/rank_1.png +0 -0
  205. package/src/assets/images/rank_2.png +0 -0
  206. package/src/assets/images/rank_3.png +0 -0
  207. package/src/assets/images/rank_4.png +0 -0
  208. package/src/assets/images/rank_5.png +0 -0
  209. package/src/index.tsx +76 -34
  210. package/lib/commonjs/acmo/core/marquee.js.map +0 -1
  211. package/lib/commonjs/acmo/modules/dashboard/components/auto_scroller.js +0 -87
  212. package/lib/commonjs/acmo/modules/dashboard/components/auto_scroller.js.map +0 -1
  213. package/lib/commonjs/acmo/modules/dashboard/components/my_games_button.js +0 -48
  214. package/lib/commonjs/acmo/modules/dashboard/components/my_games_button.js.map +0 -1
  215. package/lib/commonjs/acmo/modules/dashboard/components/offer_info_section.js +0 -158
  216. package/lib/commonjs/acmo/modules/dashboard/components/offer_info_section.js.map +0 -1
  217. package/lib/commonjs/acmo/modules/dashboard/components/premium_option_1.js +0 -180
  218. package/lib/commonjs/acmo/modules/dashboard/components/premium_option_1.js.map +0 -1
  219. package/lib/commonjs/acmo/modules/dashboard/components/premium_option_2.js +0 -102
  220. package/lib/commonjs/acmo/modules/dashboard/components/premium_option_2.js.map +0 -1
  221. package/lib/commonjs/acmo/modules/dashboard/components/premium_option_3.js +0 -41
  222. package/lib/commonjs/acmo/modules/dashboard/components/premium_option_3.js.map +0 -1
  223. package/lib/commonjs/acmo/modules/dashboard/components/premium_option_4.js +0 -214
  224. package/lib/commonjs/acmo/modules/dashboard/components/premium_option_4.js.map +0 -1
  225. package/lib/commonjs/i18n.js +0 -112
  226. package/lib/commonjs/i18n.js.map +0 -1
  227. package/lib/module/acmo/core/marquee.js +0 -54
  228. package/lib/module/acmo/core/marquee.js.map +0 -1
  229. package/lib/module/acmo/modules/dashboard/components/auto_scroller.js +0 -81
  230. package/lib/module/acmo/modules/dashboard/components/auto_scroller.js.map +0 -1
  231. package/lib/module/acmo/modules/dashboard/components/my_games_button.js +0 -43
  232. package/lib/module/acmo/modules/dashboard/components/my_games_button.js.map +0 -1
  233. package/lib/module/acmo/modules/dashboard/components/offer_info_section.js +0 -153
  234. package/lib/module/acmo/modules/dashboard/components/offer_info_section.js.map +0 -1
  235. package/lib/module/acmo/modules/dashboard/components/premium_option_1.js +0 -174
  236. package/lib/module/acmo/modules/dashboard/components/premium_option_1.js.map +0 -1
  237. package/lib/module/acmo/modules/dashboard/components/premium_option_2.js +0 -97
  238. package/lib/module/acmo/modules/dashboard/components/premium_option_2.js.map +0 -1
  239. package/lib/module/acmo/modules/dashboard/components/premium_option_3.js +0 -36
  240. package/lib/module/acmo/modules/dashboard/components/premium_option_3.js.map +0 -1
  241. package/lib/module/acmo/modules/dashboard/components/premium_option_4.js +0 -209
  242. package/lib/module/acmo/modules/dashboard/components/premium_option_4.js.map +0 -1
  243. package/lib/module/i18n.js +0 -107
  244. package/lib/module/i18n.js.map +0 -1
  245. package/lib/typescript/commonjs/src/acmo/core/marquee.d.ts +0 -11
  246. package/lib/typescript/commonjs/src/acmo/core/marquee.d.ts.map +0 -1
  247. package/lib/typescript/commonjs/src/acmo/modules/dashboard/components/auto_scroller.d.ts +0 -10
  248. package/lib/typescript/commonjs/src/acmo/modules/dashboard/components/auto_scroller.d.ts.map +0 -1
  249. package/lib/typescript/commonjs/src/acmo/modules/dashboard/components/my_games_button.d.ts +0 -8
  250. package/lib/typescript/commonjs/src/acmo/modules/dashboard/components/my_games_button.d.ts.map +0 -1
  251. package/lib/typescript/commonjs/src/acmo/modules/dashboard/components/offer_info_section.d.ts +0 -11
  252. package/lib/typescript/commonjs/src/acmo/modules/dashboard/components/offer_info_section.d.ts.map +0 -1
  253. package/lib/typescript/commonjs/src/acmo/modules/dashboard/components/premium_option_1.d.ts +0 -9
  254. package/lib/typescript/commonjs/src/acmo/modules/dashboard/components/premium_option_1.d.ts.map +0 -1
  255. package/lib/typescript/commonjs/src/acmo/modules/dashboard/components/premium_option_2.d.ts +0 -9
  256. package/lib/typescript/commonjs/src/acmo/modules/dashboard/components/premium_option_2.d.ts.map +0 -1
  257. package/lib/typescript/commonjs/src/acmo/modules/dashboard/components/premium_option_3.d.ts +0 -9
  258. package/lib/typescript/commonjs/src/acmo/modules/dashboard/components/premium_option_3.d.ts.map +0 -1
  259. package/lib/typescript/commonjs/src/acmo/modules/dashboard/components/premium_option_4.d.ts +0 -9
  260. package/lib/typescript/commonjs/src/acmo/modules/dashboard/components/premium_option_4.d.ts.map +0 -1
  261. package/lib/typescript/commonjs/src/i18n.d.ts +0 -3
  262. package/lib/typescript/commonjs/src/i18n.d.ts.map +0 -1
  263. package/lib/typescript/module/src/acmo/core/marquee.d.ts +0 -11
  264. package/lib/typescript/module/src/acmo/core/marquee.d.ts.map +0 -1
  265. package/lib/typescript/module/src/acmo/modules/dashboard/components/auto_scroller.d.ts +0 -10
  266. package/lib/typescript/module/src/acmo/modules/dashboard/components/auto_scroller.d.ts.map +0 -1
  267. package/lib/typescript/module/src/acmo/modules/dashboard/components/my_games_button.d.ts +0 -8
  268. package/lib/typescript/module/src/acmo/modules/dashboard/components/my_games_button.d.ts.map +0 -1
  269. package/lib/typescript/module/src/acmo/modules/dashboard/components/offer_info_section.d.ts +0 -11
  270. package/lib/typescript/module/src/acmo/modules/dashboard/components/offer_info_section.d.ts.map +0 -1
  271. package/lib/typescript/module/src/acmo/modules/dashboard/components/premium_option_1.d.ts +0 -9
  272. package/lib/typescript/module/src/acmo/modules/dashboard/components/premium_option_1.d.ts.map +0 -1
  273. package/lib/typescript/module/src/acmo/modules/dashboard/components/premium_option_2.d.ts +0 -9
  274. package/lib/typescript/module/src/acmo/modules/dashboard/components/premium_option_2.d.ts.map +0 -1
  275. package/lib/typescript/module/src/acmo/modules/dashboard/components/premium_option_3.d.ts +0 -9
  276. package/lib/typescript/module/src/acmo/modules/dashboard/components/premium_option_3.d.ts.map +0 -1
  277. package/lib/typescript/module/src/acmo/modules/dashboard/components/premium_option_4.d.ts +0 -9
  278. package/lib/typescript/module/src/acmo/modules/dashboard/components/premium_option_4.d.ts.map +0 -1
  279. package/lib/typescript/module/src/i18n.d.ts +0 -3
  280. package/lib/typescript/module/src/i18n.d.ts.map +0 -1
  281. package/src/acmo/core/marquee.tsx +0 -62
  282. package/src/acmo/modules/dashboard/components/auto_scroller.tsx +0 -85
  283. package/src/acmo/modules/dashboard/components/my_games_button.tsx +0 -40
  284. package/src/acmo/modules/dashboard/components/offer_info_section.tsx +0 -139
  285. package/src/acmo/modules/dashboard/components/premium_option_1.tsx +0 -163
  286. package/src/acmo/modules/dashboard/components/premium_option_2.tsx +0 -100
  287. package/src/acmo/modules/dashboard/components/premium_option_3.tsx +0 -42
  288. package/src/acmo/modules/dashboard/components/premium_option_4.tsx +0 -185
  289. package/src/i18n.ts +0 -115
@@ -0,0 +1,195 @@
1
+ import UIKit
2
+ @preconcurrency import WebKit
3
+
4
+ class AcmoWebViewController: UIViewController, WKNavigationDelegate, WKScriptMessageHandler, WKUIDelegate {
5
+
6
+ var webView: WKWebView!
7
+ var initialURL: URL
8
+ private var hasLoadedWithSkipParameter = false
9
+
10
+ private let internalDomains: [String] = ["sdk.tyrads.com", "acmo.in"]
11
+
12
+ private func log(_ message: String) {
13
+ NSLog("AcmoWebViewController: \(message)")
14
+ }
15
+
16
+ init(url: URL) {
17
+ self.initialURL = url
18
+ super.init(nibName: nil, bundle: nil)
19
+ }
20
+
21
+ required init?(coder: NSCoder) {
22
+ fatalError("init(coder:) has not been implemented")
23
+ }
24
+
25
+ override func viewDidLoad() {
26
+ super.viewDidLoad()
27
+ log("viewDidLoad called")
28
+
29
+ let config = WKWebViewConfiguration()
30
+ let userContentController = WKUserContentController()
31
+
32
+ userContentController.add(self, name: "clickHandler")
33
+ config.userContentController = userContentController
34
+
35
+ webView = WKWebView(frame: self.view.bounds, configuration: config)
36
+ webView.navigationDelegate = self
37
+ webView.uiDelegate = self
38
+ self.view.addSubview(webView)
39
+
40
+ webView.translatesAutoresizingMaskIntoConstraints = false
41
+ NSLayoutConstraint.activate([
42
+ webView.topAnchor.constraint(equalTo: self.view.topAnchor),
43
+ webView.bottomAnchor.constraint(equalTo: self.view.bottomAnchor),
44
+ webView.leadingAnchor.constraint(equalTo: self.view.leadingAnchor),
45
+ webView.trailingAnchor.constraint(equalTo: self.view.trailingAnchor)
46
+ ])
47
+
48
+ if #available(iOS 16.4, *) {
49
+ webView.isInspectable = true
50
+ }
51
+
52
+ // webView.load(URLRequest(url: initialURL))
53
+ loadURL()
54
+ log("WebView loaded URL: \(initialURL.absoluteString)")
55
+ }
56
+ private func loadURL() {
57
+ var components = URLComponents(url: initialURL, resolvingAgainstBaseURL: false)
58
+ let skipUserUpdate = Tyrads.instance.getSkipUserUpdate()
59
+ let skipValue = skipUserUpdate ? "true" : "false"
60
+
61
+ components?.queryItems?.removeAll { $0.name == "skipUserInfo" }
62
+ components?.queryItems?.append(URLQueryItem(name: "skipUserInfo", value: skipValue))
63
+
64
+ if let updatedURL = components?.url {
65
+ log("Loading URL with skipUserInfo=\(skipValue): \(updatedURL.absoluteString)")
66
+ let request = URLRequest(url: updatedURL)
67
+ webView.load(request)
68
+ hasLoadedWithSkipParameter = true
69
+ } else {
70
+ log("Failed to create updated URL, loading original")
71
+ webView.load(URLRequest(url: initialURL))
72
+ }
73
+ }
74
+
75
+ public func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {
76
+ guard message.name == "clickHandler",
77
+ let messageDict = message.body as? [String: Any] else {
78
+ log("Received unknown message or invalid format.")
79
+ return
80
+ }
81
+
82
+ log("Message data from webview: \(messageDict)")
83
+
84
+ if let action = messageDict["action"] as? String {
85
+ switch action {
86
+ case "closeWebView":
87
+ log("Action: closeWebView received. Dismissing view controller.")
88
+ DispatchQueue.main.async {
89
+ self.dismiss(animated: true) {
90
+ self.log("ViewController dismissed successfully.")
91
+ }
92
+ }
93
+
94
+ case "changeLanguage":
95
+ if let langCode = messageDict["value"] as? String {
96
+ log("Action: changeLanguage received. Language Code: \(langCode)")
97
+ Task{
98
+ await Tyrads.instance.changeLanguage(langCode)
99
+ }
100
+ // let value = UserDefaults.standard.string(forKey: "locale")
101
+ }
102
+
103
+ default:
104
+ log("Unknown command: \(action)")
105
+ }
106
+ }
107
+ }
108
+
109
+ public func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
110
+ if let url = webView.url {
111
+ print("Page loaded successfully. Final URL: \(url.absoluteString)")
112
+ }
113
+
114
+ let js = """
115
+ window.addEventListener('message', (event) => {
116
+ try {
117
+ // Safely parse JSON if event.data is a string, otherwise use directly
118
+ const message = typeof event.data === 'string'
119
+ ? JSON.parse(event.data)
120
+ : event.data;
121
+ if (message) {
122
+ // Post the message to the native side using the registered handler name
123
+ window.webkit.messageHandlers.clickHandler.postMessage(message);
124
+ }
125
+ } catch (error) {
126
+ console.error('Error handling message from WebView:', error);
127
+ }
128
+ });
129
+ """
130
+
131
+ webView.evaluateJavaScript(js) { _, error in
132
+ if let error = error {
133
+ self.log("JavaScript injection failed: \(error.localizedDescription)")
134
+ } else {
135
+ self.log("JavaScript listener injected successfully.")
136
+ }
137
+ }
138
+ }
139
+
140
+ func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
141
+
142
+ guard let url = navigationAction.request.url, let host = url.host else {
143
+ decisionHandler(.cancel)
144
+ return
145
+ }
146
+
147
+ if host == "about:blank" {
148
+ decisionHandler(.allow)
149
+ return
150
+ }
151
+
152
+ let isInternalDomain = internalDomains.contains(where: { host.hasSuffix($0) })
153
+
154
+ if host != webView.url?.host && !isInternalDomain {
155
+ log("Intercepted external URL via navigation action: \(url.absoluteString). Opening externally.")
156
+ UIApplication.shared.open(url, options: [:], completionHandler: nil)
157
+ decisionHandler(.cancel)
158
+ return
159
+ }
160
+
161
+ log("Allowed navigation to: \(url.absoluteString)")
162
+ decisionHandler(.allow)
163
+ }
164
+
165
+ func webView(_ webView: WKWebView, createWebViewWith configuration: WKWebViewConfiguration, for navigationAction: WKNavigationAction, windowFeatures: WKWindowFeatures) -> WKWebView? {
166
+
167
+ guard let url = navigationAction.request.url else {
168
+ return nil
169
+ }
170
+
171
+ let isInternalDomain = internalDomains.contains(where: { url.host?.hasSuffix($0) ?? false })
172
+
173
+ if !isInternalDomain {
174
+ log("Intercepted new window via UI delegate: \(url.absoluteString). Opening externally.")
175
+ UIApplication.shared.open(url, options: [:], completionHandler: nil)
176
+ return nil
177
+ }
178
+
179
+ log("Allowed new window for internal domain: \(url.absoluteString)")
180
+ return nil
181
+ }
182
+
183
+ public func webView(_ webView: WKWebView, didFail navigation: WKNavigation!, withError error: Error) {
184
+ log("WebView navigation failed with error: \(error.localizedDescription)")
185
+ }
186
+
187
+ public func webView(_ webView: WKWebView, didFailProvisionalNavigation navigation: WKNavigation!, withError error: Error) {
188
+ log("WebView provisional navigation failed with error: \(error.localizedDescription)")
189
+ }
190
+
191
+ deinit {
192
+ webView.configuration.userContentController.removeScriptMessageHandler(forName: "clickHandler")
193
+ log("AcmoWebViewController deinitialized. Message handler removed.")
194
+ }
195
+ }
@@ -0,0 +1,29 @@
1
+ //
2
+ // AcmoKeyNames.swift
3
+ // Pods
4
+ //
5
+ // Created by Basharat Mehdi on 30/09/25.
6
+ //
7
+
8
+ struct AcmoKeyNames {
9
+ static let PREFIX = "acmo_tyrads_sdk_"
10
+
11
+ static let INTRODUCTION_COMPLETE = "\(PREFIX)introduction_complete"
12
+ static let LOGGED_IN = "\(PREFIX)logged_in"
13
+ static let USER_ID = "\(PREFIX)user_id"
14
+ static let API_KEY = "\(PREFIX)api_key"
15
+ static let API_SECRET = "\(PREFIX)api_secret"
16
+ static let ENCRYPTION_KEY = "\(PREFIX)encryption_key"
17
+ static let PLAY_INTEGRITY_TOKEN = "\(PREFIX)play_integrity_token"
18
+ static let USERNAME = "\(PREFIX)username"
19
+ static let FCM_TOKEN = "\(PREFIX)fcm_token"
20
+ static let USER_DATA = "\(PREFIX)user_data"
21
+ static let ADVERTISING_ID = "\(PREFIX)advertising_id"
22
+ static let TRACKED_CAMPAIGNS_FOR_USER_ID = "\(PREFIX)tracked_campaigns_for_user_id_"
23
+ static let PLAY_PER_MINUTE_PACKAGES = "\(PREFIX)play_per_minute_packages"
24
+ static let PRIVACY_ACCEPTED_FOR_USER_ID = "\(PREFIX)privacy_accepted_for_user_id_"
25
+ static let SKIP_FOR_USER_ID = "\(PREFIX)skip_for_user_id_"
26
+ static let CUSTOM_AD_ID = "\(PREFIX)custom_ad_id"
27
+ static let LANGUAGE = "\(PREFIX)language"
28
+ static let TOKEN = "\(PREFIX)token"
29
+ }
@@ -0,0 +1,55 @@
1
+ //
2
+ // ColorExtension.swift
3
+ // Pods
4
+ //
5
+ // Created by Basharat Mehdi on 01/10/25.
6
+ //
7
+ import SwiftUI
8
+ import UIKit
9
+
10
+ extension Color {
11
+ init(hex: String) {
12
+ let hex = hex.trimmingCharacters(in: CharacterSet.alphanumerics.inverted)
13
+ var int: UInt64 = 0
14
+ Scanner(string: hex).scanHexInt64(&int)
15
+ let r, g, b: UInt64
16
+ switch hex.count {
17
+ case 3:
18
+ (r, g, b) = ((int >> 8) * 17, ((int >> 4) & 0xF) * 17, (int & 0xF) * 17)
19
+ case 6:
20
+ (r, g, b) = (int >> 16, (int >> 8) & 0xFF, int & 0xFF)
21
+ default:
22
+ (r, g, b) = (0, 0, 0)
23
+ }
24
+ self.init(
25
+ .sRGB,
26
+ red: Double(r) / 255,
27
+ green: Double(g) / 255,
28
+ blue: Double(b) / 255,
29
+ opacity: 1
30
+ )
31
+ }
32
+ }
33
+
34
+ extension UIColor {
35
+ convenience init(hex: String, alpha: CGFloat = 1.0) {
36
+ var hexSanitized = hex.trimmingCharacters(in: .whitespacesAndNewlines)
37
+ hexSanitized = hexSanitized.hasPrefix("#") ? String(hexSanitized.dropFirst()) : hexSanitized
38
+
39
+ var rgb: UInt64 = 0
40
+ Scanner(string: hexSanitized).scanHexInt64(&rgb)
41
+
42
+ let length = hexSanitized.count
43
+ let r, g, b: CGFloat
44
+
45
+ if length == 6 {
46
+ r = CGFloat((rgb & 0xFF0000) >> 16) / 255.0
47
+ g = CGFloat((rgb & 0x00FF00) >> 8) / 255.0
48
+ b = CGFloat(rgb & 0x0000FF) / 255.0
49
+ } else {
50
+ r = 0; g = 0; b = 0
51
+ }
52
+
53
+ self.init(red: r, green: g, blue: b, alpha: alpha)
54
+ }
55
+ }
@@ -0,0 +1,175 @@
1
+ //
2
+ // LocalizationService.swift
3
+ // Pods
4
+ //
5
+ // Created by Basharat Mehdi on 02/10/25.
6
+ //
7
+
8
+ import Foundation
9
+
10
+ final class LocalizationService {
11
+
12
+ static let shared = LocalizationService()
13
+ private init() {}
14
+
15
+ private var translations: [String: Any] = [:]
16
+ private var supportedLocales: [String] = []
17
+
18
+ private let userDefaults = UserDefaults.standard
19
+ private let fallbackLocale = "en"
20
+
21
+ // MARK: - Public Interface
22
+ func initialize(locale: String) async {
23
+ await loadTranslations(locale: locale)
24
+ }
25
+
26
+ func changeLanguage(locale: String, force: Bool = false) async {
27
+ await loadTranslations(locale: locale, force: force)
28
+ }
29
+
30
+ func translate(_ key: String, args: [String: String]? = nil) -> String {
31
+ let keys = key.split(separator: ".").map { String($0) }
32
+ var current: Any? = translations
33
+
34
+ for k in keys {
35
+ if let dict = current as? [String: Any], let next = dict[k] {
36
+ current = next
37
+ } else {
38
+ return key
39
+ }
40
+ }
41
+
42
+ guard var result = current as? String else {
43
+ return key
44
+ }
45
+
46
+ if let args = args {
47
+ for (argKey, argValue) in args {
48
+ let regex = try? NSRegularExpression(pattern: "\\{\(argKey)\\}", options: .caseInsensitive)
49
+ if let regex = regex {
50
+ result = regex.stringByReplacingMatches(in: result, range: NSRange(result.startIndex..., in: result), withTemplate: argValue)
51
+ }
52
+ }
53
+ }
54
+
55
+ return result
56
+ }
57
+
58
+ // MARK: - Private Loading Methods
59
+ private func loadTranslations(locale: String, force: Bool = false) async {
60
+ let hasUpdate = await checkForUpdate(locale: locale, force: force)
61
+
62
+ if !hasUpdate {
63
+ if let cachedData = userDefaults.data(forKey: "translations_\(locale)"),
64
+ let json = try? JSONSerialization.jsonObject(with: cachedData, options: []) as? [String: Any] {
65
+ translations = json
66
+ return
67
+ }
68
+ }
69
+
70
+ await fetchTranslations(locale: locale, force: force)
71
+ }
72
+
73
+ private func fetchTranslations(locale: String, force: Bool) async {
74
+ var currentLocale = locale
75
+ if !supportedLocales.contains(currentLocale) {
76
+ currentLocale = fallbackLocale
77
+ }
78
+
79
+
80
+ let urlString = "\(AcmoConfig.BASE_URL)translations/\(currentLocale)?force=\(force)&format=nested"
81
+ guard let url = URL(string: urlString) else {
82
+ print("LocalizationService: Invalid URL for translations")
83
+ return
84
+ }
85
+
86
+ var request = URLRequest(url: url)
87
+ request.httpMethod = "GET"
88
+ request.setTyradsHeaders(with: Tyrads.instance)
89
+
90
+ do {
91
+ let (data, response) = try await URLSession.shared.data(for: request)
92
+
93
+ guard let httpResponse = response as? HTTPURLResponse, httpResponse.statusCode == 200 else {
94
+ print("LocalizationService: Failed to load translations: \((response as? HTTPURLResponse)?.statusCode ?? -1)")
95
+ return
96
+ }
97
+
98
+ if let jsonResponse = try JSONSerialization.jsonObject(with: data, options: []) as? [String: Any] {
99
+ translations = jsonResponse
100
+
101
+ userDefaults.set(data, forKey: "translations_\(currentLocale)")
102
+ } else {
103
+ print("LocalizationService: Failed to parse JSON response.")
104
+ }
105
+ } catch {
106
+ print("LocalizationService: Network error fetching translations: \(error)")
107
+ }
108
+ }
109
+
110
+ private func checkForUpdate(locale: String, force: Bool) async -> Bool {
111
+ let urlString = "\(AcmoConfig.BASE_URL)translations/version?force=\(force)"
112
+ guard let url = URL(string: urlString) else {
113
+ print("LocalizationService: Invalid URL for version check")
114
+ return false
115
+ }
116
+ var request = URLRequest(url: url)
117
+ request.httpMethod = "GET"
118
+ request.setTyradsHeaders(with: Tyrads.instance)
119
+
120
+ do {
121
+ let (data, response) = try await URLSession.shared.data(for: request)
122
+
123
+ guard (response as? HTTPURLResponse)?.statusCode == 200 else {
124
+ print("LocalizationService: Failed to get version check response.")
125
+ return false
126
+ }
127
+
128
+ struct VersionData: Decodable {
129
+ let code: String
130
+ let sha256: String
131
+ }
132
+ struct VersionResponse: Decodable {
133
+ let data: [VersionData]
134
+ }
135
+
136
+ let jsonResponse = try JSONDecoder().decode(VersionResponse.self, from: data)
137
+ let versionData = jsonResponse.data
138
+
139
+ supportedLocales = versionData.map { $0.code }
140
+
141
+ guard supportedLocales.contains(locale) else {
142
+ return false
143
+ }
144
+
145
+ guard let currentLocaleVersion = versionData.first(where: { $0.code == locale }) else {
146
+ return false
147
+ }
148
+
149
+ let currentSha256 = currentLocaleVersion.sha256
150
+ let cachedVersion = userDefaults.string(forKey: "cached_version_\(locale)")
151
+
152
+ if currentSha256 != cachedVersion {
153
+ userDefaults.set(currentSha256, forKey: "cached_version_\(locale)")
154
+ return true
155
+ }
156
+
157
+ } catch {
158
+ print("LocalizationService: Error checking for update: \(error)")
159
+ }
160
+
161
+ return false
162
+ }
163
+ }
164
+
165
+ extension URLRequest {
166
+ mutating func setTyradsHeaders(with sdk: Tyrads) {
167
+ self.setValue("application/json", forHTTPHeaderField: "Content-Type")
168
+
169
+ self.setValue(sdk.apiKey, forHTTPHeaderField: "X-API-Key")
170
+ self.setValue(sdk.apiSecret, forHTTPHeaderField: "X-API-Secret")
171
+
172
+ self.setValue(AcmoConfig.SDK_PLATFORM, forHTTPHeaderField: "X-SDK-Platform")
173
+ self.setValue(AcmoConfig.SDK_VERSION, forHTTPHeaderField: "X-SDK-Version")
174
+ }
175
+ }
@@ -0,0 +1,160 @@
1
+ //
2
+ // device_details.swift
3
+ // Pods
4
+ //
5
+ // Created by Basharat Mehdi on 01/08/25.
6
+ //
7
+ import UIKit
8
+ import Foundation
9
+
10
+ func getDeviceDetails() -> [String: Any] {
11
+ var fd = [String: Any]()
12
+
13
+ let device = UIDevice.current
14
+ let bundle = Bundle.main
15
+ let locale = Locale.current
16
+
17
+ // Device basic info
18
+ fd["deviceId"] = device.identifierForVendor?.uuidString ?? "Unknown"
19
+ fd["device"] = device.model.lowercased().contains("ipad") ? "iPad" : "iPhone"
20
+ fd["deviceName"] = device.name
21
+ fd["brand"] = "Apple"
22
+ fd["model"] = device.model
23
+ fd["baseOs"] = device.systemName
24
+ fd["releaseVersion"] = device.systemVersion
25
+ fd["modelName"] = getModelName()
26
+
27
+ fd["product"] = "Darwin"
28
+ fd["platform"] = "iOS"
29
+ fd["apiVersion"] = AcmoConfig.API_VERSION
30
+ fd["sdkVersion"] = AcmoConfig.SDK_VERSION
31
+ fd["sdkPlatform"] = AcmoConfig.SDK_PLATFORM
32
+
33
+ // App info
34
+ fd["version"] = bundle.infoDictionary?["CFBundleShortVersionString"] as? String ?? "Unknown"
35
+ fd["build"] = bundle.infoDictionary?["CFBundleVersion"] as? String ?? "Unknown"
36
+ fd["package"] = bundle.bundleIdentifier ?? "Unknown"
37
+ fd["installerStore"] = "App Store"
38
+
39
+ fd["osLang"] = locale.languageCode ?? "en"
40
+
41
+ // security and virtual check
42
+ fd["rooted"] = isJailBroken()
43
+ fd["virtual"] = isRunningOnSimulator()
44
+
45
+ return fd
46
+ }
47
+
48
+ func isRunningOnSimulator() -> Bool {
49
+ return ProcessInfo().environment["SIMULATOR_DEVICE_NAME"] != nil
50
+ }
51
+
52
+ func isJailBroken() -> Bool {
53
+ #if targetEnvironment(simulator)
54
+ return false
55
+ #else
56
+ let paths = [
57
+ "/Applications/Cydia.app",
58
+ "/Library/MobileSubstrate/MobileSubstrate.dylib",
59
+ "/bin/bash",
60
+ "/usr/sbin/sshd",
61
+ "/etc/apt",
62
+ "/private/var/lib/apt/"
63
+ ]
64
+ for path in paths {
65
+ if FileManager.default.fileExists(atPath: path) {
66
+ return true
67
+ }
68
+ }
69
+ return false
70
+ #endif
71
+ }
72
+
73
+ func deviceIdentifier() -> String {
74
+ #if targetEnvironment(simulator)
75
+ if let simIdentifier = ProcessInfo().environment["SIMULATOR_MODEL_IDENTIFIER"] {
76
+ return simIdentifier
77
+ }
78
+ return "Simulator"
79
+ #else
80
+ var systemInfo = utsname()
81
+ uname(&systemInfo)
82
+ let machineMirror = Mirror(reflecting: systemInfo.machine)
83
+ let identifier = machineMirror.children.reduce("") { identifier, element in
84
+ guard let value = element.value as? Int8, value != 0 else { return identifier }
85
+ return identifier + String(UnicodeScalar(UInt8(value)))
86
+ }
87
+ return identifier
88
+ #endif
89
+ }
90
+
91
+
92
+ func getModelName() -> String {
93
+ let identifier = deviceIdentifier()
94
+
95
+ let iphoneModelMapping: [String: String] = [
96
+ "iPhone1,1": "iPhone",
97
+ "iPhone1,2": "iPhone 3G",
98
+ "iPhone2,1": "iPhone 3GS",
99
+ "iPhone3,1": "iPhone 4",
100
+ "iPhone3,2": "iPhone 4 GSM Rev A",
101
+ "iPhone3,3": "iPhone 4 CDMA",
102
+ "iPhone4,1": "iPhone 4S",
103
+ "iPhone5,1": "iPhone 5 (GSM)",
104
+ "iPhone5,2": "iPhone 5 (GSM+CDMA)",
105
+ "iPhone5,3": "iPhone 5C (GSM)",
106
+ "iPhone5,4": "iPhone 5C (Global)",
107
+ "iPhone6,1": "iPhone 5S (GSM)",
108
+ "iPhone6,2": "iPhone 5S (Global)",
109
+ "iPhone7,1": "iPhone 6 Plus",
110
+ "iPhone7,2": "iPhone 6",
111
+ "iPhone8,1": "iPhone 6s",
112
+ "iPhone8,2": "iPhone 6s Plus",
113
+ "iPhone8,4": "iPhone SE (1st Gen)",
114
+ "iPhone9,1": "iPhone 7",
115
+ "iPhone9,2": "iPhone 7 Plus",
116
+ "iPhone9,3": "iPhone 7",
117
+ "iPhone9,4": "iPhone 7 Plus",
118
+ "iPhone10,1": "iPhone 8",
119
+ "iPhone10,2": "iPhone 8 Plus",
120
+ "iPhone10,3": "iPhone X Global",
121
+ "iPhone10,4": "iPhone 8",
122
+ "iPhone10,5": "iPhone 8 Plus",
123
+ "iPhone10,6": "iPhone X GSM",
124
+ "iPhone11,2": "iPhone XS",
125
+ "iPhone11,4": "iPhone XS Max",
126
+ "iPhone11,6": "iPhone XS Max Global",
127
+ "iPhone11,8": "iPhone XR",
128
+ "iPhone12,1": "iPhone 11",
129
+ "iPhone12,3": "iPhone 11 Pro",
130
+ "iPhone12,5": "iPhone 11 Pro Max",
131
+ "iPhone12,8": "iPhone SE (2nd Gen)",
132
+ "iPhone13,1": "iPhone 12 Mini",
133
+ "iPhone13,2": "iPhone 12",
134
+ "iPhone13,3": "iPhone 12 Pro",
135
+ "iPhone13,4": "iPhone 12 Pro Max",
136
+ "iPhone14,2": "iPhone 13 Pro",
137
+ "iPhone14,3": "iPhone 13 Pro Max",
138
+ "iPhone14,4": "iPhone 13 Mini",
139
+ "iPhone14,5": "iPhone 13",
140
+ "iPhone14,6": "iPhone SE (3rd Gen)",
141
+ "iPhone14,7": "iPhone 14",
142
+ "iPhone14,8": "iPhone 14 Plus",
143
+ "iPhone15,2": "iPhone 14 Pro",
144
+ "iPhone15,3": "iPhone 14 Pro Max",
145
+ "iPhone15,4": "iPhone 15",
146
+ "iPhone15,5": "iPhone 15 Plus",
147
+ "iPhone16,1": "iPhone 15 Pro",
148
+ "iPhone16,2": "iPhone 15 Pro Max",
149
+ "iPhone17,1": "iPhone 16 Pro",
150
+ "iPhone17,2": "iPhone 16 Pro Max",
151
+ "iPhone17,3": "iPhone 16",
152
+ "iPhone17,4": "iPhone 16 Plus",
153
+ "iPhone17,5": "iPhone 16e",
154
+ "iPhone18,1": "iPhone 17 Pro",
155
+ "iPhone18,2": "iPhone 17 Pro Max",
156
+ "iPhone18,3": "iPhone 17",
157
+ "iPhone18,4": "iPhone Air"
158
+ ]
159
+ return iphoneModelMapping[identifier] ?? identifier
160
+ }