@oxyhq/services 5.5.9 → 5.6.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 (393) hide show
  1. package/README.md +16 -2
  2. package/lib/commonjs/core/index.js +69 -82
  3. package/lib/commonjs/core/index.js.map +1 -1
  4. package/lib/commonjs/index.js +24 -183
  5. package/lib/commonjs/index.js.map +1 -1
  6. package/lib/commonjs/node/index.js +0 -2
  7. package/lib/commonjs/node/index.js.map +1 -1
  8. package/lib/commonjs/ui/components/FollowButton.js +100 -229
  9. package/lib/commonjs/ui/components/FollowButton.js.map +1 -1
  10. package/lib/commonjs/ui/components/OxyPayButton.js +131 -0
  11. package/lib/commonjs/ui/components/OxyPayButton.js.map +1 -0
  12. package/lib/commonjs/ui/components/OxyProvider.js +41 -198
  13. package/lib/commonjs/ui/components/OxyProvider.js.map +1 -1
  14. package/lib/commonjs/ui/components/OxySignInButton.js +15 -2
  15. package/lib/commonjs/ui/components/OxySignInButton.js.map +1 -1
  16. package/lib/commonjs/ui/components/icon/FAIRWalletIcon.js +66 -0
  17. package/lib/commonjs/ui/components/icon/FAIRWalletIcon.js.map +1 -0
  18. package/lib/commonjs/ui/components/icon/index.js +7 -0
  19. package/lib/commonjs/ui/components/icon/index.js.map +1 -1
  20. package/lib/commonjs/ui/components/index.js +7 -0
  21. package/lib/commonjs/ui/components/index.js.map +1 -1
  22. package/lib/commonjs/ui/components/internal/GroupedPillButtons.js +14 -7
  23. package/lib/commonjs/ui/components/internal/GroupedPillButtons.js.map +1 -1
  24. package/lib/commonjs/ui/components/internal/PinInput.js +108 -0
  25. package/lib/commonjs/ui/components/internal/PinInput.js.map +1 -0
  26. package/lib/commonjs/ui/components/internal/TextField.js +20 -0
  27. package/lib/commonjs/ui/components/internal/TextField.js.map +1 -1
  28. package/lib/commonjs/ui/context/OxyContext.js +26 -36
  29. package/lib/commonjs/ui/context/OxyContext.js.map +1 -1
  30. package/lib/commonjs/ui/hooks/index.js +2 -15
  31. package/lib/commonjs/ui/hooks/index.js.map +1 -1
  32. package/lib/commonjs/ui/hooks/useFollow.js +52 -136
  33. package/lib/commonjs/ui/hooks/useFollow.js.map +1 -1
  34. package/lib/commonjs/ui/hooks/useSessionSocket.js +52 -0
  35. package/lib/commonjs/ui/hooks/useSessionSocket.js.map +1 -0
  36. package/lib/commonjs/ui/index.js +8 -191
  37. package/lib/commonjs/ui/index.js.map +1 -1
  38. package/lib/commonjs/ui/navigation/OxyRouter.js +52 -60
  39. package/lib/commonjs/ui/navigation/OxyRouter.js.map +1 -1
  40. package/lib/commonjs/ui/screens/AccountCenterScreen.js +18 -30
  41. package/lib/commonjs/ui/screens/AccountCenterScreen.js.map +1 -1
  42. package/lib/commonjs/ui/screens/AccountOverviewScreen.js +4 -22
  43. package/lib/commonjs/ui/screens/AccountOverviewScreen.js.map +1 -1
  44. package/lib/commonjs/ui/screens/AccountSettingsScreen.js +6 -14
  45. package/lib/commonjs/ui/screens/AccountSettingsScreen.js.map +1 -1
  46. package/lib/commonjs/ui/screens/AccountSwitcherScreen.js +37 -66
  47. package/lib/commonjs/ui/screens/AccountSwitcherScreen.js.map +1 -1
  48. package/lib/commonjs/ui/screens/AppInfoScreen.js +21 -44
  49. package/lib/commonjs/ui/screens/AppInfoScreen.js.map +1 -1
  50. package/lib/commonjs/ui/screens/FeedbackScreen.js +44 -23
  51. package/lib/commonjs/ui/screens/FeedbackScreen.js.map +1 -1
  52. package/lib/commonjs/ui/screens/FileManagementScreen.js +59 -78
  53. package/lib/commonjs/ui/screens/FileManagementScreen.js.map +1 -1
  54. package/lib/commonjs/ui/screens/PaymentGatewayScreen.js +1588 -0
  55. package/lib/commonjs/ui/screens/PaymentGatewayScreen.js.map +1 -0
  56. package/lib/commonjs/ui/screens/PremiumSubscriptionScreen.js +22 -36
  57. package/lib/commonjs/ui/screens/PremiumSubscriptionScreen.js.map +1 -1
  58. package/lib/commonjs/ui/screens/RecoverAccountScreen.js +269 -0
  59. package/lib/commonjs/ui/screens/RecoverAccountScreen.js.map +1 -0
  60. package/lib/commonjs/ui/screens/SessionManagementScreen.js +47 -69
  61. package/lib/commonjs/ui/screens/SessionManagementScreen.js.map +1 -1
  62. package/lib/commonjs/ui/screens/SignInScreen.js +99 -333
  63. package/lib/commonjs/ui/screens/SignInScreen.js.map +1 -1
  64. package/lib/commonjs/ui/screens/SignUpScreen.js +136 -340
  65. package/lib/commonjs/ui/screens/SignUpScreen.js.map +1 -1
  66. package/lib/commonjs/ui/screens/internal/SignInPasswordStep.js +192 -0
  67. package/lib/commonjs/ui/screens/internal/SignInPasswordStep.js.map +1 -0
  68. package/lib/commonjs/ui/screens/internal/SignInUsernameStep.js +135 -0
  69. package/lib/commonjs/ui/screens/internal/SignInUsernameStep.js.map +1 -0
  70. package/lib/commonjs/ui/screens/internal/SignUpIdentityStep.js +108 -0
  71. package/lib/commonjs/ui/screens/internal/SignUpIdentityStep.js.map +1 -0
  72. package/lib/commonjs/ui/screens/internal/SignUpSecurityStep.js +126 -0
  73. package/lib/commonjs/ui/screens/internal/SignUpSecurityStep.js.map +1 -0
  74. package/lib/commonjs/ui/screens/internal/SignUpSummaryStep.js +84 -0
  75. package/lib/commonjs/ui/screens/internal/SignUpSummaryStep.js.map +1 -0
  76. package/lib/commonjs/ui/screens/internal/SignUpWelcomeStep.js +59 -0
  77. package/lib/commonjs/ui/screens/internal/SignUpWelcomeStep.js.map +1 -0
  78. package/lib/commonjs/ui/screens/karma/KarmaRewardsScreen.js +15 -2
  79. package/lib/commonjs/ui/screens/karma/KarmaRewardsScreen.js.map +1 -1
  80. package/lib/commonjs/ui/stores/authStore.js +31 -0
  81. package/lib/commonjs/ui/stores/authStore.js.map +1 -0
  82. package/lib/commonjs/ui/stores/followStore.js +124 -0
  83. package/lib/commonjs/ui/stores/followStore.js.map +1 -0
  84. package/lib/commonjs/ui/styles/index.js +0 -11
  85. package/lib/commonjs/ui/styles/index.js.map +1 -1
  86. package/lib/commonjs/ui/utils/confirmAction.js +28 -0
  87. package/lib/commonjs/ui/utils/confirmAction.js.map +1 -0
  88. package/lib/module/core/index.js +69 -81
  89. package/lib/module/core/index.js.map +1 -1
  90. package/lib/module/index.js +14 -17
  91. package/lib/module/index.js.map +1 -1
  92. package/lib/module/node/index.js +0 -3
  93. package/lib/module/node/index.js.map +1 -1
  94. package/lib/module/ui/components/FollowButton.js +100 -229
  95. package/lib/module/ui/components/FollowButton.js.map +1 -1
  96. package/lib/module/ui/components/OxyPayButton.js +125 -0
  97. package/lib/module/ui/components/OxyPayButton.js.map +1 -0
  98. package/lib/module/ui/components/OxyProvider.js +42 -199
  99. package/lib/module/ui/components/OxyProvider.js.map +1 -1
  100. package/lib/module/ui/components/OxySignInButton.js +15 -2
  101. package/lib/module/ui/components/OxySignInButton.js.map +1 -1
  102. package/lib/module/ui/components/icon/FAIRWalletIcon.js +60 -0
  103. package/lib/module/ui/components/icon/FAIRWalletIcon.js.map +1 -0
  104. package/lib/module/ui/components/icon/index.js +1 -0
  105. package/lib/module/ui/components/icon/index.js.map +1 -1
  106. package/lib/module/ui/components/index.js +1 -0
  107. package/lib/module/ui/components/index.js.map +1 -1
  108. package/lib/module/ui/components/internal/GroupedPillButtons.js +15 -8
  109. package/lib/module/ui/components/internal/GroupedPillButtons.js.map +1 -1
  110. package/lib/module/ui/components/internal/PinInput.js +103 -0
  111. package/lib/module/ui/components/internal/PinInput.js.map +1 -0
  112. package/lib/module/ui/components/internal/TextField.js +20 -0
  113. package/lib/module/ui/components/internal/TextField.js.map +1 -1
  114. package/lib/module/ui/context/OxyContext.js +26 -36
  115. package/lib/module/ui/context/OxyContext.js.map +1 -1
  116. package/lib/module/ui/hooks/index.js +1 -2
  117. package/lib/module/ui/hooks/index.js.map +1 -1
  118. package/lib/module/ui/hooks/useFollow.js +52 -137
  119. package/lib/module/ui/hooks/useFollow.js.map +1 -1
  120. package/lib/module/ui/hooks/useSessionSocket.js +47 -0
  121. package/lib/module/ui/hooks/useSessionSocket.js.map +1 -0
  122. package/lib/module/ui/index.js +2 -13
  123. package/lib/module/ui/index.js.map +1 -1
  124. package/lib/module/ui/navigation/OxyRouter.js +53 -61
  125. package/lib/module/ui/navigation/OxyRouter.js.map +1 -1
  126. package/lib/module/ui/screens/AccountCenterScreen.js +6 -18
  127. package/lib/module/ui/screens/AccountCenterScreen.js.map +1 -1
  128. package/lib/module/ui/screens/AccountOverviewScreen.js +5 -23
  129. package/lib/module/ui/screens/AccountOverviewScreen.js.map +1 -1
  130. package/lib/module/ui/screens/AccountSettingsScreen.js +7 -15
  131. package/lib/module/ui/screens/AccountSettingsScreen.js.map +1 -1
  132. package/lib/module/ui/screens/AccountSwitcherScreen.js +38 -67
  133. package/lib/module/ui/screens/AccountSwitcherScreen.js.map +1 -1
  134. package/lib/module/ui/screens/AppInfoScreen.js +22 -45
  135. package/lib/module/ui/screens/AppInfoScreen.js.map +1 -1
  136. package/lib/module/ui/screens/FeedbackScreen.js +44 -23
  137. package/lib/module/ui/screens/FeedbackScreen.js.map +1 -1
  138. package/lib/module/ui/screens/FileManagementScreen.js +59 -78
  139. package/lib/module/ui/screens/FileManagementScreen.js.map +1 -1
  140. package/lib/module/ui/screens/PaymentGatewayScreen.js +1583 -0
  141. package/lib/module/ui/screens/PaymentGatewayScreen.js.map +1 -0
  142. package/lib/module/ui/screens/PremiumSubscriptionScreen.js +23 -37
  143. package/lib/module/ui/screens/PremiumSubscriptionScreen.js.map +1 -1
  144. package/lib/module/ui/screens/RecoverAccountScreen.js +263 -0
  145. package/lib/module/ui/screens/RecoverAccountScreen.js.map +1 -0
  146. package/lib/module/ui/screens/SessionManagementScreen.js +47 -69
  147. package/lib/module/ui/screens/SessionManagementScreen.js.map +1 -1
  148. package/lib/module/ui/screens/SignInScreen.js +100 -334
  149. package/lib/module/ui/screens/SignInScreen.js.map +1 -1
  150. package/lib/module/ui/screens/SignUpScreen.js +137 -341
  151. package/lib/module/ui/screens/SignUpScreen.js.map +1 -1
  152. package/lib/module/ui/screens/internal/SignInPasswordStep.js +186 -0
  153. package/lib/module/ui/screens/internal/SignInPasswordStep.js.map +1 -0
  154. package/lib/module/ui/screens/internal/SignInUsernameStep.js +129 -0
  155. package/lib/module/ui/screens/internal/SignInUsernameStep.js.map +1 -0
  156. package/lib/module/ui/screens/internal/SignUpIdentityStep.js +102 -0
  157. package/lib/module/ui/screens/internal/SignUpIdentityStep.js.map +1 -0
  158. package/lib/module/ui/screens/internal/SignUpSecurityStep.js +120 -0
  159. package/lib/module/ui/screens/internal/SignUpSecurityStep.js.map +1 -0
  160. package/lib/module/ui/screens/internal/SignUpSummaryStep.js +79 -0
  161. package/lib/module/ui/screens/internal/SignUpSummaryStep.js.map +1 -0
  162. package/lib/module/ui/screens/internal/SignUpWelcomeStep.js +54 -0
  163. package/lib/module/ui/screens/internal/SignUpWelcomeStep.js.map +1 -0
  164. package/lib/module/ui/screens/karma/KarmaRewardsScreen.js +16 -3
  165. package/lib/module/ui/screens/karma/KarmaRewardsScreen.js.map +1 -1
  166. package/lib/module/ui/stores/authStore.js +27 -0
  167. package/lib/module/ui/stores/authStore.js.map +1 -0
  168. package/lib/module/ui/stores/followStore.js +120 -0
  169. package/lib/module/ui/stores/followStore.js.map +1 -0
  170. package/lib/module/ui/styles/index.js +0 -1
  171. package/lib/module/ui/styles/index.js.map +1 -1
  172. package/lib/module/ui/utils/confirmAction.js +25 -0
  173. package/lib/module/ui/utils/confirmAction.js.map +1 -0
  174. package/lib/typescript/core/index.d.ts +28 -10
  175. package/lib/typescript/core/index.d.ts.map +1 -1
  176. package/lib/typescript/index.d.ts +5 -4
  177. package/lib/typescript/index.d.ts.map +1 -1
  178. package/lib/typescript/models/secureSession.d.ts +0 -1
  179. package/lib/typescript/models/secureSession.d.ts.map +1 -1
  180. package/lib/typescript/node/index.d.ts +0 -1
  181. package/lib/typescript/node/index.d.ts.map +1 -1
  182. package/lib/typescript/ui/components/FollowButton.d.ts +1 -77
  183. package/lib/typescript/ui/components/FollowButton.d.ts.map +1 -1
  184. package/lib/typescript/ui/components/OxyPayButton.d.ts +29 -0
  185. package/lib/typescript/ui/components/OxyPayButton.d.ts.map +1 -0
  186. package/lib/typescript/ui/components/OxyProvider.d.ts.map +1 -1
  187. package/lib/typescript/ui/components/OxySignInButton.d.ts.map +1 -1
  188. package/lib/typescript/ui/components/icon/FAIRWalletIcon.d.ts +8 -0
  189. package/lib/typescript/ui/components/icon/FAIRWalletIcon.d.ts.map +1 -0
  190. package/lib/typescript/ui/components/icon/index.d.ts +1 -0
  191. package/lib/typescript/ui/components/icon/index.d.ts.map +1 -1
  192. package/lib/typescript/ui/components/index.d.ts +1 -0
  193. package/lib/typescript/ui/components/index.d.ts.map +1 -1
  194. package/lib/typescript/ui/components/internal/GroupedPillButtons.d.ts.map +1 -1
  195. package/lib/typescript/ui/components/internal/PinInput.d.ts +12 -0
  196. package/lib/typescript/ui/components/internal/PinInput.d.ts.map +1 -0
  197. package/lib/typescript/ui/components/internal/TextField.d.ts +1 -0
  198. package/lib/typescript/ui/components/internal/TextField.d.ts.map +1 -1
  199. package/lib/typescript/ui/context/OxyContext.d.ts +0 -2
  200. package/lib/typescript/ui/context/OxyContext.d.ts.map +1 -1
  201. package/lib/typescript/ui/hooks/index.d.ts +1 -2
  202. package/lib/typescript/ui/hooks/index.d.ts.map +1 -1
  203. package/lib/typescript/ui/hooks/useFollow.d.ts +14 -15
  204. package/lib/typescript/ui/hooks/useFollow.d.ts.map +1 -1
  205. package/lib/typescript/ui/hooks/useSessionSocket.d.ts +11 -0
  206. package/lib/typescript/ui/hooks/useSessionSocket.d.ts.map +1 -0
  207. package/lib/typescript/ui/index.d.ts +2 -5
  208. package/lib/typescript/ui/index.d.ts.map +1 -1
  209. package/lib/typescript/ui/navigation/OxyRouter.d.ts.map +1 -1
  210. package/lib/typescript/ui/navigation/types.d.ts +5 -23
  211. package/lib/typescript/ui/navigation/types.d.ts.map +1 -1
  212. package/lib/typescript/ui/screens/AccountCenterScreen.d.ts.map +1 -1
  213. package/lib/typescript/ui/screens/AccountOverviewScreen.d.ts.map +1 -1
  214. package/lib/typescript/ui/screens/AccountSettingsScreen.d.ts.map +1 -1
  215. package/lib/typescript/ui/screens/AccountSwitcherScreen.d.ts.map +1 -1
  216. package/lib/typescript/ui/screens/AppInfoScreen.d.ts.map +1 -1
  217. package/lib/typescript/ui/screens/FeedbackScreen.d.ts.map +1 -1
  218. package/lib/typescript/ui/screens/FileManagementScreen.d.ts.map +1 -1
  219. package/lib/typescript/ui/screens/PaymentGatewayScreen.d.ts +27 -0
  220. package/lib/typescript/ui/screens/PaymentGatewayScreen.d.ts.map +1 -0
  221. package/lib/typescript/ui/screens/PremiumSubscriptionScreen.d.ts.map +1 -1
  222. package/lib/typescript/ui/screens/RecoverAccountScreen.d.ts +8 -0
  223. package/lib/typescript/ui/screens/RecoverAccountScreen.d.ts.map +1 -0
  224. package/lib/typescript/ui/screens/SessionManagementScreen.d.ts.map +1 -1
  225. package/lib/typescript/ui/screens/SignInScreen.d.ts.map +1 -1
  226. package/lib/typescript/ui/screens/SignUpScreen.d.ts.map +1 -1
  227. package/lib/typescript/ui/screens/internal/SignInPasswordStep.d.ts +27 -0
  228. package/lib/typescript/ui/screens/internal/SignInPasswordStep.d.ts.map +1 -0
  229. package/lib/typescript/ui/screens/internal/SignInUsernameStep.d.ts +26 -0
  230. package/lib/typescript/ui/screens/internal/SignInUsernameStep.d.ts.map +1 -0
  231. package/lib/typescript/ui/screens/internal/SignUpIdentityStep.d.ts +20 -0
  232. package/lib/typescript/ui/screens/internal/SignUpIdentityStep.d.ts.map +1 -0
  233. package/lib/typescript/ui/screens/internal/SignUpSecurityStep.d.ts +24 -0
  234. package/lib/typescript/ui/screens/internal/SignUpSecurityStep.d.ts.map +1 -0
  235. package/lib/typescript/ui/screens/internal/SignUpSummaryStep.d.ts +15 -0
  236. package/lib/typescript/ui/screens/internal/SignUpSummaryStep.d.ts.map +1 -0
  237. package/lib/typescript/ui/screens/internal/SignUpWelcomeStep.d.ts +13 -0
  238. package/lib/typescript/ui/screens/internal/SignUpWelcomeStep.d.ts.map +1 -0
  239. package/lib/typescript/ui/screens/karma/KarmaRewardsScreen.d.ts.map +1 -1
  240. package/lib/typescript/ui/stores/authStore.d.ts +14 -0
  241. package/lib/typescript/ui/stores/authStore.d.ts.map +1 -0
  242. package/lib/typescript/ui/stores/followStore.d.ts +15 -0
  243. package/lib/typescript/ui/stores/followStore.d.ts.map +1 -0
  244. package/lib/typescript/ui/styles/index.d.ts +0 -1
  245. package/lib/typescript/ui/styles/index.d.ts.map +1 -1
  246. package/lib/typescript/ui/utils/confirmAction.d.ts +7 -0
  247. package/lib/typescript/ui/utils/confirmAction.d.ts.map +1 -0
  248. package/package.json +12 -7
  249. package/src/core/index.ts +78 -88
  250. package/src/index.ts +8 -45
  251. package/src/models/secureSession.ts +1 -2
  252. package/src/node/index.ts +0 -3
  253. package/src/ui/components/FollowButton.tsx +100 -322
  254. package/src/ui/components/OxyPayButton.tsx +133 -0
  255. package/src/ui/components/OxyProvider.tsx +39 -201
  256. package/src/ui/components/OxySignInButton.tsx +13 -2
  257. package/src/ui/components/icon/FAIRWalletIcon.tsx +49 -0
  258. package/src/ui/components/icon/index.ts +1 -0
  259. package/src/ui/components/index.ts +1 -0
  260. package/src/ui/components/internal/GroupedPillButtons.tsx +12 -8
  261. package/src/ui/components/internal/PinInput.tsx +102 -0
  262. package/src/ui/components/internal/TextField.tsx +9 -0
  263. package/src/ui/context/OxyContext.tsx +26 -40
  264. package/src/ui/hooks/index.ts +1 -2
  265. package/src/ui/hooks/useFollow.ts +58 -129
  266. package/src/ui/hooks/useSessionSocket.ts +50 -0
  267. package/src/ui/index.ts +2 -37
  268. package/src/ui/navigation/OxyRouter.tsx +47 -63
  269. package/src/ui/navigation/types.ts +5 -26
  270. package/src/ui/screens/AccountCenterScreen.tsx +12 -21
  271. package/src/ui/screens/AccountOverviewScreen.tsx +6 -30
  272. package/src/ui/screens/AccountSettingsScreen.tsx +7 -22
  273. package/src/ui/screens/AccountSwitcherScreen.tsx +46 -88
  274. package/src/ui/screens/AppInfoScreen.tsx +27 -47
  275. package/src/ui/screens/FeedbackScreen.tsx +34 -19
  276. package/src/ui/screens/FileManagementScreen.tsx +293 -321
  277. package/src/ui/screens/PaymentGatewayScreen.tsx +1315 -0
  278. package/src/ui/screens/PremiumSubscriptionScreen.tsx +109 -124
  279. package/src/ui/screens/RecoverAccountScreen.tsx +260 -0
  280. package/src/ui/screens/SessionManagementScreen.tsx +65 -137
  281. package/src/ui/screens/SignInScreen.tsx +89 -283
  282. package/src/ui/screens/SignUpScreen.tsx +138 -291
  283. package/src/ui/screens/internal/SignInPasswordStep.tsx +179 -0
  284. package/src/ui/screens/internal/SignInUsernameStep.tsx +139 -0
  285. package/src/ui/screens/internal/SignUpIdentityStep.tsx +114 -0
  286. package/src/ui/screens/internal/SignUpSecurityStep.tsx +132 -0
  287. package/src/ui/screens/internal/SignUpSummaryStep.tsx +66 -0
  288. package/src/ui/screens/internal/SignUpWelcomeStep.tsx +52 -0
  289. package/src/ui/screens/karma/KarmaRewardsScreen.tsx +13 -3
  290. package/src/ui/stores/authStore.ts +24 -0
  291. package/src/ui/stores/followStore.ts +80 -0
  292. package/src/ui/styles/index.ts +0 -1
  293. package/src/ui/utils/confirmAction.ts +23 -0
  294. package/lib/commonjs/ui/components/bottomSheet/index.js +0 -37
  295. package/lib/commonjs/ui/components/bottomSheet/index.js.map +0 -1
  296. package/lib/commonjs/ui/hooks/useAuthFetch.js +0 -217
  297. package/lib/commonjs/ui/hooks/useAuthFetch.js.map +0 -1
  298. package/lib/commonjs/ui/hooks/useOxyFollow.js +0 -190
  299. package/lib/commonjs/ui/hooks/useOxyFollow.js.map +0 -1
  300. package/lib/commonjs/ui/screens/BillingManagementScreen.js +0 -636
  301. package/lib/commonjs/ui/screens/BillingManagementScreen.js.map +0 -1
  302. package/lib/commonjs/ui/store/index.js +0 -67
  303. package/lib/commonjs/ui/store/index.js.map +0 -1
  304. package/lib/commonjs/ui/store/setupOxyStore.js +0 -63
  305. package/lib/commonjs/ui/store/setupOxyStore.js.map +0 -1
  306. package/lib/commonjs/ui/store/slices/authSlice.js +0 -56
  307. package/lib/commonjs/ui/store/slices/authSlice.js.map +0 -1
  308. package/lib/commonjs/ui/store/slices/followSlice.js +0 -238
  309. package/lib/commonjs/ui/store/slices/followSlice.js.map +0 -1
  310. package/lib/commonjs/ui/store/slices/index.js +0 -129
  311. package/lib/commonjs/ui/store/slices/index.js.map +0 -1
  312. package/lib/commonjs/ui/store/slices/types.js +0 -19
  313. package/lib/commonjs/ui/store/slices/types.js.map +0 -1
  314. package/lib/commonjs/ui/styles/shadows.js +0 -123
  315. package/lib/commonjs/ui/styles/shadows.js.map +0 -1
  316. package/lib/commonjs/utils/polyfills.js +0 -42
  317. package/lib/commonjs/utils/polyfills.js.map +0 -1
  318. package/lib/module/ui/components/bottomSheet/index.js +0 -5
  319. package/lib/module/ui/components/bottomSheet/index.js.map +0 -1
  320. package/lib/module/ui/hooks/useAuthFetch.js +0 -212
  321. package/lib/module/ui/hooks/useAuthFetch.js.map +0 -1
  322. package/lib/module/ui/hooks/useOxyFollow.js +0 -186
  323. package/lib/module/ui/hooks/useOxyFollow.js.map +0 -1
  324. package/lib/module/ui/screens/BillingManagementScreen.js +0 -631
  325. package/lib/module/ui/screens/BillingManagementScreen.js.map +0 -1
  326. package/lib/module/ui/store/index.js +0 -33
  327. package/lib/module/ui/store/index.js.map +0 -1
  328. package/lib/module/ui/store/setupOxyStore.js +0 -59
  329. package/lib/module/ui/store/setupOxyStore.js.map +0 -1
  330. package/lib/module/ui/store/slices/authSlice.js +0 -48
  331. package/lib/module/ui/store/slices/authSlice.js.map +0 -1
  332. package/lib/module/ui/store/slices/followSlice.js +0 -232
  333. package/lib/module/ui/store/slices/followSlice.js.map +0 -1
  334. package/lib/module/ui/store/slices/index.js +0 -11
  335. package/lib/module/ui/store/slices/index.js.map +0 -1
  336. package/lib/module/ui/store/slices/types.js +0 -15
  337. package/lib/module/ui/store/slices/types.js.map +0 -1
  338. package/lib/module/ui/styles/shadows.js +0 -119
  339. package/lib/module/ui/styles/shadows.js.map +0 -1
  340. package/lib/module/utils/polyfills.js +0 -36
  341. package/lib/module/utils/polyfills.js.map +0 -1
  342. package/lib/typescript/types/react-redux.d.ts +0 -5
  343. package/lib/typescript/ui/components/bottomSheet/index.d.ts +0 -4
  344. package/lib/typescript/ui/components/bottomSheet/index.d.ts.map +0 -1
  345. package/lib/typescript/ui/hooks/useAuthFetch.d.ts +0 -34
  346. package/lib/typescript/ui/hooks/useAuthFetch.d.ts.map +0 -1
  347. package/lib/typescript/ui/hooks/useOxyFollow.d.ts +0 -81
  348. package/lib/typescript/ui/hooks/useOxyFollow.d.ts.map +0 -1
  349. package/lib/typescript/ui/screens/BillingManagementScreen.d.ts +0 -5
  350. package/lib/typescript/ui/screens/BillingManagementScreen.d.ts.map +0 -1
  351. package/lib/typescript/ui/store/index.d.ts +0 -27
  352. package/lib/typescript/ui/store/index.d.ts.map +0 -1
  353. package/lib/typescript/ui/store/setupOxyStore.d.ts +0 -29
  354. package/lib/typescript/ui/store/setupOxyStore.d.ts.map +0 -1
  355. package/lib/typescript/ui/store/slices/authSlice.d.ts +0 -32
  356. package/lib/typescript/ui/store/slices/authSlice.d.ts.map +0 -1
  357. package/lib/typescript/ui/store/slices/followSlice.d.ts +0 -120
  358. package/lib/typescript/ui/store/slices/followSlice.d.ts.map +0 -1
  359. package/lib/typescript/ui/store/slices/index.d.ts +0 -9
  360. package/lib/typescript/ui/store/slices/index.d.ts.map +0 -1
  361. package/lib/typescript/ui/store/slices/types.d.ts +0 -16
  362. package/lib/typescript/ui/store/slices/types.d.ts.map +0 -1
  363. package/lib/typescript/ui/styles/shadows.d.ts +0 -233
  364. package/lib/typescript/ui/styles/shadows.d.ts.map +0 -1
  365. package/lib/typescript/utils/polyfills.d.ts +0 -6
  366. package/lib/typescript/utils/polyfills.d.ts.map +0 -1
  367. package/src/__tests__/backend-middleware.test.ts +0 -209
  368. package/src/__tests__/polyfills.test.ts +0 -30
  369. package/src/__tests__/setup.ts +0 -43
  370. package/src/__tests__/ui/hooks/authfetch-integration.test.ts +0 -197
  371. package/src/__tests__/ui/hooks/backward-compatibility.test.ts +0 -159
  372. package/src/__tests__/ui/hooks/real-world-scenarios.test.ts +0 -224
  373. package/src/__tests__/ui/hooks/url-resolution.test.ts +0 -129
  374. package/src/__tests__/ui/hooks/useAuthFetch-separation.test.ts +0 -69
  375. package/src/__tests__/ui/hooks/useAuthFetch.test.ts +0 -70
  376. package/src/__tests__/ui/hooks/useOxyFollow.test.tsx +0 -92
  377. package/src/__tests__/ui/screens/AccountSettingsScreen.test.tsx +0 -112
  378. package/src/__tests__/ui/store/setupOxyStore.test.ts +0 -50
  379. package/src/__tests__/validate-structure.js +0 -91
  380. package/src/__tests__/validation.js +0 -42
  381. package/src/types/react-redux.d.ts +0 -5
  382. package/src/ui/components/bottomSheet/index.tsx +0 -14
  383. package/src/ui/hooks/useAuthFetch.ts +0 -238
  384. package/src/ui/hooks/useOxyFollow.ts +0 -188
  385. package/src/ui/screens/BillingManagementScreen.tsx +0 -589
  386. package/src/ui/store/index.ts +0 -36
  387. package/src/ui/store/setupOxyStore.ts +0 -58
  388. package/src/ui/store/slices/authSlice.ts +0 -43
  389. package/src/ui/store/slices/followSlice.ts +0 -207
  390. package/src/ui/store/slices/index.ts +0 -31
  391. package/src/ui/store/slices/types.ts +0 -33
  392. package/src/ui/styles/shadows.ts +0 -112
  393. package/src/utils/polyfills.ts +0 -34
