@oxyhq/services 5.10.16 → 5.11.2

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 (460) hide show
  1. package/README.md +78 -14
  2. package/lib/commonjs/assets/assets/icons/OxyServices.tsx +2 -2
  3. package/lib/commonjs/assets/assets/illustrations/HighFive.tsx +1 -1
  4. package/lib/commonjs/assets/icons/OxyServices.js +0 -2
  5. package/lib/commonjs/assets/icons/OxyServices.js.map +1 -1
  6. package/lib/commonjs/assets/illustrations/HighFive.js +0 -2
  7. package/lib/commonjs/assets/illustrations/HighFive.js.map +1 -1
  8. package/lib/commonjs/core/OxyServices.js +238 -25
  9. package/lib/commonjs/core/OxyServices.js.map +1 -1
  10. package/lib/commonjs/index.js +86 -0
  11. package/lib/commonjs/index.js.map +1 -1
  12. package/lib/commonjs/lib/sonner-safe.js +2 -0
  13. package/lib/commonjs/lib/sonner-safe.js.map +1 -1
  14. package/lib/commonjs/lib/sonner.js +2 -0
  15. package/lib/commonjs/lib/sonner.js.map +1 -1
  16. package/lib/commonjs/ui/components/Avatar.js +0 -2
  17. package/lib/commonjs/ui/components/Avatar.js.map +1 -1
  18. package/lib/commonjs/ui/components/FollowButton.js +4 -4
  19. package/lib/commonjs/ui/components/FollowButton.js.map +1 -1
  20. package/lib/commonjs/ui/components/FontLoader.js +3 -2
  21. package/lib/commonjs/ui/components/FontLoader.js.map +1 -1
  22. package/lib/commonjs/ui/components/GroupedItem.js +7 -4
  23. package/lib/commonjs/ui/components/GroupedItem.js.map +1 -1
  24. package/lib/commonjs/ui/components/GroupedSection.js +1 -1
  25. package/lib/commonjs/ui/components/GroupedSection.js.map +1 -1
  26. package/lib/commonjs/ui/components/Header.js +0 -1
  27. package/lib/commonjs/ui/components/Header.js.map +1 -1
  28. package/lib/commonjs/ui/components/OxyLogo.js +0 -2
  29. package/lib/commonjs/ui/components/OxyLogo.js.map +1 -1
  30. package/lib/commonjs/ui/components/OxyPayButton.js +4 -5
  31. package/lib/commonjs/ui/components/OxyPayButton.js.map +1 -1
  32. package/lib/commonjs/ui/components/OxyProvider.js +4 -3
  33. package/lib/commonjs/ui/components/OxyProvider.js.map +1 -1
  34. package/lib/commonjs/ui/components/OxySignInButton.js +0 -1
  35. package/lib/commonjs/ui/components/OxySignInButton.js.map +1 -1
  36. package/lib/commonjs/ui/components/ProfileCard.js +0 -1
  37. package/lib/commonjs/ui/components/ProfileCard.js.map +1 -1
  38. package/lib/commonjs/ui/components/QuickActions.js +0 -2
  39. package/lib/commonjs/ui/components/QuickActions.js.map +1 -1
  40. package/lib/commonjs/ui/components/Section.js +0 -1
  41. package/lib/commonjs/ui/components/Section.js.map +1 -1
  42. package/lib/commonjs/ui/components/SectionTitle.js +0 -2
  43. package/lib/commonjs/ui/components/SectionTitle.js.map +1 -1
  44. package/lib/commonjs/ui/components/icon/FAIRWalletIcon.js +0 -2
  45. package/lib/commonjs/ui/components/icon/FAIRWalletIcon.js.map +1 -1
  46. package/lib/commonjs/ui/components/icon/OxyIcon.js +0 -2
  47. package/lib/commonjs/ui/components/icon/OxyIcon.js.map +1 -1
  48. package/lib/commonjs/ui/components/internal/GroupedPillButtons.js +0 -2
  49. package/lib/commonjs/ui/components/internal/GroupedPillButtons.js.map +1 -1
  50. package/lib/commonjs/ui/components/internal/PinInput.js +4 -3
  51. package/lib/commonjs/ui/components/internal/PinInput.js.map +1 -1
  52. package/lib/commonjs/ui/components/internal/TextField.js +3 -3
  53. package/lib/commonjs/ui/components/internal/TextField.js.map +1 -1
  54. package/lib/commonjs/ui/context/OxyContext.js +3 -1
  55. package/lib/commonjs/ui/context/OxyContext.js.map +1 -1
  56. package/lib/commonjs/ui/hooks/useAssets.js +263 -0
  57. package/lib/commonjs/ui/hooks/useAssets.js.map +1 -0
  58. package/lib/commonjs/ui/navigation/OxyRouter.js +1 -2
  59. package/lib/commonjs/ui/navigation/OxyRouter.js.map +1 -1
  60. package/lib/commonjs/ui/screens/AccountCenterScreen.js +0 -2
  61. package/lib/commonjs/ui/screens/AccountCenterScreen.js.map +1 -1
  62. package/lib/commonjs/ui/screens/AccountManagementDemo.js +0 -1
  63. package/lib/commonjs/ui/screens/AccountManagementDemo.js.map +1 -1
  64. package/lib/commonjs/ui/screens/AccountSettingsScreen.js +2 -2
  65. package/lib/commonjs/ui/screens/AccountSettingsScreen.js.map +1 -1
  66. package/lib/commonjs/ui/screens/AccountSwitcherScreen.js +5 -6
  67. package/lib/commonjs/ui/screens/AccountSwitcherScreen.js.map +1 -1
  68. package/lib/commonjs/ui/screens/AppInfoScreen.js +1 -2
  69. package/lib/commonjs/ui/screens/AppInfoScreen.js.map +1 -1
  70. package/lib/commonjs/ui/screens/FileManagementScreen.js +631 -430
  71. package/lib/commonjs/ui/screens/FileManagementScreen.js.map +1 -1
  72. package/lib/commonjs/ui/screens/PaymentGatewayScreen.js +2 -2
  73. package/lib/commonjs/ui/screens/PaymentGatewayScreen.js.map +1 -1
  74. package/lib/commonjs/ui/screens/PremiumSubscriptionScreen.js +1 -2
  75. package/lib/commonjs/ui/screens/PremiumSubscriptionScreen.js.map +1 -1
  76. package/lib/commonjs/ui/screens/ProfileScreen.js +1 -2
  77. package/lib/commonjs/ui/screens/ProfileScreen.js.map +1 -1
  78. package/lib/commonjs/ui/screens/RecoverAccountScreen.js +1 -2
  79. package/lib/commonjs/ui/screens/RecoverAccountScreen.js.map +1 -1
  80. package/lib/commonjs/ui/screens/SessionManagementScreen.js +1 -2
  81. package/lib/commonjs/ui/screens/SessionManagementScreen.js.map +1 -1
  82. package/lib/commonjs/ui/screens/SignInScreen.js +1 -2
  83. package/lib/commonjs/ui/screens/SignInScreen.js.map +1 -1
  84. package/lib/commonjs/ui/screens/UserLinksScreen.js +0 -2
  85. package/lib/commonjs/ui/screens/UserLinksScreen.js.map +1 -1
  86. package/lib/commonjs/ui/screens/internal/SignInPasswordStep.js +1 -2
  87. package/lib/commonjs/ui/screens/internal/SignInPasswordStep.js.map +1 -1
  88. package/lib/commonjs/ui/screens/internal/SignInUsernameStep.js +1 -2
  89. package/lib/commonjs/ui/screens/internal/SignInUsernameStep.js.map +1 -1
  90. package/lib/commonjs/ui/screens/internal/SignUpIdentityStep.js +1 -2
  91. package/lib/commonjs/ui/screens/internal/SignUpIdentityStep.js.map +1 -1
  92. package/lib/commonjs/ui/screens/internal/SignUpSecurityStep.js +1 -2
  93. package/lib/commonjs/ui/screens/internal/SignUpSecurityStep.js.map +1 -1
  94. package/lib/commonjs/ui/screens/internal/SignUpSummaryStep.js +0 -1
  95. package/lib/commonjs/ui/screens/internal/SignUpSummaryStep.js.map +1 -1
  96. package/lib/commonjs/ui/screens/internal/SignUpWelcomeStep.js +0 -1
  97. package/lib/commonjs/ui/screens/internal/SignUpWelcomeStep.js.map +1 -1
  98. package/lib/commonjs/ui/screens/karma/KarmaAboutScreen.js +0 -2
  99. package/lib/commonjs/ui/screens/karma/KarmaAboutScreen.js.map +1 -1
  100. package/lib/commonjs/ui/screens/karma/KarmaCenterScreen.js +1 -2
  101. package/lib/commonjs/ui/screens/karma/KarmaCenterScreen.js.map +1 -1
  102. package/lib/commonjs/ui/screens/karma/KarmaLeaderboardScreen.js +1 -2
  103. package/lib/commonjs/ui/screens/karma/KarmaLeaderboardScreen.js.map +1 -1
  104. package/lib/commonjs/ui/screens/karma/KarmaRewardsScreen.js +0 -2
  105. package/lib/commonjs/ui/screens/karma/KarmaRewardsScreen.js.map +1 -1
  106. package/lib/commonjs/ui/screens/karma/KarmaRulesScreen.js +1 -2
  107. package/lib/commonjs/ui/screens/karma/KarmaRulesScreen.js.map +1 -1
  108. package/lib/commonjs/ui/stores/assetStore.js +225 -0
  109. package/lib/commonjs/ui/stores/assetStore.js.map +1 -0
  110. package/lib/commonjs/ui/stores/authStore.js +1 -1
  111. package/lib/commonjs/ui/stores/authStore.js.map +1 -1
  112. package/lib/commonjs/ui/stores/fileStore.js +153 -0
  113. package/lib/commonjs/ui/stores/fileStore.js.map +1 -0
  114. package/lib/commonjs/ui/stores/followStore.js +2 -2
  115. package/lib/commonjs/ui/stores/followStore.js.map +1 -1
  116. package/lib/commonjs/utils/asyncUtils.js +1 -1
  117. package/lib/commonjs/utils/asyncUtils.js.map +1 -1
  118. package/lib/commonjs/utils/errorUtils.js +19 -11
  119. package/lib/commonjs/utils/errorUtils.js.map +1 -1
  120. package/lib/commonjs/utils/hookUtils.js +1 -1
  121. package/lib/commonjs/utils/hookUtils.js.map +1 -1
  122. package/lib/commonjs/utils/loggerUtils.js.map +1 -1
  123. package/lib/commonjs/utils/validationUtils.js +2 -2
  124. package/lib/commonjs/utils/validationUtils.js.map +1 -1
  125. package/lib/module/assets/assets/icons/OxyServices.tsx +2 -2
  126. package/lib/module/assets/assets/illustrations/HighFive.tsx +1 -1
  127. package/lib/module/assets/icons/OxyServices.js +0 -1
  128. package/lib/module/assets/icons/OxyServices.js.map +1 -1
  129. package/lib/module/assets/illustrations/HighFive.js +0 -1
  130. package/lib/module/assets/illustrations/HighFive.js.map +1 -1
  131. package/lib/module/core/OxyServices.js +238 -25
  132. package/lib/module/core/OxyServices.js.map +1 -1
  133. package/lib/module/index.js +2 -0
  134. package/lib/module/index.js.map +1 -1
  135. package/lib/module/lib/sonner-safe.js +2 -0
  136. package/lib/module/lib/sonner-safe.js.map +1 -1
  137. package/lib/module/lib/sonner.js +3 -0
  138. package/lib/module/lib/sonner.js.map +1 -1
  139. package/lib/module/ui/components/Avatar.js +0 -1
  140. package/lib/module/ui/components/Avatar.js.map +1 -1
  141. package/lib/module/ui/components/FollowButton.js +4 -3
  142. package/lib/module/ui/components/FollowButton.js.map +1 -1
  143. package/lib/module/ui/components/FontLoader.js +3 -2
  144. package/lib/module/ui/components/FontLoader.js.map +1 -1
  145. package/lib/module/ui/components/GroupedItem.js +7 -3
  146. package/lib/module/ui/components/GroupedItem.js.map +1 -1
  147. package/lib/module/ui/components/GroupedSection.js +1 -1
  148. package/lib/module/ui/components/GroupedSection.js.map +1 -1
  149. package/lib/module/ui/components/Header.js +0 -1
  150. package/lib/module/ui/components/Header.js.map +1 -1
  151. package/lib/module/ui/components/OxyLogo.js +0 -1
  152. package/lib/module/ui/components/OxyLogo.js.map +1 -1
  153. package/lib/module/ui/components/OxyPayButton.js +4 -4
  154. package/lib/module/ui/components/OxyPayButton.js.map +1 -1
  155. package/lib/module/ui/components/OxyProvider.js +4 -2
  156. package/lib/module/ui/components/OxyProvider.js.map +1 -1
  157. package/lib/module/ui/components/OxySignInButton.js +0 -1
  158. package/lib/module/ui/components/OxySignInButton.js.map +1 -1
  159. package/lib/module/ui/components/ProfileCard.js +0 -1
  160. package/lib/module/ui/components/ProfileCard.js.map +1 -1
  161. package/lib/module/ui/components/QuickActions.js +0 -1
  162. package/lib/module/ui/components/QuickActions.js.map +1 -1
  163. package/lib/module/ui/components/Section.js +0 -1
  164. package/lib/module/ui/components/Section.js.map +1 -1
  165. package/lib/module/ui/components/SectionTitle.js +0 -1
  166. package/lib/module/ui/components/SectionTitle.js.map +1 -1
  167. package/lib/module/ui/components/icon/FAIRWalletIcon.js +0 -1
  168. package/lib/module/ui/components/icon/FAIRWalletIcon.js.map +1 -1
  169. package/lib/module/ui/components/icon/OxyIcon.js +0 -1
  170. package/lib/module/ui/components/icon/OxyIcon.js.map +1 -1
  171. package/lib/module/ui/components/internal/GroupedPillButtons.js +0 -1
  172. package/lib/module/ui/components/internal/GroupedPillButtons.js.map +1 -1
  173. package/lib/module/ui/components/internal/PinInput.js +4 -2
  174. package/lib/module/ui/components/internal/PinInput.js.map +1 -1
  175. package/lib/module/ui/components/internal/TextField.js +3 -3
  176. package/lib/module/ui/components/internal/TextField.js.map +1 -1
  177. package/lib/module/ui/context/OxyContext.js +3 -1
  178. package/lib/module/ui/context/OxyContext.js.map +1 -1
  179. package/lib/module/ui/hooks/useAssets.js +257 -0
  180. package/lib/module/ui/hooks/useAssets.js.map +1 -0
  181. package/lib/module/ui/navigation/OxyRouter.js +1 -1
  182. package/lib/module/ui/navigation/OxyRouter.js.map +1 -1
  183. package/lib/module/ui/screens/AccountCenterScreen.js +0 -1
  184. package/lib/module/ui/screens/AccountCenterScreen.js.map +1 -1
  185. package/lib/module/ui/screens/AccountManagementDemo.js +0 -1
  186. package/lib/module/ui/screens/AccountManagementDemo.js.map +1 -1
  187. package/lib/module/ui/screens/AccountSettingsScreen.js +2 -2
  188. package/lib/module/ui/screens/AccountSettingsScreen.js.map +1 -1
  189. package/lib/module/ui/screens/AccountSwitcherScreen.js +5 -5
  190. package/lib/module/ui/screens/AccountSwitcherScreen.js.map +1 -1
  191. package/lib/module/ui/screens/AppInfoScreen.js +1 -1
  192. package/lib/module/ui/screens/AppInfoScreen.js.map +1 -1
  193. package/lib/module/ui/screens/FileManagementScreen.js +633 -432
  194. package/lib/module/ui/screens/FileManagementScreen.js.map +1 -1
  195. package/lib/module/ui/screens/PaymentGatewayScreen.js +1 -1
  196. package/lib/module/ui/screens/PaymentGatewayScreen.js.map +1 -1
  197. package/lib/module/ui/screens/PremiumSubscriptionScreen.js +1 -1
  198. package/lib/module/ui/screens/PremiumSubscriptionScreen.js.map +1 -1
  199. package/lib/module/ui/screens/ProfileScreen.js +1 -1
  200. package/lib/module/ui/screens/ProfileScreen.js.map +1 -1
  201. package/lib/module/ui/screens/RecoverAccountScreen.js +1 -1
  202. package/lib/module/ui/screens/RecoverAccountScreen.js.map +1 -1
  203. package/lib/module/ui/screens/SessionManagementScreen.js +1 -1
  204. package/lib/module/ui/screens/SessionManagementScreen.js.map +1 -1
  205. package/lib/module/ui/screens/SignInScreen.js +1 -1
  206. package/lib/module/ui/screens/SignInScreen.js.map +1 -1
  207. package/lib/module/ui/screens/UserLinksScreen.js +0 -1
  208. package/lib/module/ui/screens/UserLinksScreen.js.map +1 -1
  209. package/lib/module/ui/screens/internal/SignInPasswordStep.js +1 -1
  210. package/lib/module/ui/screens/internal/SignInPasswordStep.js.map +1 -1
  211. package/lib/module/ui/screens/internal/SignInUsernameStep.js +1 -1
  212. package/lib/module/ui/screens/internal/SignInUsernameStep.js.map +1 -1
  213. package/lib/module/ui/screens/internal/SignUpIdentityStep.js +1 -1
  214. package/lib/module/ui/screens/internal/SignUpIdentityStep.js.map +1 -1
  215. package/lib/module/ui/screens/internal/SignUpSecurityStep.js +1 -1
  216. package/lib/module/ui/screens/internal/SignUpSecurityStep.js.map +1 -1
  217. package/lib/module/ui/screens/internal/SignUpSummaryStep.js +0 -1
  218. package/lib/module/ui/screens/internal/SignUpSummaryStep.js.map +1 -1
  219. package/lib/module/ui/screens/internal/SignUpWelcomeStep.js +0 -1
  220. package/lib/module/ui/screens/internal/SignUpWelcomeStep.js.map +1 -1
  221. package/lib/module/ui/screens/karma/KarmaAboutScreen.js +0 -1
  222. package/lib/module/ui/screens/karma/KarmaAboutScreen.js.map +1 -1
  223. package/lib/module/ui/screens/karma/KarmaCenterScreen.js +1 -1
  224. package/lib/module/ui/screens/karma/KarmaCenterScreen.js.map +1 -1
  225. package/lib/module/ui/screens/karma/KarmaLeaderboardScreen.js +1 -1
  226. package/lib/module/ui/screens/karma/KarmaLeaderboardScreen.js.map +1 -1
  227. package/lib/module/ui/screens/karma/KarmaRewardsScreen.js +0 -1
  228. package/lib/module/ui/screens/karma/KarmaRewardsScreen.js.map +1 -1
  229. package/lib/module/ui/screens/karma/KarmaRulesScreen.js +1 -1
  230. package/lib/module/ui/screens/karma/KarmaRulesScreen.js.map +1 -1
  231. package/lib/module/ui/stores/assetStore.js +212 -0
  232. package/lib/module/ui/stores/assetStore.js.map +1 -0
  233. package/lib/module/ui/stores/authStore.js +1 -1
  234. package/lib/module/ui/stores/authStore.js.map +1 -1
  235. package/lib/module/ui/stores/fileStore.js +145 -0
  236. package/lib/module/ui/stores/fileStore.js.map +1 -0
  237. package/lib/module/ui/stores/followStore.js +2 -2
  238. package/lib/module/ui/stores/followStore.js.map +1 -1
  239. package/lib/module/ui/styles/fonts.js.map +1 -1
  240. package/lib/module/ui/styles/theme.js.map +1 -1
  241. package/lib/module/utils/asyncUtils.js +1 -1
  242. package/lib/module/utils/asyncUtils.js.map +1 -1
  243. package/lib/module/utils/errorUtils.js +19 -11
  244. package/lib/module/utils/errorUtils.js.map +1 -1
  245. package/lib/module/utils/hookUtils.js +1 -1
  246. package/lib/module/utils/hookUtils.js.map +1 -1
  247. package/lib/module/utils/loggerUtils.js.map +1 -1
  248. package/lib/module/utils/validationUtils.js +2 -2
  249. package/lib/module/utils/validationUtils.js.map +1 -1
  250. package/lib/typescript/assets/icons/OxyServices.d.ts +2 -2
  251. package/lib/typescript/assets/icons/OxyServices.d.ts.map +1 -1
  252. package/lib/typescript/assets/illustrations/HighFive.d.ts +1 -1
  253. package/lib/typescript/assets/illustrations/HighFive.d.ts.map +1 -1
  254. package/lib/typescript/core/OxyServices.d.ts +68 -12
  255. package/lib/typescript/core/OxyServices.d.ts.map +1 -1
  256. package/lib/typescript/index.d.ts +3 -1
  257. package/lib/typescript/index.d.ts.map +1 -1
  258. package/lib/typescript/lib/sonner-safe.d.ts +2 -1
  259. package/lib/typescript/lib/sonner-safe.d.ts.map +1 -1
  260. package/lib/typescript/lib/sonner.d.ts +11 -3
  261. package/lib/typescript/lib/sonner.d.ts.map +1 -1
  262. package/lib/typescript/models/interfaces.d.ts +105 -6
  263. package/lib/typescript/models/interfaces.d.ts.map +1 -1
  264. package/lib/typescript/types/expo-vector-icons.d.ts +8 -1
  265. package/lib/typescript/types/express.d.ts +22 -3
  266. package/lib/typescript/ui/components/Avatar.d.ts +2 -2
  267. package/lib/typescript/ui/components/Avatar.d.ts.map +1 -1
  268. package/lib/typescript/ui/components/FollowButton.d.ts +2 -2
  269. package/lib/typescript/ui/components/FollowButton.d.ts.map +1 -1
  270. package/lib/typescript/ui/components/FontLoader.d.ts +1 -1
  271. package/lib/typescript/ui/components/FontLoader.d.ts.map +1 -1
  272. package/lib/typescript/ui/components/GroupedItem.d.ts +2 -1
  273. package/lib/typescript/ui/components/GroupedItem.d.ts.map +1 -1
  274. package/lib/typescript/ui/components/GroupedSection.d.ts +2 -1
  275. package/lib/typescript/ui/components/GroupedSection.d.ts.map +1 -1
  276. package/lib/typescript/ui/components/Header.d.ts +1 -1
  277. package/lib/typescript/ui/components/Header.d.ts.map +1 -1
  278. package/lib/typescript/ui/components/OxyLogo.d.ts +2 -2
  279. package/lib/typescript/ui/components/OxyLogo.d.ts.map +1 -1
  280. package/lib/typescript/ui/components/OxyPayButton.d.ts +2 -2
  281. package/lib/typescript/ui/components/OxyPayButton.d.ts.map +1 -1
  282. package/lib/typescript/ui/components/OxyProvider.d.ts +2 -2
  283. package/lib/typescript/ui/components/OxyProvider.d.ts.map +1 -1
  284. package/lib/typescript/ui/components/OxySignInButton.d.ts +2 -2
  285. package/lib/typescript/ui/components/OxySignInButton.d.ts.map +1 -1
  286. package/lib/typescript/ui/components/ProfileCard.d.ts +1 -1
  287. package/lib/typescript/ui/components/ProfileCard.d.ts.map +1 -1
  288. package/lib/typescript/ui/components/QuickActions.d.ts +1 -1
  289. package/lib/typescript/ui/components/QuickActions.d.ts.map +1 -1
  290. package/lib/typescript/ui/components/Section.d.ts +1 -1
  291. package/lib/typescript/ui/components/Section.d.ts.map +1 -1
  292. package/lib/typescript/ui/components/SectionTitle.d.ts +1 -1
  293. package/lib/typescript/ui/components/SectionTitle.d.ts.map +1 -1
  294. package/lib/typescript/ui/components/icon/FAIRWalletIcon.d.ts +1 -1
  295. package/lib/typescript/ui/components/icon/FAIRWalletIcon.d.ts.map +1 -1
  296. package/lib/typescript/ui/components/icon/OxyIcon.d.ts +1 -1
  297. package/lib/typescript/ui/components/icon/OxyIcon.d.ts.map +1 -1
  298. package/lib/typescript/ui/components/internal/GroupedPillButtons.d.ts +1 -1
  299. package/lib/typescript/ui/components/internal/GroupedPillButtons.d.ts.map +1 -1
  300. package/lib/typescript/ui/components/internal/PinInput.d.ts +1 -1
  301. package/lib/typescript/ui/components/internal/PinInput.d.ts.map +1 -1
  302. package/lib/typescript/ui/components/internal/TextField.d.ts +1 -1
  303. package/lib/typescript/ui/components/internal/TextField.d.ts.map +1 -1
  304. package/lib/typescript/ui/context/OxyContext.d.ts +8 -3
  305. package/lib/typescript/ui/context/OxyContext.d.ts.map +1 -1
  306. package/lib/typescript/ui/hooks/useAssets.d.ts +35 -0
  307. package/lib/typescript/ui/hooks/useAssets.d.ts.map +1 -0
  308. package/lib/typescript/ui/navigation/OxyRouter.d.ts +2 -2
  309. package/lib/typescript/ui/navigation/OxyRouter.d.ts.map +1 -1
  310. package/lib/typescript/ui/navigation/types.d.ts +7 -7
  311. package/lib/typescript/ui/navigation/types.d.ts.map +1 -1
  312. package/lib/typescript/ui/screens/AccountCenterScreen.d.ts +2 -2
  313. package/lib/typescript/ui/screens/AccountCenterScreen.d.ts.map +1 -1
  314. package/lib/typescript/ui/screens/AccountManagementDemo.d.ts +1 -1
  315. package/lib/typescript/ui/screens/AccountManagementDemo.d.ts.map +1 -1
  316. package/lib/typescript/ui/screens/AccountOverviewScreen.d.ts +1 -1
  317. package/lib/typescript/ui/screens/AccountOverviewScreen.d.ts.map +1 -1
  318. package/lib/typescript/ui/screens/AccountSettingsScreen.d.ts +1 -1
  319. package/lib/typescript/ui/screens/AccountSettingsScreen.d.ts.map +1 -1
  320. package/lib/typescript/ui/screens/AccountSwitcherScreen.d.ts +2 -2
  321. package/lib/typescript/ui/screens/AccountSwitcherScreen.d.ts.map +1 -1
  322. package/lib/typescript/ui/screens/AppInfoScreen.d.ts +2 -2
  323. package/lib/typescript/ui/screens/AppInfoScreen.d.ts.map +1 -1
  324. package/lib/typescript/ui/screens/FeedbackScreen.d.ts +1 -1
  325. package/lib/typescript/ui/screens/FeedbackScreen.d.ts.map +1 -1
  326. package/lib/typescript/ui/screens/FileManagementScreen.d.ts +1 -1
  327. package/lib/typescript/ui/screens/FileManagementScreen.d.ts.map +1 -1
  328. package/lib/typescript/ui/screens/PaymentGatewayScreen.d.ts +2 -2
  329. package/lib/typescript/ui/screens/PaymentGatewayScreen.d.ts.map +1 -1
  330. package/lib/typescript/ui/screens/PremiumSubscriptionScreen.d.ts +2 -2
  331. package/lib/typescript/ui/screens/PremiumSubscriptionScreen.d.ts.map +1 -1
  332. package/lib/typescript/ui/screens/ProfileScreen.d.ts +2 -2
  333. package/lib/typescript/ui/screens/ProfileScreen.d.ts.map +1 -1
  334. package/lib/typescript/ui/screens/RecoverAccountScreen.d.ts +1 -1
  335. package/lib/typescript/ui/screens/RecoverAccountScreen.d.ts.map +1 -1
  336. package/lib/typescript/ui/screens/SessionManagementScreen.d.ts +2 -2
  337. package/lib/typescript/ui/screens/SessionManagementScreen.d.ts.map +1 -1
  338. package/lib/typescript/ui/screens/SignInScreen.d.ts +2 -2
  339. package/lib/typescript/ui/screens/SignInScreen.d.ts.map +1 -1
  340. package/lib/typescript/ui/screens/SignUpScreen.d.ts +1 -1
  341. package/lib/typescript/ui/screens/SignUpScreen.d.ts.map +1 -1
  342. package/lib/typescript/ui/screens/UserLinksScreen.d.ts +2 -2
  343. package/lib/typescript/ui/screens/UserLinksScreen.d.ts.map +1 -1
  344. package/lib/typescript/ui/screens/internal/SignInPasswordStep.d.ts +1 -1
  345. package/lib/typescript/ui/screens/internal/SignInPasswordStep.d.ts.map +1 -1
  346. package/lib/typescript/ui/screens/internal/SignInUsernameStep.d.ts +1 -1
  347. package/lib/typescript/ui/screens/internal/SignInUsernameStep.d.ts.map +1 -1
  348. package/lib/typescript/ui/screens/internal/SignUpIdentityStep.d.ts +1 -1
  349. package/lib/typescript/ui/screens/internal/SignUpIdentityStep.d.ts.map +1 -1
  350. package/lib/typescript/ui/screens/internal/SignUpSecurityStep.d.ts +1 -1
  351. package/lib/typescript/ui/screens/internal/SignUpSecurityStep.d.ts.map +1 -1
  352. package/lib/typescript/ui/screens/internal/SignUpSummaryStep.d.ts +1 -1
  353. package/lib/typescript/ui/screens/internal/SignUpSummaryStep.d.ts.map +1 -1
  354. package/lib/typescript/ui/screens/internal/SignUpWelcomeStep.d.ts +1 -1
  355. package/lib/typescript/ui/screens/internal/SignUpWelcomeStep.d.ts.map +1 -1
  356. package/lib/typescript/ui/screens/karma/KarmaAboutScreen.d.ts +2 -2
  357. package/lib/typescript/ui/screens/karma/KarmaAboutScreen.d.ts.map +1 -1
  358. package/lib/typescript/ui/screens/karma/KarmaCenterScreen.d.ts +2 -2
  359. package/lib/typescript/ui/screens/karma/KarmaCenterScreen.d.ts.map +1 -1
  360. package/lib/typescript/ui/screens/karma/KarmaFAQScreen.d.ts +1 -1
  361. package/lib/typescript/ui/screens/karma/KarmaFAQScreen.d.ts.map +1 -1
  362. package/lib/typescript/ui/screens/karma/KarmaLeaderboardScreen.d.ts +2 -2
  363. package/lib/typescript/ui/screens/karma/KarmaLeaderboardScreen.d.ts.map +1 -1
  364. package/lib/typescript/ui/screens/karma/KarmaRewardsScreen.d.ts +2 -2
  365. package/lib/typescript/ui/screens/karma/KarmaRewardsScreen.d.ts.map +1 -1
  366. package/lib/typescript/ui/screens/karma/KarmaRulesScreen.d.ts +2 -2
  367. package/lib/typescript/ui/screens/karma/KarmaRulesScreen.d.ts.map +1 -1
  368. package/lib/typescript/ui/stores/assetStore.d.ts +54 -0
  369. package/lib/typescript/ui/stores/assetStore.d.ts.map +1 -0
  370. package/lib/typescript/ui/stores/fileStore.d.ts +31 -0
  371. package/lib/typescript/ui/stores/fileStore.d.ts.map +1 -0
  372. package/lib/typescript/ui/stores/followStore.d.ts +1 -1
  373. package/lib/typescript/ui/stores/followStore.d.ts.map +1 -1
  374. package/lib/typescript/ui/styles/fonts.d.ts +1 -1
  375. package/lib/typescript/ui/styles/fonts.d.ts.map +1 -1
  376. package/lib/typescript/ui/styles/theme.d.ts +1 -1
  377. package/lib/typescript/ui/styles/theme.d.ts.map +1 -1
  378. package/lib/typescript/utils/asyncUtils.d.ts.map +1 -1
  379. package/lib/typescript/utils/errorUtils.d.ts +5 -5
  380. package/lib/typescript/utils/errorUtils.d.ts.map +1 -1
  381. package/lib/typescript/utils/hookUtils.d.ts +4 -4
  382. package/lib/typescript/utils/hookUtils.d.ts.map +1 -1
  383. package/lib/typescript/utils/loggerUtils.d.ts +18 -18
  384. package/lib/typescript/utils/loggerUtils.d.ts.map +1 -1
  385. package/lib/typescript/utils/validationUtils.d.ts +6 -6
  386. package/lib/typescript/utils/validationUtils.d.ts.map +1 -1
  387. package/package.json +149 -143
  388. package/src/assets/icons/OxyServices.tsx +2 -2
  389. package/src/assets/illustrations/HighFive.tsx +1 -1
  390. package/src/core/OxyServices.ts +264 -40
  391. package/src/core/__tests__/OxyServices.test.ts +180 -0
  392. package/src/index.ts +15 -1
  393. package/src/lib/sonner-safe.ts +4 -1
  394. package/src/lib/sonner.ts +19 -2
  395. package/src/models/interfaces.ts +117 -6
  396. package/src/types/expo-vector-icons.d.ts +8 -1
  397. package/src/types/express.d.ts +22 -3
  398. package/src/ui/components/Avatar.tsx +2 -2
  399. package/src/ui/components/FollowButton.tsx +10 -8
  400. package/src/ui/components/FontLoader.tsx +5 -3
  401. package/src/ui/components/GroupedItem.tsx +12 -2
  402. package/src/ui/components/GroupedSection.tsx +3 -1
  403. package/src/ui/components/Header.tsx +1 -1
  404. package/src/ui/components/OxyLogo.tsx +2 -2
  405. package/src/ui/components/OxyPayButton.tsx +6 -5
  406. package/src/ui/components/OxyProvider.tsx +7 -4
  407. package/src/ui/components/OxySignInButton.tsx +2 -2
  408. package/src/ui/components/ProfileCard.tsx +1 -1
  409. package/src/ui/components/QuickActions.tsx +1 -1
  410. package/src/ui/components/Section.tsx +1 -1
  411. package/src/ui/components/SectionTitle.tsx +1 -1
  412. package/src/ui/components/icon/FAIRWalletIcon.tsx +1 -1
  413. package/src/ui/components/icon/OxyIcon.tsx +1 -1
  414. package/src/ui/components/internal/GroupedPillButtons.tsx +1 -1
  415. package/src/ui/components/internal/PinInput.tsx +3 -2
  416. package/src/ui/components/internal/TextField.tsx +9 -11
  417. package/src/ui/context/OxyContext.tsx +11 -3
  418. package/src/ui/hooks/useAssets.ts +306 -0
  419. package/src/ui/navigation/OxyRouter.tsx +3 -2
  420. package/src/ui/navigation/types.ts +8 -8
  421. package/src/ui/screens/AccountCenterScreen.tsx +2 -2
  422. package/src/ui/screens/AccountManagementDemo.tsx +1 -1
  423. package/src/ui/screens/AccountOverviewScreen.tsx +1 -1
  424. package/src/ui/screens/AccountSettingsScreen.tsx +3 -3
  425. package/src/ui/screens/AccountSwitcherScreen.tsx +9 -8
  426. package/src/ui/screens/AppInfoScreen.tsx +3 -2
  427. package/src/ui/screens/FeedbackScreen.tsx +1 -1
  428. package/src/ui/screens/FileManagementScreen.tsx +619 -494
  429. package/src/ui/screens/PaymentGatewayScreen.tsx +3 -2
  430. package/src/ui/screens/PremiumSubscriptionScreen.tsx +3 -2
  431. package/src/ui/screens/ProfileScreen.tsx +3 -2
  432. package/src/ui/screens/RecoverAccountScreen.tsx +3 -2
  433. package/src/ui/screens/SessionManagementScreen.tsx +4 -3
  434. package/src/ui/screens/SignInScreen.tsx +3 -2
  435. package/src/ui/screens/SignUpScreen.tsx +1 -1
  436. package/src/ui/screens/UserLinksScreen.tsx +2 -2
  437. package/src/ui/screens/internal/SignInPasswordStep.tsx +3 -2
  438. package/src/ui/screens/internal/SignInUsernameStep.tsx +3 -2
  439. package/src/ui/screens/internal/SignUpIdentityStep.tsx +3 -2
  440. package/src/ui/screens/internal/SignUpSecurityStep.tsx +3 -2
  441. package/src/ui/screens/internal/SignUpSummaryStep.tsx +1 -1
  442. package/src/ui/screens/internal/SignUpWelcomeStep.tsx +1 -1
  443. package/src/ui/screens/karma/KarmaAboutScreen.tsx +2 -2
  444. package/src/ui/screens/karma/KarmaCenterScreen.tsx +3 -2
  445. package/src/ui/screens/karma/KarmaFAQScreen.tsx +1 -1
  446. package/src/ui/screens/karma/KarmaLeaderboardScreen.tsx +3 -2
  447. package/src/ui/screens/karma/KarmaRewardsScreen.tsx +2 -2
  448. package/src/ui/screens/karma/KarmaRulesScreen.tsx +3 -2
  449. package/src/ui/stores/assetStore.ts +281 -0
  450. package/src/ui/stores/authStore.ts +1 -1
  451. package/src/ui/stores/fileStore.ts +118 -0
  452. package/src/ui/stores/followStore.ts +4 -4
  453. package/src/ui/styles/fonts.ts +1 -1
  454. package/src/ui/styles/theme.ts +1 -1
  455. package/src/utils/__tests__/validationUtils.test.ts +236 -0
  456. package/src/utils/asyncUtils.ts +4 -4
  457. package/src/utils/errorUtils.ts +35 -23
  458. package/src/utils/hookUtils.ts +7 -7
  459. package/src/utils/loggerUtils.ts +18 -18
  460. package/src/utils/validationUtils.ts +8 -8