@@ -1,224 +0,0 @@
1
- /**
2
- * Real-world scenario test: Mention app and other Oxy ecosystem apps
3
- * This test demonstrates the exact use case described in the issue
4
- */
5
-
6
- describe('Real-world Oxy Ecosystem Integration', () => {
7
- describe('Mention app scenario', () => {
8
- // Simulate the complete Mention app setup
9
- function simulateMentionAppSetup() {
10
- console.log('Setting up Mention app with Oxy authentication...');
11
-
12
- // 1. Create OxyServices for Oxy API authentication
13
- const oxyServices = {
14
- baseURL: 'https://api.oxy.so',
15
- getBaseURL: () => 'https://api.oxy.so',
16
- setBaseURL: (url: string) => {
17
- console.log(`[OxyServices] Internal URL change to: ${url}`);
18
- },
19
- // Internal methods that need to call Oxy API
20
- authenticateToken: async (token: string) => {
21
- const url = `https://api.oxy.so/auth/validate`;
22
- console.log(`[Internal] Validating token at: ${url}`);
23
- return { valid: true, user: { id: 'user123', username: 'mentionuser' } };
24
- },
25
- refreshTokens: async () => {
26
- const url = `https://api.oxy.so/auth/refresh`;
27
- console.log(`[Internal] Refreshing tokens at: ${url}`);
28
- return { accessToken: 'new-token', refreshToken: 'new-refresh' };
29
- }
30
- };
31
-
32
- // 2. Create context with separation
33
- let appBaseURL = oxyServices.baseURL; // Initially same
34
-
35
- const oxyContext = {
36
- oxyServices,
37
- setApiUrl: (url: string) => {
38
- console.log(`[App] Setting app API URL to: ${url}`);
39
- appBaseURL = url; // Only affects public authFetch
40
- },
41
- getAppBaseURL: () => appBaseURL,
42
- isAuthenticated: true,
43
- user: { id: 'user123', username: 'mentionuser' },
44
- login: async (username: string, password: string) => ({ id: 'user123' }),
45
- logout: async () => {},
46
- signUp: async (username: string, email: string, password: string) => ({ id: 'user123' }),
47
- activeSessionId: 'session123'
48
- };
49
-
50
- // 3. Create authFetch that uses app-specific URL
51
- const authFetch = {
52
- get: async (endpoint: string) => {
53
- const url = `${oxyContext.getAppBaseURL()}${endpoint}`;
54
- console.log(`[AuthFetch] GET ${url}`);
55
- return { data: `Response from ${url}` };
56
- },
57
- post: async (endpoint: string, data: any) => {
58
- const url = `${oxyContext.getAppBaseURL()}${endpoint}`;
59
- console.log(`[AuthFetch] POST ${url}`, data);
60
- return { data: `Posted to ${url}`, created: data };
61
- },
62
- put: async (endpoint: string, data: any) => {
63
- const url = `${oxyContext.getAppBaseURL()}${endpoint}`;
64
- console.log(`[AuthFetch] PUT ${url}`, data);
65
- return { data: `Updated at ${url}`, updated: data };
66
- },
67
- delete: async (endpoint: string) => {
68
- const url = `${oxyContext.getAppBaseURL()}${endpoint}`;
69
- console.log(`[AuthFetch] DELETE ${url}`);
70
- return { data: `Deleted from ${url}` };
71
- },
72
- setApiUrl: oxyContext.setApiUrl,
73
- isAuthenticated: oxyContext.isAuthenticated,
74
- user: oxyContext.user
75
- };
76
-
77
- return { oxyServices, oxyContext, authFetch };
78
- }
79
-
80
- test('should enable Mention app to use its own backend with Oxy authentication', async () => {
81
- console.log('\\n=== Mention App Real-world Test ===\\n');
82
-
83
- const { oxyServices, oxyContext, authFetch } = simulateMentionAppSetup();
84
-
85
- console.log('1. Initial setup - both use Oxy API:');
86
- // Internal authentication calls
87
- await oxyServices.authenticateToken('user-token');
88
-
89
- // Public app calls (initially to Oxy API)
90
- await authFetch.get('/api/user/profile');
91
-
92
- console.log('\\n2. Mention app configures its own backend:');
93
- // This is the key change - app sets its own API URL
94
- authFetch.setApiUrl('https://mention.earth/api');
95
-
96
- console.log('\\n3. After configuration - clean separation:');
97
-
98
- // Internal module calls STILL go to Oxy API
99
- await oxyServices.authenticateToken('user-token');
100
- await oxyServices.refreshTokens();
101
-
102
- // Public authFetch calls now go to Mention's backend
103
- await authFetch.get('/api/mentions');
104
- await authFetch.post('/api/mentions', {
105
- text: 'Hello world from Mention!',
106
- userId: 'user123'
107
- });
108
- await authFetch.put('/api/mentions/123', {
109
- text: 'Updated mention text'
110
- });
111
- await authFetch.delete('/api/mentions/456');
112
-
113
- console.log('\\n4. Verification:');
114
- const internalURL = oxyServices.getBaseURL();
115
- const publicURL = oxyContext.getAppBaseURL();
116
-
117
- console.log(`Internal (Oxy API): ${internalURL}`);
118
- console.log(`Public (Mention API): ${publicURL}`);
119
-
120
- // Verify the separation
121
- expect(internalURL).toBe('https://api.oxy.so');
122
- expect(publicURL).toBe('https://mention.earth/api');
123
-
124
- console.log('\\n✅ Mention app can use Oxy auth with its own backend!');
125
- });
126
-
127
- test('should support multiple Oxy ecosystem apps with different backends', async () => {
128
- console.log('\\n=== Multiple Oxy Apps Test ===\\n');
129
-
130
- // Simulate different apps in the Oxy ecosystem
131
- const apps = [
132
- { name: 'Mention', url: 'https://mention.earth/api' },
133
- { name: 'Homiio', url: 'https://homiio.com/api' },
134
- { name: 'Custom App', url: 'https://my-custom-app.com/api' }
135
- ];
136
-
137
- for (const app of apps) {
138
- console.log(`${app.name} app setup:`);
139
-
140
- const { oxyServices, oxyContext, authFetch } = simulateMentionAppSetup();
141
-
142
- // Each app configures its own backend
143
- authFetch.setApiUrl(app.url);
144
-
145
- // Internal auth still works with Oxy
146
- await oxyServices.authenticateToken('token');
147
-
148
- // App-specific calls go to app backend
149
- await authFetch.get('/api/data');
150
-
151
- // Verify separation for each app
152
- expect(oxyServices.getBaseURL()).toBe('https://api.oxy.so');
153
- expect(oxyContext.getAppBaseURL()).toBe(app.url);
154
-
155
- console.log(` ✅ ${app.name} configured successfully\\n`);
156
- }
157
-
158
- console.log('✅ Multiple apps can coexist with independent backends!');
159
- });
160
-
161
- test('should demonstrate zero-config setup with runtime configuration', async () => {
162
- console.log('\\n=== Zero-Config + Runtime Config Test ===\\n');
163
-
164
- console.log('1. Zero-config setup (as described in issue):');
165
-
166
- // App developer just needs to:
167
- const { oxyServices, authFetch } = simulateMentionAppSetup();
168
-
169
- console.log(' - Create OxyServices instance ✅');
170
- console.log(' - Wrap app with OxyProvider ✅');
171
- console.log(' - Use authFetch in components ✅');
172
-
173
- console.log('\\n2. Runtime configuration (almost zero setup):');
174
-
175
- // App can dynamically configure its API
176
- authFetch.setApiUrl('https://production.myapp.com/api');
177
-
178
- console.log('\\n3. Everything works seamlessly:');
179
-
180
- // Authentication through Oxy
181
- await oxyServices.authenticateToken('user-token');
182
-
183
- // App data through app's backend
184
- await authFetch.get('/api/app-specific-data');
185
- await authFetch.post('/api/app-actions', { action: 'create' });
186
-
187
- console.log('\\n✅ Zero-config setup with runtime flexibility achieved!');
188
- });
189
- });
190
-
191
- describe('Backend integration scenarios', () => {
192
- test('should support backend token validation while frontend uses app API', async () => {
193
- console.log('\\n=== Backend Integration Test ===\\n');
194
-
195
- // Simulate backend middleware
196
- const backendOxyServices = {
197
- baseURL: 'https://api.oxy.so',
198
- authenticateToken: async (token: string) => {
199
- const url = `https://api.oxy.so/auth/validate`;
200
- console.log(`[Backend] Validating token at: ${url}`);
201
- return {
202
- valid: true,
203
- user: { id: 'user123', username: 'testuser' },
204
- userId: 'user123'
205
- };
206
- }
207
- };
208
-
209
- // Simulate frontend using app API
210
- const { authFetch } = simulateMentionAppSetup();
211
- authFetch.setApiUrl('https://myapp.com/api');
212
-
213
- console.log('1. Frontend makes authenticated request to app backend:');
214
- await authFetch.post('/api/protected-endpoint', { data: 'sensitive' });
215
-
216
- console.log('\\n2. Backend validates token with Oxy API:');
217
- const tokenValidation = await backendOxyServices.authenticateToken('user-jwt-token');
218
-
219
- console.log(' Token validation result:', tokenValidation);
220
-
221
- console.log('\\n✅ Backend validates with Oxy, frontend uses app API!');
222
- });
223
- });
224
- });
@@ -1,129 +0,0 @@
1
- /**
2
- * Tests for URL resolution in separated authFetch implementation
3
- */
4
-
5
- describe('URL Resolution Separation', () => {
6
- describe('resolveURL function behavior', () => {
7
- // Mock implementation of resolveURL logic used in useAuthFetch
8
- function resolveURL(input: RequestInfo | URL, baseURL: string): string {
9
- if (!baseURL) {
10
- throw new Error('Base URL not configured. Please provide a baseURL in OxyServices configuration.');
11
- }
12
-
13
- const url = input.toString();
14
-
15
- // If it's already a full URL (http/https), return as is
16
- if (url.startsWith('http://') || url.startsWith('https://')) {
17
- return url;
18
- }
19
-
20
- // Normalize base URL (remove trailing slash)
21
- const normalizedBaseURL = baseURL.replace(/\/$/, '');
22
-
23
- // If URL starts with /, it's relative to base URL
24
- if (url.startsWith('/')) {
25
- return `${normalizedBaseURL}${url}`;
26
- }
27
-
28
- // Otherwise, append to base URL with /
29
- return `${normalizedBaseURL}/${url}`;
30
- }
31
-
32
- test('should resolve relative URLs with app base URL', () => {
33
- const appBaseURL = 'https://myapp.example.com';
34
-
35
- expect(resolveURL('/api/users', appBaseURL)).toBe('https://myapp.example.com/api/users');
36
- expect(resolveURL('api/users', appBaseURL)).toBe('https://myapp.example.com/api/users');
37
- expect(resolveURL('/api/posts', appBaseURL)).toBe('https://myapp.example.com/api/posts');
38
- });
39
-
40
- test('should preserve absolute URLs unchanged', () => {
41
- const appBaseURL = 'https://myapp.example.com';
42
- const absoluteURL = 'https://external-api.example.com/data';
43
-
44
- expect(resolveURL(absoluteURL, appBaseURL)).toBe(absoluteURL);
45
- });
46
-
47
- test('should handle different app base URLs independently', () => {
48
- const appBaseURL1 = 'https://app1.example.com';
49
- const appBaseURL2 = 'https://app2.example.com';
50
- const oxyBaseURL = 'https://api.oxy.so';
51
-
52
- // Same endpoint, different base URLs
53
- expect(resolveURL('/api/users', appBaseURL1)).toBe('https://app1.example.com/api/users');
54
- expect(resolveURL('/api/users', appBaseURL2)).toBe('https://app2.example.com/api/users');
55
- expect(resolveURL('/api/users', oxyBaseURL)).toBe('https://api.oxy.so/api/users');
56
- });
57
-
58
- test('should normalize base URLs correctly', () => {
59
- const baseURLWithSlash = 'https://myapp.example.com/';
60
- const baseURLWithoutSlash = 'https://myapp.example.com';
61
-
62
- expect(resolveURL('/api/users', baseURLWithSlash)).toBe('https://myapp.example.com/api/users');
63
- expect(resolveURL('/api/users', baseURLWithoutSlash)).toBe('https://myapp.example.com/api/users');
64
- });
65
-
66
- test('should throw error for missing base URL', () => {
67
- expect(() => resolveURL('/api/users', '')).toThrow('Base URL not configured');
68
- });
69
- });
70
-
71
- describe('Separation scenarios', () => {
72
- test('should demonstrate independent URL management', () => {
73
- // Simulate the separation: internal vs public URLs
74
- const internalOxyURL = 'https://api.oxy.so';
75
- const publicAppURL = 'https://mention.earth/api';
76
-
77
- // Internal module calls (would use OxyServices base URL)
78
- const internalCall = resolveURL('/auth/validate', internalOxyURL);
79
- expect(internalCall).toBe('https://api.oxy.so/auth/validate');
80
-
81
- // Public authFetch calls (would use app base URL)
82
- const publicCall = resolveURL('/api/mentions', publicAppURL);
83
- expect(publicCall).toBe('https://mention.earth/api/api/mentions');
84
- });
85
-
86
- test('should support dynamic app URL changes', () => {
87
- // Simulate changing app URL without affecting internal URL
88
- let appBaseURL = 'https://staging.myapp.com';
89
- const oxyBaseURL = 'https://api.oxy.so';
90
-
91
- // Initial state
92
- expect(resolveURL('/api/data', appBaseURL)).toBe('https://staging.myapp.com/api/data');
93
- expect(resolveURL('/auth/me', oxyBaseURL)).toBe('https://api.oxy.so/auth/me');
94
-
95
- // App changes its URL
96
- appBaseURL = 'https://production.myapp.com';
97
-
98
- // App URLs updated
99
- expect(resolveURL('/api/data', appBaseURL)).toBe('https://production.myapp.com/api/data');
100
- // Internal URLs unchanged
101
- expect(resolveURL('/auth/me', oxyBaseURL)).toBe('https://api.oxy.so/auth/me');
102
- });
103
- });
104
-
105
- // Helper function to mimic resolveURL from the actual implementation
106
- function resolveURL(input: RequestInfo | URL, baseURL: string): string {
107
- if (!baseURL) {
108
- throw new Error('Base URL not configured. Please provide a baseURL in OxyServices configuration.');
109
- }
110
-
111
- const url = input.toString();
112
-
113
- // If it's already a full URL (http/https), return as is
114
- if (url.startsWith('http://') || url.startsWith('https://')) {
115
- return url;
116
- }
117
-
118
- // Normalize base URL (remove trailing slash)
119
- const normalizedBaseURL = baseURL.replace(/\/$/, '');
120
-
121
- // If URL starts with /, it's relative to base URL
122
- if (url.startsWith('/')) {
123
- return `${normalizedBaseURL}${url}`;
124
- }
125
-
126
- // Otherwise, append to base URL with /
127
- return `${normalizedBaseURL}/${url}`;
128
- }
129
- });
@@ -1,69 +0,0 @@
1
- /**
2
- * Tests for authFetch separation between public and internal usage
3
- */
4
-
5
- import { OxyServices } from '../../../core';
6
-
7
- describe('AuthFetch Separation', () => {
8
- let oxyServices: OxyServices;
9
-
10
- beforeEach(() => {
11
- oxyServices = new OxyServices({
12
- baseURL: 'https://api.oxy.so'
13
- });
14
- });
15
-
16
- describe('OxyServices internal base URL isolation', () => {
17
- test('should preserve original base URL for internal calls', () => {
18
- const originalBaseURL = 'https://api.oxy.so';
19
-
20
- // Verify initial state
21
- expect(oxyServices.getBaseURL()).toBe(originalBaseURL);
22
-
23
- // Simulate app changing its own base URL (this should not affect OxyServices)
24
- // Note: In the new implementation, setApiUrl only affects app authFetch, not OxyServices
25
- const appBaseURL = 'https://app-api.example.com';
26
-
27
- // OxyServices base URL should remain unchanged
28
- expect(oxyServices.getBaseURL()).toBe(originalBaseURL);
29
- });
30
-
31
- test('should handle OxyServices base URL changes separately', () => {
32
- const originalBaseURL = 'https://api.oxy.so';
33
- const newOxyBaseURL = 'https://new-oxy-api.example.com';
34
-
35
- expect(oxyServices.getBaseURL()).toBe(originalBaseURL);
36
-
37
- // This should still work for internal module updates
38
- oxyServices.setBaseURL(newOxyBaseURL);
39
- expect(oxyServices.getBaseURL()).toBe(newOxyBaseURL);
40
- });
41
-
42
- test('should maintain separation - internal vs public URLs', () => {
43
- const oxyBaseURL = 'https://api.oxy.so';
44
- const appBaseURL = 'https://myapp.example.com';
45
-
46
- // OxyServices keeps its own URL for internal calls
47
- expect(oxyServices.getBaseURL()).toBe(oxyBaseURL);
48
-
49
- // App can have its own URL (this would be managed in context)
50
- // The separation ensures these don't interfere with each other
51
- expect(oxyBaseURL).not.toBe(appBaseURL);
52
- });
53
- });
54
-
55
- describe('URL validation and error handling', () => {
56
- test('should validate URLs properly', () => {
57
- expect(() => oxyServices.setBaseURL('')).toThrow('Base URL cannot be empty');
58
- expect(() => oxyServices.setBaseURL('not-a-url')).not.toThrow(); // axios will handle invalid URLs
59
- });
60
-
61
- test('should handle URL normalization', () => {
62
- oxyServices.setBaseURL('https://api.example.com/');
63
- expect(oxyServices.getBaseURL()).toBe('https://api.example.com/');
64
-
65
- oxyServices.setBaseURL('https://api.example.com');
66
- expect(oxyServices.getBaseURL()).toBe('https://api.example.com');
67
- });
68
- });
69
- });
@@ -1,70 +0,0 @@
1
- /**
2
- * Tests for refactored useAuthFetch hook
3
- */
4
-
5
- import { OxyServices } from '../../../core';
6
-
7
- describe('useAuthFetch', () => {
8
- let oxyServices: OxyServices;
9
-
10
- beforeEach(() => {
11
- oxyServices = new OxyServices({
12
- baseURL: 'https://api.test.com'
13
- });
14
- });
15
-
16
- describe('OxyServices integration', () => {
17
- test('should set and get base URL', () => {
18
- expect(oxyServices.getBaseURL()).toBe('https://api.test.com');
19
-
20
- oxyServices.setBaseURL('https://new-api.test.com');
21
- expect(oxyServices.getBaseURL()).toBe('https://new-api.test.com');
22
- });
23
-
24
- test('should throw error for empty base URL', () => {
25
- expect(() => oxyServices.setBaseURL('')).toThrow('Base URL cannot be empty');
26
- });
27
-
28
- test('should handle token validation methods', () => {
29
- // Test that core methods exist
30
- expect(typeof oxyServices.getAccessToken).toBe('function');
31
- expect(typeof oxyServices.setTokens).toBe('function');
32
- expect(typeof oxyServices.clearTokens).toBe('function');
33
- expect(typeof oxyServices.refreshTokens).toBe('function');
34
- });
35
- });
36
-
37
- describe('URL resolution', () => {
38
- test('should resolve relative URLs correctly', () => {
39
- // This tests the logic that would be used in resolveURL function
40
- const baseURL = 'https://api.test.com';
41
-
42
- // Test relative URL with leading slash
43
- const relativeUrl = '/api/users';
44
- const expectedUrl = `${baseURL}${relativeUrl}`;
45
- expect(expectedUrl).toBe('https://api.test.com/api/users');
46
-
47
- // Test relative URL without leading slash
48
- const relativeUrl2 = 'api/users';
49
- const expectedUrl2 = `${baseURL}/${relativeUrl2}`;
50
- expect(expectedUrl2).toBe('https://api.test.com/api/users');
51
-
52
- // Test absolute URL (should remain unchanged)
53
- const absoluteUrl = 'https://other-api.test.com/api/users';
54
- expect(absoluteUrl).toBe('https://other-api.test.com/api/users');
55
- });
56
- });
57
-
58
- describe('Authentication middleware compatibility', () => {
59
- test('should create middleware function', () => {
60
- const middleware = oxyServices.createAuthenticateTokenMiddleware();
61
- expect(typeof middleware).toBe('function');
62
- });
63
-
64
- test('should validate tokens', async () => {
65
- const result = await oxyServices.authenticateToken('invalid-token');
66
- expect(result.valid).toBe(false);
67
- expect(result.error).toBeTruthy();
68
- });
69
- });
70
- });
@@ -1,92 +0,0 @@
1
- import { renderHook } from '@testing-library/react-native';
2
- import { Provider } from 'react-redux';
3
- import { configureStore } from '@reduxjs/toolkit';
4
- import { useOxyFollow } from '../../../ui/hooks/useOxyFollow';
5
- import { setupOxyStore } from '../../../ui/store/setupOxyStore';
6
- import { OxyContextProvider } from '../../../ui/context/OxyContext';
7
- import React from 'react';
8
-
9
- // Mock OxyServices
10
- const mockOxyServices = {
11
- getFollowStatus: jest.fn(),
12
- followUser: jest.fn(),
13
- unfollowUser: jest.fn(),
14
- };
15
-
16
- const createTestStore = () => {
17
- return configureStore({
18
- reducer: {
19
- ...setupOxyStore(),
20
- },
21
- });
22
- };
23
-
24
- const createWrapper = (store: ReturnType<typeof createTestStore>) => {
25
- return ({ children }: { children: React.ReactNode }) => (
26
- <Provider store={store}>
27
- <OxyContextProvider oxyServices={mockOxyServices}>
28
- {children}
29
- </OxyContextProvider>
30
- </Provider>
31
- );
32
- };
33
-
34
- describe('useOxyFollow', () => {
35
- beforeEach(() => {
36
- jest.clearAllMocks();
37
- });
38
-
39
- test('should work with external store containing Oxy reducers', () => {
40
- const store = createTestStore();
41
- const wrapper = createWrapper(store);
42
-
43
- const { result } = renderHook(() => useOxyFollow('user1'), { wrapper });
44
-
45
- expect(result.current).toHaveProperty('isFollowing');
46
- expect(result.current).toHaveProperty('isLoading');
47
- expect(result.current).toHaveProperty('error');
48
- expect(result.current).toHaveProperty('toggleFollow');
49
- expect(result.current).toHaveProperty('setFollowStatus');
50
- expect(result.current).toHaveProperty('fetchStatus');
51
- expect(result.current).toHaveProperty('clearError');
52
- });
53
-
54
- test('should support multiple users mode', () => {
55
- const store = createTestStore();
56
- const wrapper = createWrapper(store);
57
-
58
- const { result } = renderHook(() => useOxyFollow(['user1', 'user2']), { wrapper });
59
-
60
- expect(result.current).toHaveProperty('followData');
61
- expect(result.current).toHaveProperty('toggleFollowForUser');
62
- expect(result.current).toHaveProperty('setFollowStatusForUser');
63
- expect(result.current).toHaveProperty('fetchStatusForUser');
64
- expect(result.current).toHaveProperty('fetchAllStatuses');
65
- expect(result.current).toHaveProperty('clearErrorForUser');
66
- expect(result.current).toHaveProperty('isAnyLoading');
67
- expect(result.current).toHaveProperty('hasAnyError');
68
- expect(result.current).toHaveProperty('allFollowing');
69
- expect(result.current).toHaveProperty('allNotFollowing');
70
- });
71
-
72
- test('should integrate with custom app reducers', () => {
73
- const store = configureStore({
74
- reducer: {
75
- ...setupOxyStore(),
76
- customApp: (state = { feature: 'enabled' }) => state,
77
- },
78
- });
79
-
80
- const wrapper = createWrapper(store);
81
-
82
- const { result } = renderHook(() => useOxyFollow('user1'), { wrapper });
83
-
84
- // Should still work with Oxy features
85
- expect(result.current.isFollowing).toBe(false);
86
- expect(result.current.isLoading).toBe(false);
87
-
88
- // Custom app state should also be accessible in the store
89
- const state = store.getState();
90
- expect(state.customApp.feature).toBe('enabled');
91
- });
92
- });