@@ -9,13 +9,13 @@ export interface User {
9
9
  avatar?: {
10
10
  id?: string;
11
11
  url?: string;
12
- [key: string]: any;
12
+ [key: string]: unknown;
13
13
  };
14
14
  name?: {
15
15
  first?: string;
16
16
  last?: string;
17
17
  full?: string; // virtual, not stored in DB, returned by API
18
- [key: string]: any;
18
+ [key: string]: unknown;
19
19
  };
20
20
  bio?: string;
21
21
  karma?: number;
@@ -29,7 +29,16 @@ export interface User {
29
29
  image?: string;
30
30
  link: string;
31
31
  }>;
32
- [key: string]: any;
32
+ // Social counts - can be returned by API in different formats
33
+ _count?: {
34
+ followers?: number;
35
+ following?: number;
36
+ };
37
+ stats?: {
38
+ followers?: number;
39
+ following?: number;
40
+ };
41
+ [key: string]: unknown;
33
42
  }
34
43
 
35
44
  export interface LoginResponse {
@@ -111,7 +120,7 @@ export interface ApiError {
111
120
  message: string;
112
121
  code: string;
113
122
  status: number;
114
- details?: any;
123
+ details?: Record<string, unknown>;
115
124
  }
116
125
 
117
126
  export interface PaymentMethod {
@@ -163,8 +172,16 @@ export interface FileMetadata {
163
172
  description?: string;
164
173
  title?: string;
165
174
  tags?: string[];
166
- [key: string]: any;
175
+ [key: string]: unknown;
167
176
  };
177
+ variants?: Array<{
178
+ type: string; // e.g. 'thumb', 'poster'
179
+ key: string; // storage key/path
180
+ width?: number;
181
+ height?: number;
182
+ readyAt?: string;
183
+ metadata?: Record<string, unknown>;
184
+ }>;
168
185
  }
169
186
 
170
187
  export interface FileUploadResponse {
@@ -183,7 +200,7 @@ export interface FileUpdateRequest {
183
200
  description?: string;
184
201
  title?: string;
185
202
  tags?: string[];
186
- [key: string]: any;
203
+ [key: string]: unknown;
187
204
  };
188
205
  }
189
206
 
@@ -193,6 +210,100 @@ export interface FileDeleteResponse {
193
210
  fileId: string;
194
211
  }
195
212
 
213
+ /**
214
+ * Central Asset Service interfaces
215
+ */
216
+ export interface AssetLink {
217
+ app: string;
218
+ entityType: string;
219
+ entityId: string;
220
+ createdBy: string;
221
+ createdAt: string;
222
+ }
223
+
224
+ export interface AssetVariant {
225
+ type: string;
226
+ key: string;
227
+ width?: number;
228
+ height?: number;
229
+ readyAt?: string;
230
+ size?: number;
231
+ metadata?: Record<string, any>;
232
+ }
233
+
234
+ export interface Asset {
235
+ id: string;
236
+ sha256: string;
237
+ size: number;
238
+ mime: string;
239
+ ext: string;
240
+ originalName?: string;
241
+ ownerUserId: string;
242
+ status: 'active' | 'trash' | 'deleted';
243
+ usageCount: number;
244
+ createdAt: string;
245
+ updatedAt: string;
246
+ links: AssetLink[];
247
+ variants: AssetVariant[];
248
+ metadata?: Record<string, any>;
249
+ }
250
+
251
+ export interface AssetInitRequest {
252
+ sha256: string;
253
+ size: number;
254
+ mime: string;
255
+ }
256
+
257
+ export interface AssetInitResponse {
258
+ uploadUrl: string;
259
+ fileId: string;
260
+ sha256: string;
261
+ }
262
+
263
+ export interface AssetCompleteRequest {
264
+ fileId: string;
265
+ originalName: string;
266
+ size: number;
267
+ mime: string;
268
+ metadata?: Record<string, any>;
269
+ }
270
+
271
+ export interface AssetLinkRequest {
272
+ app: string;
273
+ entityType: string;
274
+ entityId: string;
275
+ }
276
+
277
+ export interface AssetUnlinkRequest {
278
+ app: string;
279
+ entityType: string;
280
+ entityId: string;
281
+ }
282
+
283
+ export interface AssetUrlResponse {
284
+ success: boolean;
285
+ url: string;
286
+ variant?: string;
287
+ expiresIn: number;
288
+ }
289
+
290
+ export interface AssetDeleteSummary {
291
+ fileId: string;
292
+ wouldDelete: boolean;
293
+ affectedApps: string[];
294
+ remainingLinks: number;
295
+ variants: string[];
296
+ }
297
+
298
+ export interface AssetUploadProgress {
299
+ fileId: string;
300
+ uploaded: number;
301
+ total: number;
302
+ percentage: number;
303
+ status: 'uploading' | 'processing' | 'complete' | 'error';
304
+ error?: string;
305
+ }
306
+
196
307
  // Device Session interfaces
197
308
  export interface DeviceSession {
198
309
  sessionId: string;
@@ -1,3 +1,10 @@
1
1
  declare module '@expo/vector-icons' {
2
- export const Ionicons: any;
2
+ import type React from 'react';
3
+
4
+ export const Ionicons: React.ComponentType<{
5
+ name: string;
6
+ size?: number;
7
+ color?: string;
8
+ style?: Record<string, unknown>;
9
+ }>;
3
10
  }
@@ -1,5 +1,24 @@
1
1
  declare module 'express' {
2
- export function Router(): any;
3
- export interface Request { [key: string]: any }
4
- export interface Response { [key: string]: any }
2
+ export function Router(): {
3
+ get: (path: string, ...handlers: Array<(req: Request, res: Response, next: () => void) => void>) => void;
4
+ post: (path: string, ...handlers: Array<(req: Request, res: Response, next: () => void) => void>) => void;
5
+ put: (path: string, ...handlers: Array<(req: Request, res: Response, next: () => void) => void>) => void;
6
+ delete: (path: string, ...handlers: Array<(req: Request, res: Response, next: () => void) => void>) => void;
7
+ use: (path: string | (() => void), ...handlers: Array<(req: Request, res: Response, next: () => void) => void>) => void;
8
+ };
9
+ export interface Request {
10
+ body?: Record<string, unknown>;
11
+ params: Record<string, string>;
12
+ query: Record<string, string | string[]>;
13
+ headers: Record<string, string>;
14
+ user?: Record<string, unknown>;
15
+ [key: string]: unknown;
16
+ }
17
+ export interface Response {
18
+ status: (code: number) => Response;
19
+ json: (data: unknown) => Response;
20
+ send: (data: unknown) => Response;
21
+ redirect: (url: string) => Response;
22
+ [key: string]: unknown;
23
+ }
5
24
  }
@@ -1,5 +1,5 @@
1
- import React from 'react';
2
- import { View, Text, Image, StyleSheet, StyleProp, ViewStyle, ImageStyle, TextStyle, ActivityIndicator, Platform } from 'react-native';
1
+ import type React from 'react';
2
+ import { View, Text, Image, StyleSheet, type StyleProp, type ViewStyle, type ImageStyle, type TextStyle, ActivityIndicator, Platform } from 'react-native';
3
3
  import { useThemeColors } from '../styles';
4
4
  import { fontFamilies } from '../styles/fonts';
5
5
 
@@ -1,11 +1,12 @@
1
- import React, { useEffect, useCallback } from 'react';
1
+ import type React from 'react';
2
+ import { useEffect, useCallback } from 'react';
2
3
  import {
3
4
  TouchableOpacity,
4
5
  Text,
5
6
  StyleSheet,
6
- ViewStyle,
7
- TextStyle,
8
- StyleProp,
7
+ type ViewStyle,
8
+ type TextStyle,
9
+ type StyleProp,
9
10
  Platform,
10
11
  ActivityIndicator
11
12
  } from 'react-native';
@@ -86,17 +87,18 @@ const FollowButton: React.FC<FollowButtonProps> = ({
86
87
  }, [isFollowing, animationProgress]);
87
88
 
88
89
  // Button press handler
89
- const handlePress = useCallback(async (event: any) => {
90
+ const handlePress = useCallback(async (event?: { preventDefault?: () => void; stopPropagation?: () => void }) => {
90
91
  if (preventParentActions && event && event.preventDefault) {
91
92
  event.preventDefault();
92
- event.stopPropagation();
93
+ event.stopPropagation?.();
93
94
  }
94
95
  if (disabled || isLoading) return;
95
96
  try {
96
97
  await toggleFollow?.();
97
98
  if (onFollowChange) onFollowChange(!isFollowing);
98
- } catch (err: any) {
99
- toast.error(err?.message || 'Failed to update follow status');
99
+ } catch (err: unknown) {
100
+ const error = err instanceof Error ? err : new Error(String(err));
101
+ toast.error(error.message || 'Failed to update follow status');
100
102
  }
101
103
  }, [disabled, isLoading, toggleFollow, onFollowChange, isFollowing, preventParentActions]);
102
104
 
@@ -1,4 +1,5 @@
1
- import React, { useState, useEffect } from 'react';
1
+ import type React from 'react';
2
+ import { useState, useEffect } from 'react';
2
3
  import { Text, View, ActivityIndicator, StyleSheet, Platform } from 'react-native';
3
4
  import * as Font from 'expo-font';
4
5
 
@@ -160,8 +161,9 @@ export const setupFonts = async () => {
160
161
  }
161
162
 
162
163
  return true;
163
- } catch (error: any) {
164
- console.warn('Error setting up fonts:', error?.message || error);
164
+ } catch (error: unknown) {
165
+ const errorMessage = error instanceof Error ? error.message : String(error);
166
+ console.warn('Error setting up fonts:', errorMessage);
165
167
  return false;
166
168
  }
167
169
  };
@@ -1,4 +1,4 @@
1
- import React from 'react';
1
+ import type React from 'react';
2
2
  import { View, Text, TouchableOpacity, StyleSheet, Image } from 'react-native';
3
3
  import { Ionicons } from '@expo/vector-icons';
4
4
 
@@ -20,6 +20,7 @@ interface GroupedItemProps {
20
20
  customIcon?: React.ReactNode;
21
21
  multiRow?: boolean;
22
22
  customContentBelow?: React.ReactNode;
23
+ dense?: boolean; // reduces internal padding
23
24
  }
24
25
 
25
26
  const GroupedItem: React.FC<GroupedItemProps> = ({
@@ -40,6 +41,7 @@ const GroupedItem: React.FC<GroupedItemProps> = ({
40
41
  customIcon,
41
42
  multiRow = false,
42
43
  customContentBelow,
44
+ dense = false,
43
45
  }) => {
44
46
  const isDarkTheme = theme === 'dark';
45
47
  const textColor = isDarkTheme ? '#FFFFFF' : '#000000';
@@ -56,7 +58,11 @@ const GroupedItem: React.FC<GroupedItemProps> = ({
56
58
  ];
57
59
 
58
60
  const content = (
59
- <View style={[styles.groupedItemContent, multiRow && styles.groupedItemContentMultiRow]}>
61
+ <View style={[
62
+ styles.groupedItemContent,
63
+ multiRow && styles.groupedItemContentMultiRow,
64
+ dense && styles.groupedItemContentDense,
65
+ ]}>
60
66
  {customIcon ? (
61
67
  <View style={styles.actionIcon}>
62
68
  {customIcon}
@@ -127,6 +133,10 @@ const styles = StyleSheet.create({
127
133
  padding: 16,
128
134
  width: '100%',
129
135
  },
136
+ groupedItemContentDense: {
137
+ paddingVertical: 10,
138
+ paddingHorizontal: 12,
139
+ },
130
140
  actionIcon: {
131
141
  marginRight: 12,
132
142
  },
@@ -1,4 +1,4 @@
1
- import React from 'react';
1
+ import type React from 'react';
2
2
  import { View } from 'react-native';
3
3
  import GroupedItem from './GroupedItem';
4
4
 
@@ -18,6 +18,7 @@ interface GroupedSectionItem {
18
18
  customIcon?: React.ReactNode;
19
19
  multiRow?: boolean;
20
20
  customContentBelow?: React.ReactNode;
21
+ dense?: boolean;
21
22
  }
22
23
 
23
24
  interface GroupedSectionProps {
@@ -47,6 +48,7 @@ const GroupedSection: React.FC<GroupedSectionProps> = ({ items, theme }) => {
47
48
  customContent={item.customContent}
48
49
  customIcon={item.customIcon}
49
50
  multiRow={item.multiRow}
51
+ dense={item.dense}
50
52
  customContentBelow={item.customContentBelow}
51
53
  />
52
54
  ))}
@@ -1,4 +1,4 @@
1
- import React from 'react';
1
+ import type React from 'react';
2
2
  import {
3
3
  View,
4
4
  Text,
@@ -1,6 +1,6 @@
1
- import React from 'react';
1
+ import type React from 'react';
2
2
  import Svg, { Circle, Path } from 'react-native-svg';
3
- import { ViewStyle } from 'react-native';
3
+ import type { ViewStyle } from 'react-native';
4
4
  import { useThemeColors } from '../styles/theme';
5
5
 
6
6
  interface OxyLogoProps {
@@ -1,5 +1,6 @@
1
- import React, { useState } from 'react';
2
- import { TouchableOpacity, Text, View, StyleSheet, ViewStyle, TextStyle, StyleProp, LayoutChangeEvent } from 'react-native';
1
+ import type React from 'react';
2
+ import { useState } from 'react';
3
+ import { TouchableOpacity, Text, View, StyleSheet, type ViewStyle, type TextStyle, type StyleProp, type LayoutChangeEvent } from 'react-native';
3
4
  import { fontFamilies } from '../styles/fonts';
4
5
  import { useOxy } from '../context/OxyContext';
5
6
  import type { PaymentItem } from '../screens/PaymentGatewayScreen';
@@ -93,9 +94,9 @@ function isColorDark(hex: string) {
93
94
  let c = hex.replace('#', '');
94
95
  if (c.length === 3) c = c.split('').map(x => x + x).join('');
95
96
  if (c.length !== 6) return false;
96
- const r = parseInt(c.substr(0, 2), 16);
97
- const g = parseInt(c.substr(2, 2), 16);
98
- const b = parseInt(c.substr(4, 2), 16);
97
+ const r = Number.parseInt(c.substr(0, 2), 16);
98
+ const g = Number.parseInt(c.substr(2, 2), 16);
99
+ const b = Number.parseInt(c.substr(4, 2), 16);
99
100
  // Perceived luminance
100
101
  return (0.299 * r + 0.587 * g + 0.114 * b) < 150;
101
102
  }
@@ -1,15 +1,16 @@
1
- import React, { useCallback, useRef, useState, useEffect, useMemo } from 'react';
1
+ import type React from 'react';
2
+ import { useCallback, useRef, useState, useEffect, useMemo } from 'react';
2
3
  import { View, Text, StyleSheet, Dimensions, Platform, Animated, StatusBar, Keyboard, KeyboardEvent } from 'react-native';
3
4
  import { SafeAreaProvider, useSafeAreaInsets } from 'react-native-safe-area-context';
4
5
  import { GestureHandlerRootView } from 'react-native-gesture-handler';
5
- import { OxyProviderProps } from '../navigation/types';
6
+ import type { OxyProviderProps } from '../navigation/types';
6
7
  import { OxyContextProvider, useOxy } from '../context/OxyContext';
7
8
  import OxyRouter from '../navigation/OxyRouter';
8
9
  import { FontLoader, setupFonts } from './FontLoader';
9
10
  import { Toaster } from '../../lib/sonner';
10
11
 
11
12
  // Import bottom sheet components directly - no longer a peer dependency
12
- import { BottomSheetModal, BottomSheetBackdrop, BottomSheetBackdropProps, BottomSheetModalProvider, BottomSheetView, BottomSheetScrollView } from '@gorhom/bottom-sheet';
13
+ import { BottomSheetModal, BottomSheetBackdrop, type BottomSheetBackdropProps, BottomSheetModalProvider, BottomSheetView, BottomSheetScrollView } from '@gorhom/bottom-sheet';
13
14
  import type { BottomSheetModalMethods as BottomSheetModalRef } from '@gorhom/bottom-sheet/lib/typescript/types';
14
15
 
15
16
  // Initialize fonts automatically
@@ -145,7 +146,9 @@ const OxyBottomSheet: React.FC<OxyProviderProps> = ({
145
146
  }
146
147
  };
147
148
 
148
- console.log('Bottom sheet ref methods exposed:', Object.keys(bottomSheetRef.current));
149
+ if (bottomSheetRef.current && typeof bottomSheetRef.current === 'object') {
150
+ console.log('Bottom sheet ref methods exposed:', Object.keys(bottomSheetRef.current));
151
+ }
149
152
  }
150
153
  }, [bottomSheetRef, modalRef]);
151
154
  // Keyboard handling (unchanged)
@@ -1,5 +1,5 @@
1
- import React from 'react';
2
- import { TouchableOpacity, Text, View, StyleSheet, ViewStyle, TextStyle, StyleProp, Platform } from 'react-native';
1
+ import type React from 'react';
2
+ import { TouchableOpacity, Text, View, StyleSheet, type ViewStyle, type TextStyle, type StyleProp, Platform } from 'react-native';
3
3
  import { useOxy } from '../context/OxyContext';
4
4
  import OxyLogo from './OxyLogo';
5
5
  import { fontFamilies } from '../styles/fonts';
@@ -1,4 +1,4 @@
1
- import React from 'react';
1
+ import type React from 'react';
2
2
  import { View, Text, TouchableOpacity, StyleSheet } from 'react-native';
3
3
  import { Ionicons } from '@expo/vector-icons';
4
4
  import Avatar from './Avatar';
@@ -1,4 +1,4 @@
1
- import React from 'react';
1
+ import type React from 'react';
2
2
  import { View, Text, TouchableOpacity, StyleSheet } from 'react-native';
3
3
  import { Ionicons } from '@expo/vector-icons';
4
4
 
@@ -1,4 +1,4 @@
1
- import React from 'react';
1
+ import type React from 'react';
2
2
  import { View, StyleSheet } from 'react-native';
3
3
  import SectionTitle from './SectionTitle';
4
4
 
@@ -1,4 +1,4 @@
1
- import React from 'react';
1
+ import type React from 'react';
2
2
  import { Text, StyleSheet } from 'react-native';
3
3
  import { fontFamilies } from '../styles/fonts';
4
4
 
@@ -1,4 +1,4 @@
1
- import React from 'react';
1
+ import type React from 'react';
2
2
  import { View, StyleSheet } from 'react-native';
3
3
  import Svg, { G, Path } from 'react-native-svg';
4
4
 
@@ -1,4 +1,4 @@
1
- import React from 'react';
1
+ import type React from 'react';
2
2
  import { Platform } from 'react-native';
3
3
  import { Ionicons } from '@expo/vector-icons';
4
4
 
@@ -1,4 +1,4 @@
1
- import React from 'react';
1
+ import type React from 'react';
2
2
  import { View, TouchableOpacity, Text, ActivityIndicator, StyleSheet, Platform } from 'react-native';
3
3
  import { Ionicons } from '@expo/vector-icons';
4
4
 
@@ -1,4 +1,5 @@
1
- import React, { useRef } from 'react';
1
+ import type React from 'react';
2
+ import { useRef } from 'react';
2
3
  import { View, TextInput, StyleSheet, Platform } from 'react-native';
3
4
 
4
5
  interface PinInputProps {
@@ -44,7 +45,7 @@ const PinInput: React.FC<PinInputProps> = ({ value, onChange, length = 6, disabl
44
45
  {Array.from({ length }).map((_, idx) => (
45
46
  <TextInput
46
47
  key={idx}
47
- ref={ref => (inputs.current[idx] = ref)}
48
+ ref={(ref) => { inputs.current[idx] = ref; }}
48
49
  style={[
49
50
  styles.pinInput,
50
51
  { borderColor: colors.primary, color: colors.text, backgroundColor: colors.inputBackground },
@@ -7,15 +7,15 @@ import {
7
7
  ActivityIndicator,
8
8
  StyleSheet,
9
9
  Platform,
10
- TextInputProps,
10
+ type TextInputProps,
11
11
  Animated,
12
12
  LayoutChangeEvent,
13
13
  AccessibilityInfo,
14
- StyleProp,
15
- ViewStyle,
16
- NativeSyntheticEvent,
17
- TargetedEvent,
18
- TextInputFocusEventData,
14
+ type StyleProp,
15
+ type ViewStyle,
16
+ type NativeSyntheticEvent,
17
+ type TargetedEvent,
18
+ type TextInputFocusEventData,
19
19
  } from 'react-native';
20
20
  import { Ionicons } from '@expo/vector-icons';
21
21
  import Svg, { Path } from 'react-native-svg';
@@ -162,7 +162,7 @@ const formatters = {
162
162
  },
163
163
  currency: (value: string) => {
164
164
  const cleaned = value.replace(/[^\d.]/g, '');
165
- const num = parseFloat(cleaned);
165
+ const num = Number.parseFloat(cleaned);
166
166
  return isNaN(num) ? value : `$${num.toFixed(2)}`;
167
167
  }
168
168
  };
@@ -267,10 +267,8 @@ const TextField = forwardRef<TextInput, TextFieldProps>(({
267
267
  // Helper function to clone React elements with updated color
268
268
  const cloneWithColor = (element: React.ReactNode, color: string): React.ReactNode => {
269
269
  if (React.isValidElement(element) && element.type) {
270
- return React.cloneElement(element, {
271
- ...element.props,
272
- color: color,
273
- });
270
+ // Avoid spreading props directly to satisfy TS complaining about non-object spread sources
271
+ return React.cloneElement(element as any, { color });
274
272
  }
275
273
  return element;
276
274
  };
@@ -1,14 +1,16 @@
1
- import React, { createContext, useContext, useEffect, useCallback, ReactNode, useMemo, useRef, useState } from 'react';
1
+ import React, { createContext, useContext, useEffect, useCallback, type ReactNode, useMemo, useRef, useState } from 'react';
2
2
  import { View, Text } from 'react-native';
3
3
  import { OxyServices } from '../../core';
4
- import { User, ApiError } from '../../models/interfaces';
5
- import { SessionLoginResponse, ClientSession, MinimalUserData } from '../../models/session';
4
+ import type { User, ApiError } from '../../models/interfaces';
5
+ import type { SessionLoginResponse, ClientSession, MinimalUserData } from '../../models/session';
6
6
  import { DeviceManager } from '../../utils/deviceManager';
7
7
  import { useSessionSocket } from '../hooks/useSessionSocket';
8
8
  import { toast } from '../../lib/sonner';
9
9
  import { useAuthStore } from '../stores/authStore';
10
10
 
11
11
  // Define the context shape
12
+ import { useFollow as baseUseFollow } from '../hooks/useFollow';
13
+
12
14
  export interface OxyContextState {
13
15
  // Authentication state
14
16
  user: User | null; // Current active user (loaded from server)
@@ -42,6 +44,11 @@ export interface OxyContextState {
42
44
  // Methods to directly control the bottom sheet
43
45
  showBottomSheet?: (screenOrConfig?: string | { screen: string; props?: Record<string, any> }) => void;
44
46
  hideBottomSheet?: () => void;
47
+
48
+ /**
49
+ * useFollow hook, exposed for convenience so you can do const { useFollow } = useOxy();
50
+ */
51
+ useFollow: typeof baseUseFollow;
45
52
  }
46
53
 
47
54
  // Create the context with default values
@@ -705,6 +712,7 @@ export const OxyProvider: React.FC<OxyContextProviderProps> = ({
705
712
  bottomSheetRef,
706
713
  showBottomSheet,
707
714
  hideBottomSheet,
715
+ useFollow: baseUseFollow,
708
716
  }), [
709
717
  user?.id, // Only depend on user ID, not the entire user object
710
718
  minimalUser?.id,