@oxyhq/services 5.17.17 → 5.18.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 (618) hide show
  1. package/README.md +32 -38
  2. package/lib/commonjs/core/CrossDomainAuth.js +277 -0
  3. package/lib/commonjs/core/CrossDomainAuth.js.map +1 -0
  4. package/lib/commonjs/core/HttpService.js +82 -15
  5. package/lib/commonjs/core/HttpService.js.map +1 -1
  6. package/lib/commonjs/core/OxyServices.base.js +11 -3
  7. package/lib/commonjs/core/OxyServices.base.js.map +1 -1
  8. package/lib/commonjs/core/OxyServices.js +4 -1
  9. package/lib/commonjs/core/OxyServices.js.map +1 -1
  10. package/lib/commonjs/core/index.js +30 -0
  11. package/lib/commonjs/core/index.js.map +1 -1
  12. package/lib/commonjs/core/mixins/OxyServices.assets.js +16 -3
  13. package/lib/commonjs/core/mixins/OxyServices.assets.js.map +1 -1
  14. package/lib/commonjs/core/mixins/OxyServices.auth.js +73 -32
  15. package/lib/commonjs/core/mixins/OxyServices.auth.js.map +1 -1
  16. package/lib/commonjs/core/mixins/OxyServices.features.js +372 -0
  17. package/lib/commonjs/core/mixins/OxyServices.features.js.map +1 -0
  18. package/lib/commonjs/core/mixins/OxyServices.fedcm.js +289 -0
  19. package/lib/commonjs/core/mixins/OxyServices.fedcm.js.map +1 -0
  20. package/lib/commonjs/core/mixins/OxyServices.popup.js +352 -0
  21. package/lib/commonjs/core/mixins/OxyServices.popup.js.map +1 -0
  22. package/lib/commonjs/core/mixins/OxyServices.redirect.js +378 -0
  23. package/lib/commonjs/core/mixins/OxyServices.redirect.js.map +1 -0
  24. package/lib/commonjs/core/mixins/OxyServices.user.js +35 -24
  25. package/lib/commonjs/core/mixins/OxyServices.user.js.map +1 -1
  26. package/lib/commonjs/core/mixins/index.js +28 -15
  27. package/lib/commonjs/core/mixins/index.js.map +1 -1
  28. package/lib/commonjs/crypto/index.js +30 -0
  29. package/lib/commonjs/crypto/index.js.map +1 -1
  30. package/lib/commonjs/crypto/keyManager.js +902 -0
  31. package/lib/commonjs/crypto/keyManager.js.map +1 -0
  32. package/lib/commonjs/crypto/polyfill.js +14 -5
  33. package/lib/commonjs/crypto/polyfill.js.map +1 -1
  34. package/lib/commonjs/crypto/recoveryPhrase.js +152 -0
  35. package/lib/commonjs/crypto/recoveryPhrase.js.map +1 -0
  36. package/lib/commonjs/crypto/signatureService.js +289 -0
  37. package/lib/commonjs/crypto/signatureService.js.map +1 -0
  38. package/lib/commonjs/i18n/locales/en-US.json +1 -1
  39. package/lib/commonjs/index.js +40 -26
  40. package/lib/commonjs/index.js.map +1 -1
  41. package/lib/commonjs/models/interfaces.js +0 -15
  42. package/lib/commonjs/models/interfaces.js.map +1 -1
  43. package/lib/commonjs/ui/components/BottomSheetRouter.js +9 -1
  44. package/lib/commonjs/ui/components/BottomSheetRouter.js.map +1 -1
  45. package/lib/commonjs/ui/components/GroupedItem.js +11 -1
  46. package/lib/commonjs/ui/components/GroupedItem.js.map +1 -1
  47. package/lib/commonjs/ui/components/Icon.js.map +1 -1
  48. package/lib/commonjs/ui/components/IconButton/utils.js.map +1 -1
  49. package/lib/commonjs/ui/components/OxyProvider.js +41 -11
  50. package/lib/commonjs/ui/components/OxyProvider.js.map +1 -1
  51. package/lib/commonjs/ui/components/SettingRow.js +17 -4
  52. package/lib/commonjs/ui/components/SettingRow.js.map +1 -1
  53. package/lib/commonjs/ui/components/TextField/Adornment/utils.js.map +1 -1
  54. package/lib/commonjs/ui/components/TextField/helpers.js.map +1 -1
  55. package/lib/commonjs/ui/components/TouchableRipple/utils.js.map +1 -1
  56. package/lib/commonjs/ui/components/Typography/AnimatedText.js.map +1 -1
  57. package/lib/commonjs/ui/components/feedback/FormInput.js +72 -0
  58. package/lib/commonjs/ui/components/feedback/FormInput.js.map +1 -0
  59. package/lib/commonjs/ui/components/feedback/ProgressIndicator.js +33 -0
  60. package/lib/commonjs/ui/components/feedback/ProgressIndicator.js.map +1 -0
  61. package/lib/commonjs/ui/components/feedback/constants.js +59 -0
  62. package/lib/commonjs/ui/components/feedback/constants.js.map +1 -0
  63. package/lib/commonjs/ui/components/feedback/feedbackStyles.js +262 -0
  64. package/lib/commonjs/ui/components/feedback/feedbackStyles.js.map +1 -0
  65. package/lib/commonjs/ui/components/feedback/index.js +54 -0
  66. package/lib/commonjs/ui/components/feedback/index.js.map +1 -0
  67. package/lib/commonjs/ui/components/feedback/types.js +6 -0
  68. package/lib/commonjs/ui/components/feedback/types.js.map +1 -0
  69. package/lib/commonjs/ui/components/feedback/useFeedbackForm.js +52 -0
  70. package/lib/commonjs/ui/components/feedback/useFeedbackForm.js.map +1 -0
  71. package/lib/commonjs/ui/components/modals/DeleteAccountModal.js +282 -0
  72. package/lib/commonjs/ui/components/modals/DeleteAccountModal.js.map +1 -0
  73. package/lib/commonjs/ui/components/modals/index.js +14 -0
  74. package/lib/commonjs/ui/components/modals/index.js.map +1 -0
  75. package/lib/commonjs/ui/components/payment/PaymentDetailsStep.js +309 -0
  76. package/lib/commonjs/ui/components/payment/PaymentDetailsStep.js.map +1 -0
  77. package/lib/commonjs/ui/components/payment/PaymentMethodStep.js +79 -0
  78. package/lib/commonjs/ui/components/payment/PaymentMethodStep.js.map +1 -0
  79. package/lib/commonjs/ui/components/payment/PaymentReviewStep.js +108 -0
  80. package/lib/commonjs/ui/components/payment/PaymentReviewStep.js.map +1 -0
  81. package/lib/commonjs/ui/components/payment/PaymentSuccessStep.js +79 -0
  82. package/lib/commonjs/ui/components/payment/PaymentSuccessStep.js.map +1 -0
  83. package/lib/commonjs/ui/components/payment/PaymentSummaryStep.js +176 -0
  84. package/lib/commonjs/ui/components/payment/PaymentSummaryStep.js.map +1 -0
  85. package/lib/commonjs/ui/components/payment/constants.js +53 -0
  86. package/lib/commonjs/ui/components/payment/constants.js.map +1 -0
  87. package/lib/commonjs/ui/components/payment/index.js +80 -0
  88. package/lib/commonjs/ui/components/payment/index.js.map +1 -0
  89. package/lib/commonjs/ui/components/payment/paymentStyles.js +409 -0
  90. package/lib/commonjs/ui/components/payment/paymentStyles.js.map +1 -0
  91. package/lib/commonjs/ui/components/payment/types.js +6 -0
  92. package/lib/commonjs/ui/components/payment/types.js.map +1 -0
  93. package/lib/commonjs/ui/context/OxyContext.js +110 -199
  94. package/lib/commonjs/ui/context/OxyContext.js.map +1 -1
  95. package/lib/commonjs/ui/context/hooks/useAuthOperations.js +150 -19
  96. package/lib/commonjs/ui/context/hooks/useAuthOperations.js.map +1 -1
  97. package/lib/commonjs/ui/context/hooks/useSessionManagement.js +279 -0
  98. package/lib/commonjs/ui/context/hooks/useSessionManagement.js.map +1 -0
  99. package/lib/commonjs/ui/hooks/index.js +26 -0
  100. package/lib/commonjs/ui/hooks/index.js.map +1 -1
  101. package/lib/commonjs/ui/hooks/mutations/useAccountMutations.js +79 -72
  102. package/lib/commonjs/ui/hooks/mutations/useAccountMutations.js.map +1 -1
  103. package/lib/commonjs/ui/hooks/queries/useAccountQueries.js +38 -51
  104. package/lib/commonjs/ui/hooks/queries/useAccountQueries.js.map +1 -1
  105. package/lib/commonjs/ui/hooks/queries/useSecurityQueries.js +3 -3
  106. package/lib/commonjs/ui/hooks/queries/useSecurityQueries.js.map +1 -1
  107. package/lib/commonjs/ui/hooks/queries/useServicesQueries.js +18 -12
  108. package/lib/commonjs/ui/hooks/queries/useServicesQueries.js.map +1 -1
  109. package/lib/commonjs/ui/hooks/useAsyncAction.js +95 -0
  110. package/lib/commonjs/ui/hooks/useAsyncAction.js.map +1 -0
  111. package/lib/commonjs/ui/hooks/useProfileEditing.js +3 -5
  112. package/lib/commonjs/ui/hooks/useProfileEditing.js.map +1 -1
  113. package/lib/commonjs/ui/hooks/useSessionManagement.js +4 -8
  114. package/lib/commonjs/ui/hooks/useSessionManagement.js.map +1 -1
  115. package/lib/commonjs/ui/hooks/useSessionSocket.js +162 -315
  116. package/lib/commonjs/ui/hooks/useSessionSocket.js.map +1 -1
  117. package/lib/commonjs/ui/hooks/useSettingToggle.js +126 -0
  118. package/lib/commonjs/ui/hooks/useSettingToggle.js.map +1 -0
  119. package/lib/commonjs/ui/hooks/useStorage.js +24 -58
  120. package/lib/commonjs/ui/hooks/useStorage.js.map +1 -1
  121. package/lib/commonjs/ui/index.js +50 -21
  122. package/lib/commonjs/ui/index.js.map +1 -1
  123. package/lib/commonjs/ui/navigation/routes.js +6 -1
  124. package/lib/commonjs/ui/navigation/routes.js.map +1 -1
  125. package/lib/commonjs/ui/screens/AccountCenterScreen.js +6 -4
  126. package/lib/commonjs/ui/screens/AccountCenterScreen.js.map +1 -1
  127. package/lib/commonjs/ui/screens/AccountOverviewScreen.js +33 -30
  128. package/lib/commonjs/ui/screens/AccountOverviewScreen.js.map +1 -1
  129. package/lib/commonjs/ui/screens/AccountSettingsScreen.js +29 -24
  130. package/lib/commonjs/ui/screens/AccountSettingsScreen.js.map +1 -1
  131. package/lib/commonjs/ui/screens/AccountSwitcherScreen.js +3 -3
  132. package/lib/commonjs/ui/screens/AccountSwitcherScreen.js.map +1 -1
  133. package/lib/commonjs/ui/screens/FAQScreen.js +315 -0
  134. package/lib/commonjs/ui/screens/FAQScreen.js.map +1 -0
  135. package/lib/commonjs/ui/screens/FeedbackScreen.js +73 -590
  136. package/lib/commonjs/ui/screens/FeedbackScreen.js.map +1 -1
  137. package/lib/commonjs/ui/screens/HelpSupportScreen.js +8 -7
  138. package/lib/commonjs/ui/screens/HelpSupportScreen.js.map +1 -1
  139. package/lib/commonjs/ui/screens/OxyAuthScreen.js +134 -66
  140. package/lib/commonjs/ui/screens/OxyAuthScreen.js.map +1 -1
  141. package/lib/commonjs/ui/screens/PaymentGatewayScreen.js +67 -1395
  142. package/lib/commonjs/ui/screens/PaymentGatewayScreen.js.map +1 -1
  143. package/lib/commonjs/ui/screens/PrivacySettingsScreen.js +6 -13
  144. package/lib/commonjs/ui/screens/PrivacySettingsScreen.js.map +1 -1
  145. package/lib/commonjs/ui/screens/ProfileScreen.js +13 -5
  146. package/lib/commonjs/ui/screens/ProfileScreen.js.map +1 -1
  147. package/lib/commonjs/ui/screens/SavesCollectionsScreen.js +16 -10
  148. package/lib/commonjs/ui/screens/SavesCollectionsScreen.js.map +1 -1
  149. package/lib/commonjs/ui/screens/karma/KarmaCenterScreen.js +23 -11
  150. package/lib/commonjs/ui/screens/karma/KarmaCenterScreen.js.map +1 -1
  151. package/lib/commonjs/ui/stores/accountStore.js +2 -4
  152. package/lib/commonjs/ui/stores/accountStore.js.map +1 -1
  153. package/lib/commonjs/ui/stores/authStore.js +45 -32
  154. package/lib/commonjs/ui/stores/authStore.js.map +1 -1
  155. package/lib/commonjs/ui/styles/spacing.js +54 -2
  156. package/lib/commonjs/ui/styles/spacing.js.map +1 -1
  157. package/lib/commonjs/ui/utils/avatarUtils.js +37 -41
  158. package/lib/commonjs/ui/utils/avatarUtils.js.map +1 -1
  159. package/lib/commonjs/ui/utils/storageHelpers.js.map +1 -1
  160. package/lib/commonjs/utils/errorUtils.js +13 -0
  161. package/lib/commonjs/utils/errorUtils.js.map +1 -1
  162. package/lib/commonjs/utils/validationUtils.js +15 -1
  163. package/lib/commonjs/utils/validationUtils.js.map +1 -1
  164. package/lib/module/core/CrossDomainAuth.js +271 -0
  165. package/lib/module/core/CrossDomainAuth.js.map +1 -0
  166. package/lib/module/core/HttpService.js +82 -15
  167. package/lib/module/core/HttpService.js.map +1 -1
  168. package/lib/module/core/OxyServices.base.js +11 -4
  169. package/lib/module/core/OxyServices.base.js.map +1 -1
  170. package/lib/module/core/OxyServices.js +4 -1
  171. package/lib/module/core/OxyServices.js.map +1 -1
  172. package/lib/module/core/index.js +6 -1
  173. package/lib/module/core/index.js.map +1 -1
  174. package/lib/module/core/mixins/OxyServices.assets.js +16 -3
  175. package/lib/module/core/mixins/OxyServices.assets.js.map +1 -1
  176. package/lib/module/core/mixins/OxyServices.auth.js +73 -32
  177. package/lib/module/core/mixins/OxyServices.auth.js.map +1 -1
  178. package/lib/module/core/mixins/OxyServices.features.js +369 -0
  179. package/lib/module/core/mixins/OxyServices.features.js.map +1 -0
  180. package/lib/module/core/mixins/OxyServices.fedcm.js +286 -0
  181. package/lib/module/core/mixins/OxyServices.fedcm.js.map +1 -0
  182. package/lib/module/core/mixins/OxyServices.popup.js +349 -0
  183. package/lib/module/core/mixins/OxyServices.popup.js.map +1 -0
  184. package/lib/module/core/mixins/OxyServices.redirect.js +375 -0
  185. package/lib/module/core/mixins/OxyServices.redirect.js.map +1 -0
  186. package/lib/module/core/mixins/OxyServices.user.js +35 -24
  187. package/lib/module/core/mixins/OxyServices.user.js.map +1 -1
  188. package/lib/module/core/mixins/index.js +16 -3
  189. package/lib/module/core/mixins/index.js.map +1 -1
  190. package/lib/module/crypto/index.js +8 -4
  191. package/lib/module/crypto/index.js.map +1 -1
  192. package/lib/module/crypto/keyManager.js +899 -0
  193. package/lib/module/crypto/keyManager.js.map +1 -0
  194. package/lib/module/crypto/polyfill.js +6 -5
  195. package/lib/module/crypto/polyfill.js.map +1 -1
  196. package/lib/module/crypto/recoveryPhrase.js +147 -0
  197. package/lib/module/crypto/recoveryPhrase.js.map +1 -0
  198. package/lib/module/crypto/signatureService.js +286 -0
  199. package/lib/module/crypto/signatureService.js.map +1 -0
  200. package/lib/module/i18n/locales/en-US.json +1 -1
  201. package/lib/module/index.js +6 -9
  202. package/lib/module/index.js.map +1 -1
  203. package/lib/module/models/interfaces.js +0 -15
  204. package/lib/module/models/interfaces.js.map +1 -1
  205. package/lib/module/ui/components/BottomSheetRouter.js +6 -2
  206. package/lib/module/ui/components/BottomSheetRouter.js.map +1 -1
  207. package/lib/module/ui/components/GroupedItem.js +11 -1
  208. package/lib/module/ui/components/GroupedItem.js.map +1 -1
  209. package/lib/module/ui/components/Icon.js.map +1 -1
  210. package/lib/module/ui/components/IconButton/utils.js.map +1 -1
  211. package/lib/module/ui/components/OxyProvider.js +41 -11
  212. package/lib/module/ui/components/OxyProvider.js.map +1 -1
  213. package/lib/module/ui/components/SettingRow.js +17 -4
  214. package/lib/module/ui/components/SettingRow.js.map +1 -1
  215. package/lib/module/ui/components/TextField/Adornment/utils.js.map +1 -1
  216. package/lib/module/ui/components/TextField/helpers.js.map +1 -1
  217. package/lib/module/ui/components/TouchableRipple/utils.js.map +1 -1
  218. package/lib/module/ui/components/Typography/AnimatedText.js.map +1 -1
  219. package/lib/module/ui/components/feedback/FormInput.js +67 -0
  220. package/lib/module/ui/components/feedback/FormInput.js.map +1 -0
  221. package/lib/module/ui/components/feedback/ProgressIndicator.js +28 -0
  222. package/lib/module/ui/components/feedback/ProgressIndicator.js.map +1 -0
  223. package/lib/module/ui/components/feedback/constants.js +55 -0
  224. package/lib/module/ui/components/feedback/constants.js.map +1 -0
  225. package/lib/module/ui/components/feedback/feedbackStyles.js +257 -0
  226. package/lib/module/ui/components/feedback/feedbackStyles.js.map +1 -0
  227. package/lib/module/ui/components/feedback/index.js +8 -0
  228. package/lib/module/ui/components/feedback/index.js.map +1 -0
  229. package/lib/module/ui/components/feedback/types.js +4 -0
  230. package/lib/module/ui/components/feedback/types.js.map +1 -0
  231. package/lib/module/ui/components/feedback/useFeedbackForm.js +47 -0
  232. package/lib/module/ui/components/feedback/useFeedbackForm.js.map +1 -0
  233. package/lib/module/ui/components/modals/DeleteAccountModal.js +276 -0
  234. package/lib/module/ui/components/modals/DeleteAccountModal.js.map +1 -0
  235. package/lib/module/ui/components/modals/index.js +4 -0
  236. package/lib/module/ui/components/modals/index.js.map +1 -0
  237. package/lib/module/ui/components/payment/PaymentDetailsStep.js +303 -0
  238. package/lib/module/ui/components/payment/PaymentDetailsStep.js.map +1 -0
  239. package/lib/module/ui/components/payment/PaymentMethodStep.js +73 -0
  240. package/lib/module/ui/components/payment/PaymentMethodStep.js.map +1 -0
  241. package/lib/module/ui/components/payment/PaymentReviewStep.js +102 -0
  242. package/lib/module/ui/components/payment/PaymentReviewStep.js.map +1 -0
  243. package/lib/module/ui/components/payment/PaymentSuccessStep.js +73 -0
  244. package/lib/module/ui/components/payment/PaymentSuccessStep.js.map +1 -0
  245. package/lib/module/ui/components/payment/PaymentSummaryStep.js +170 -0
  246. package/lib/module/ui/components/payment/PaymentSummaryStep.js.map +1 -0
  247. package/lib/module/ui/components/payment/constants.js +47 -0
  248. package/lib/module/ui/components/payment/constants.js.map +1 -0
  249. package/lib/module/ui/components/payment/index.js +10 -0
  250. package/lib/module/ui/components/payment/index.js.map +1 -0
  251. package/lib/module/ui/components/payment/paymentStyles.js +404 -0
  252. package/lib/module/ui/components/payment/paymentStyles.js.map +1 -0
  253. package/lib/module/ui/components/payment/types.js +4 -0
  254. package/lib/module/ui/components/payment/types.js.map +1 -0
  255. package/lib/module/ui/context/OxyContext.js +112 -191
  256. package/lib/module/ui/context/OxyContext.js.map +1 -1
  257. package/lib/module/ui/context/hooks/useAuthOperations.js +150 -19
  258. package/lib/module/ui/context/hooks/useAuthOperations.js.map +1 -1
  259. package/lib/module/ui/context/hooks/useSessionManagement.js +274 -0
  260. package/lib/module/ui/context/hooks/useSessionManagement.js.map +1 -0
  261. package/lib/module/ui/hooks/index.js +2 -0
  262. package/lib/module/ui/hooks/index.js.map +1 -1
  263. package/lib/module/ui/hooks/mutations/useAccountMutations.js +80 -72
  264. package/lib/module/ui/hooks/mutations/useAccountMutations.js.map +1 -1
  265. package/lib/module/ui/hooks/queries/useAccountQueries.js +31 -44
  266. package/lib/module/ui/hooks/queries/useAccountQueries.js.map +1 -1
  267. package/lib/module/ui/hooks/queries/useSecurityQueries.js +1 -1
  268. package/lib/module/ui/hooks/queries/useSecurityQueries.js.map +1 -1
  269. package/lib/module/ui/hooks/queries/useServicesQueries.js +13 -7
  270. package/lib/module/ui/hooks/queries/useServicesQueries.js.map +1 -1
  271. package/lib/module/ui/hooks/useAsyncAction.js +89 -0
  272. package/lib/module/ui/hooks/useAsyncAction.js.map +1 -0
  273. package/lib/module/ui/hooks/useProfileEditing.js +3 -5
  274. package/lib/module/ui/hooks/useProfileEditing.js.map +1 -1
  275. package/lib/module/ui/hooks/useSessionManagement.js +4 -8
  276. package/lib/module/ui/hooks/useSessionManagement.js.map +1 -1
  277. package/lib/module/ui/hooks/useSessionSocket.js +162 -315
  278. package/lib/module/ui/hooks/useSessionSocket.js.map +1 -1
  279. package/lib/module/ui/hooks/useSettingToggle.js +120 -0
  280. package/lib/module/ui/hooks/useSettingToggle.js.map +1 -0
  281. package/lib/module/ui/hooks/useStorage.js +25 -59
  282. package/lib/module/ui/hooks/useStorage.js.map +1 -1
  283. package/lib/module/ui/index.js +15 -10
  284. package/lib/module/ui/index.js.map +1 -1
  285. package/lib/module/ui/navigation/routes.js +6 -1
  286. package/lib/module/ui/navigation/routes.js.map +1 -1
  287. package/lib/module/ui/screens/AccountCenterScreen.js +6 -4
  288. package/lib/module/ui/screens/AccountCenterScreen.js.map +1 -1
  289. package/lib/module/ui/screens/AccountOverviewScreen.js +33 -30
  290. package/lib/module/ui/screens/AccountOverviewScreen.js.map +1 -1
  291. package/lib/module/ui/screens/AccountSettingsScreen.js +29 -24
  292. package/lib/module/ui/screens/AccountSettingsScreen.js.map +1 -1
  293. package/lib/module/ui/screens/AccountSwitcherScreen.js +3 -3
  294. package/lib/module/ui/screens/AccountSwitcherScreen.js.map +1 -1
  295. package/lib/module/ui/screens/FAQScreen.js +310 -0
  296. package/lib/module/ui/screens/FAQScreen.js.map +1 -0
  297. package/lib/module/ui/screens/FeedbackScreen.js +64 -581
  298. package/lib/module/ui/screens/FeedbackScreen.js.map +1 -1
  299. package/lib/module/ui/screens/HelpSupportScreen.js +8 -7
  300. package/lib/module/ui/screens/HelpSupportScreen.js.map +1 -1
  301. package/lib/module/ui/screens/OxyAuthScreen.js +135 -68
  302. package/lib/module/ui/screens/OxyAuthScreen.js.map +1 -1
  303. package/lib/module/ui/screens/PaymentGatewayScreen.js +67 -1397
  304. package/lib/module/ui/screens/PaymentGatewayScreen.js.map +1 -1
  305. package/lib/module/ui/screens/PrivacySettingsScreen.js +6 -13
  306. package/lib/module/ui/screens/PrivacySettingsScreen.js.map +1 -1
  307. package/lib/module/ui/screens/ProfileScreen.js +13 -5
  308. package/lib/module/ui/screens/ProfileScreen.js.map +1 -1
  309. package/lib/module/ui/screens/SavesCollectionsScreen.js +16 -10
  310. package/lib/module/ui/screens/SavesCollectionsScreen.js.map +1 -1
  311. package/lib/module/ui/screens/karma/KarmaCenterScreen.js +23 -11
  312. package/lib/module/ui/screens/karma/KarmaCenterScreen.js.map +1 -1
  313. package/lib/module/ui/stores/accountStore.js +2 -4
  314. package/lib/module/ui/stores/accountStore.js.map +1 -1
  315. package/lib/module/ui/stores/authStore.js +45 -32
  316. package/lib/module/ui/stores/authStore.js.map +1 -1
  317. package/lib/module/ui/styles/spacing.js +6 -2
  318. package/lib/module/ui/styles/spacing.js.map +1 -1
  319. package/lib/module/ui/utils/avatarUtils.js +37 -40
  320. package/lib/module/ui/utils/avatarUtils.js.map +1 -1
  321. package/lib/module/ui/utils/storageHelpers.js.map +1 -1
  322. package/lib/module/utils/errorUtils.js +7 -0
  323. package/lib/module/utils/errorUtils.js.map +1 -1
  324. package/lib/module/utils/validationUtils.js +13 -0
  325. package/lib/module/utils/validationUtils.js.map +1 -1
  326. package/lib/typescript/core/CrossDomainAuth.d.ts +161 -0
  327. package/lib/typescript/core/CrossDomainAuth.d.ts.map +1 -0
  328. package/lib/typescript/core/HttpService.d.ts +1 -1
  329. package/lib/typescript/core/HttpService.d.ts.map +1 -1
  330. package/lib/typescript/core/OxyServices.base.d.ts +0 -6
  331. package/lib/typescript/core/OxyServices.base.d.ts.map +1 -1
  332. package/lib/typescript/core/OxyServices.d.ts +5 -36
  333. package/lib/typescript/core/OxyServices.d.ts.map +1 -1
  334. package/lib/typescript/core/index.d.ts +4 -0
  335. package/lib/typescript/core/index.d.ts.map +1 -1
  336. package/lib/typescript/core/mixins/OxyServices.analytics.d.ts.map +1 -1
  337. package/lib/typescript/core/mixins/OxyServices.assets.d.ts.map +1 -1
  338. package/lib/typescript/core/mixins/OxyServices.auth.d.ts +40 -20
  339. package/lib/typescript/core/mixins/OxyServices.auth.d.ts.map +1 -1
  340. package/lib/typescript/core/mixins/OxyServices.developer.d.ts.map +1 -1
  341. package/lib/typescript/core/mixins/OxyServices.devices.d.ts.map +1 -1
  342. package/lib/typescript/core/mixins/OxyServices.features.d.ts +229 -0
  343. package/lib/typescript/core/mixins/OxyServices.features.d.ts.map +1 -0
  344. package/lib/typescript/core/mixins/OxyServices.fedcm.d.ts +195 -0
  345. package/lib/typescript/core/mixins/OxyServices.fedcm.d.ts.map +1 -0
  346. package/lib/typescript/core/mixins/OxyServices.karma.d.ts.map +1 -1
  347. package/lib/typescript/core/mixins/OxyServices.language.d.ts.map +1 -1
  348. package/lib/typescript/core/mixins/OxyServices.location.d.ts.map +1 -1
  349. package/lib/typescript/core/mixins/OxyServices.payment.d.ts.map +1 -1
  350. package/lib/typescript/core/mixins/OxyServices.popup.d.ts +206 -0
  351. package/lib/typescript/core/mixins/OxyServices.popup.d.ts.map +1 -0
  352. package/lib/typescript/core/mixins/OxyServices.privacy.d.ts.map +1 -1
  353. package/lib/typescript/core/mixins/OxyServices.redirect.d.ts +246 -0
  354. package/lib/typescript/core/mixins/OxyServices.redirect.d.ts.map +1 -0
  355. package/lib/typescript/core/mixins/OxyServices.security.d.ts.map +1 -1
  356. package/lib/typescript/core/mixins/OxyServices.user.d.ts +6 -4
  357. package/lib/typescript/core/mixins/OxyServices.user.d.ts.map +1 -1
  358. package/lib/typescript/core/mixins/OxyServices.utility.d.ts.map +1 -1
  359. package/lib/typescript/core/mixins/index.d.ts +291 -9
  360. package/lib/typescript/core/mixins/index.d.ts.map +1 -1
  361. package/lib/typescript/crypto/index.d.ts +6 -3
  362. package/lib/typescript/crypto/index.d.ts.map +1 -1
  363. package/lib/typescript/crypto/keyManager.d.ts +190 -0
  364. package/lib/typescript/crypto/keyManager.d.ts.map +1 -0
  365. package/lib/typescript/crypto/polyfill.d.ts +4 -3
  366. package/lib/typescript/crypto/polyfill.d.ts.map +1 -1
  367. package/lib/typescript/crypto/recoveryPhrase.d.ts +59 -0
  368. package/lib/typescript/crypto/recoveryPhrase.d.ts.map +1 -0
  369. package/lib/typescript/crypto/signatureService.d.ts +87 -0
  370. package/lib/typescript/crypto/signatureService.d.ts.map +1 -0
  371. package/lib/typescript/index.d.ts +5 -6
  372. package/lib/typescript/index.d.ts.map +1 -1
  373. package/lib/typescript/models/interfaces.d.ts +2 -14
  374. package/lib/typescript/models/interfaces.d.ts.map +1 -1
  375. package/lib/typescript/models/session.d.ts +0 -9
  376. package/lib/typescript/models/session.d.ts.map +1 -1
  377. package/lib/typescript/types/bip39.d.ts +32 -0
  378. package/lib/typescript/ui/components/BottomSheetRouter.d.ts +5 -0
  379. package/lib/typescript/ui/components/BottomSheetRouter.d.ts.map +1 -1
  380. package/lib/typescript/ui/components/GroupedItem.d.ts +5 -1
  381. package/lib/typescript/ui/components/GroupedItem.d.ts.map +1 -1
  382. package/lib/typescript/ui/components/IconButton/utils.d.ts +1 -1
  383. package/lib/typescript/ui/components/OxyProvider.d.ts.map +1 -1
  384. package/lib/typescript/ui/components/SettingRow.d.ts +6 -0
  385. package/lib/typescript/ui/components/SettingRow.d.ts.map +1 -1
  386. package/lib/typescript/ui/components/TextField/Addons/Outline.d.ts +2 -2
  387. package/lib/typescript/ui/components/TextField/Adornment/utils.d.ts +1 -1
  388. package/lib/typescript/ui/components/TextField/Adornment/utils.d.ts.map +1 -1
  389. package/lib/typescript/ui/components/TextField/helpers.d.ts +8 -8
  390. package/lib/typescript/ui/components/TextField/types.d.ts +1 -0
  391. package/lib/typescript/ui/components/TextField/types.d.ts.map +1 -1
  392. package/lib/typescript/ui/components/feedback/FormInput.d.ts +20 -0
  393. package/lib/typescript/ui/components/feedback/FormInput.d.ts.map +1 -0
  394. package/lib/typescript/ui/components/feedback/ProgressIndicator.d.ts +11 -0
  395. package/lib/typescript/ui/components/feedback/ProgressIndicator.d.ts.map +1 -0
  396. package/lib/typescript/ui/components/feedback/constants.d.ts +5 -0
  397. package/lib/typescript/ui/components/feedback/constants.d.ts.map +1 -0
  398. package/lib/typescript/ui/components/feedback/feedbackStyles.d.ts +280 -0
  399. package/lib/typescript/ui/components/feedback/feedbackStyles.d.ts.map +1 -0
  400. package/lib/typescript/ui/components/feedback/index.d.ts +7 -0
  401. package/lib/typescript/ui/components/feedback/index.d.ts.map +1 -0
  402. package/lib/typescript/ui/components/feedback/types.d.ts +46 -0
  403. package/lib/typescript/ui/components/feedback/types.d.ts.map +1 -0
  404. package/lib/typescript/ui/components/feedback/useFeedbackForm.d.ts +9 -0
  405. package/lib/typescript/ui/components/feedback/useFeedbackForm.d.ts.map +1 -0
  406. package/lib/typescript/ui/components/modals/DeleteAccountModal.d.ts +19 -0
  407. package/lib/typescript/ui/components/modals/DeleteAccountModal.d.ts.map +1 -0
  408. package/lib/typescript/ui/components/modals/index.d.ts +2 -0
  409. package/lib/typescript/ui/components/modals/index.d.ts.map +1 -0
  410. package/lib/typescript/ui/components/payment/PaymentDetailsStep.d.ts +21 -0
  411. package/lib/typescript/ui/components/payment/PaymentDetailsStep.d.ts.map +1 -0
  412. package/lib/typescript/ui/components/payment/PaymentMethodStep.d.ts +14 -0
  413. package/lib/typescript/ui/components/payment/PaymentMethodStep.d.ts.map +1 -0
  414. package/lib/typescript/ui/components/payment/PaymentReviewStep.d.ts +16 -0
  415. package/lib/typescript/ui/components/payment/PaymentReviewStep.d.ts.map +1 -0
  416. package/lib/typescript/ui/components/payment/PaymentSuccessStep.d.ts +10 -0
  417. package/lib/typescript/ui/components/payment/PaymentSuccessStep.d.ts.map +1 -0
  418. package/lib/typescript/ui/components/payment/PaymentSummaryStep.d.ts +15 -0
  419. package/lib/typescript/ui/components/payment/PaymentSummaryStep.d.ts.map +1 -0
  420. package/lib/typescript/ui/components/payment/constants.d.ts +7 -0
  421. package/lib/typescript/ui/components/payment/constants.d.ts.map +1 -0
  422. package/lib/typescript/ui/components/payment/index.d.ts +9 -0
  423. package/lib/typescript/ui/components/payment/index.d.ts.map +1 -0
  424. package/lib/typescript/ui/components/payment/paymentStyles.d.ts +396 -0
  425. package/lib/typescript/ui/components/payment/paymentStyles.d.ts.map +1 -0
  426. package/lib/typescript/ui/components/payment/types.d.ts +40 -0
  427. package/lib/typescript/ui/components/payment/types.d.ts.map +1 -0
  428. package/lib/typescript/ui/components/types.d.ts +4 -0
  429. package/lib/typescript/ui/components/types.d.ts.map +1 -1
  430. package/lib/typescript/ui/context/OxyContext.d.ts +57 -3
  431. package/lib/typescript/ui/context/OxyContext.d.ts.map +1 -1
  432. package/lib/typescript/ui/context/hooks/useAuthOperations.d.ts +10 -3
  433. package/lib/typescript/ui/context/hooks/useAuthOperations.d.ts.map +1 -1
  434. package/lib/typescript/ui/context/hooks/useSessionManagement.d.ts +41 -0
  435. package/lib/typescript/ui/context/hooks/useSessionManagement.d.ts.map +1 -0
  436. package/lib/typescript/ui/hooks/index.d.ts +2 -0
  437. package/lib/typescript/ui/hooks/index.d.ts.map +1 -1
  438. package/lib/typescript/ui/hooks/mutations/useAccountMutations.d.ts.map +1 -1
  439. package/lib/typescript/ui/hooks/queries/useAccountQueries.d.ts.map +1 -1
  440. package/lib/typescript/ui/hooks/queries/useServicesQueries.d.ts.map +1 -1
  441. package/lib/typescript/ui/hooks/useAsyncAction.d.ts +51 -0
  442. package/lib/typescript/ui/hooks/useAsyncAction.d.ts.map +1 -0
  443. package/lib/typescript/ui/hooks/useProfileEditing.d.ts.map +1 -1
  444. package/lib/typescript/ui/hooks/useSessionManagement.d.ts.map +1 -1
  445. package/lib/typescript/ui/hooks/useSessionSocket.d.ts +1 -2
  446. package/lib/typescript/ui/hooks/useSessionSocket.d.ts.map +1 -1
  447. package/lib/typescript/ui/hooks/useSettingToggle.d.ts +55 -0
  448. package/lib/typescript/ui/hooks/useSettingToggle.d.ts.map +1 -0
  449. package/lib/typescript/ui/hooks/useStorage.d.ts +3 -9
  450. package/lib/typescript/ui/hooks/useStorage.d.ts.map +1 -1
  451. package/lib/typescript/ui/index.d.ts +6 -2
  452. package/lib/typescript/ui/index.d.ts.map +1 -1
  453. package/lib/typescript/ui/navigation/routes.d.ts +1 -1
  454. package/lib/typescript/ui/navigation/routes.d.ts.map +1 -1
  455. package/lib/typescript/ui/screens/AccountOverviewScreen.d.ts.map +1 -1
  456. package/lib/typescript/ui/screens/AccountSettingsScreen.d.ts.map +1 -1
  457. package/lib/typescript/ui/screens/FAQScreen.d.ts +5 -0
  458. package/lib/typescript/ui/screens/FAQScreen.d.ts.map +1 -0
  459. package/lib/typescript/ui/screens/FeedbackScreen.d.ts.map +1 -1
  460. package/lib/typescript/ui/screens/HelpSupportScreen.d.ts.map +1 -1
  461. package/lib/typescript/ui/screens/OxyAuthScreen.d.ts +1 -1
  462. package/lib/typescript/ui/screens/OxyAuthScreen.d.ts.map +1 -1
  463. package/lib/typescript/ui/screens/PaymentGatewayScreen.d.ts +3 -15
  464. package/lib/typescript/ui/screens/PaymentGatewayScreen.d.ts.map +1 -1
  465. package/lib/typescript/ui/screens/PrivacySettingsScreen.d.ts.map +1 -1
  466. package/lib/typescript/ui/screens/ProfileScreen.d.ts.map +1 -1
  467. package/lib/typescript/ui/screens/SavesCollectionsScreen.d.ts.map +1 -1
  468. package/lib/typescript/ui/screens/karma/KarmaCenterScreen.d.ts.map +1 -1
  469. package/lib/typescript/ui/stores/accountStore.d.ts.map +1 -1
  470. package/lib/typescript/ui/stores/authStore.d.ts +8 -7
  471. package/lib/typescript/ui/stores/authStore.d.ts.map +1 -1
  472. package/lib/typescript/ui/styles/spacing.d.ts +5 -0
  473. package/lib/typescript/ui/styles/spacing.d.ts.map +1 -1
  474. package/lib/typescript/ui/types/navigation.d.ts +2 -1
  475. package/lib/typescript/ui/types/navigation.d.ts.map +1 -1
  476. package/lib/typescript/ui/utils/avatarUtils.d.ts +2 -13
  477. package/lib/typescript/ui/utils/avatarUtils.d.ts.map +1 -1
  478. package/lib/typescript/ui/utils/storageHelpers.d.ts +0 -3
  479. package/lib/typescript/ui/utils/storageHelpers.d.ts.map +1 -1
  480. package/lib/typescript/utils/errorUtils.d.ts +6 -0
  481. package/lib/typescript/utils/errorUtils.d.ts.map +1 -1
  482. package/lib/typescript/utils/validationUtils.d.ts +8 -0
  483. package/lib/typescript/utils/validationUtils.d.ts.map +1 -1
  484. package/package.json +8 -7
  485. package/src/core/CrossDomainAuth.ts +307 -0
  486. package/src/core/HttpService.ts +99 -16
  487. package/src/core/OxyServices.base.ts +20 -3
  488. package/src/core/OxyServices.ts +7 -3
  489. package/src/core/index.ts +9 -1
  490. package/src/core/mixins/OxyServices.assets.ts +14 -3
  491. package/src/core/mixins/OxyServices.auth.ts +105 -36
  492. package/src/core/mixins/OxyServices.features.ts +428 -0
  493. package/src/core/mixins/OxyServices.fedcm.ts +315 -0
  494. package/src/core/mixins/OxyServices.popup.ts +402 -0
  495. package/src/core/mixins/OxyServices.redirect.ts +397 -0
  496. package/src/core/mixins/OxyServices.user.ts +39 -24
  497. package/src/core/mixins/index.ts +33 -14
  498. package/src/crypto/index.ts +16 -5
  499. package/src/crypto/keyManager.ts +966 -0
  500. package/src/crypto/polyfill.ts +6 -5
  501. package/src/crypto/recoveryPhrase.ts +166 -0
  502. package/src/crypto/signatureService.ts +323 -0
  503. package/src/i18n/locales/en-US.json +1 -1
  504. package/src/index.ts +19 -15
  505. package/src/models/interfaces.ts +4 -16
  506. package/src/models/session.ts +2 -11
  507. package/src/types/bip39.d.ts +32 -0
  508. package/src/ui/components/BottomSheetRouter.tsx +6 -1
  509. package/src/ui/components/GroupedItem.tsx +19 -1
  510. package/src/ui/components/Icon.tsx +1 -1
  511. package/src/ui/components/IconButton/utils.ts +1 -1
  512. package/src/ui/components/OxyProvider.tsx +44 -12
  513. package/src/ui/components/SettingRow.tsx +26 -4
  514. package/src/ui/components/TextField/Addons/Outline.tsx +2 -2
  515. package/src/ui/components/TextField/Adornment/utils.ts +2 -2
  516. package/src/ui/components/TextField/helpers.tsx +10 -10
  517. package/src/ui/components/TextField/types.tsx +1 -1
  518. package/src/ui/components/TouchableRipple/utils.ts +2 -2
  519. package/src/ui/components/Typography/AnimatedText.tsx +2 -2
  520. package/src/ui/components/feedback/FormInput.tsx +84 -0
  521. package/src/ui/components/feedback/ProgressIndicator.tsx +35 -0
  522. package/src/ui/components/feedback/constants.ts +22 -0
  523. package/src/ui/components/feedback/feedbackStyles.ts +247 -0
  524. package/src/ui/components/feedback/index.ts +6 -0
  525. package/src/ui/components/feedback/types.ts +52 -0
  526. package/src/ui/components/feedback/useFeedbackForm.ts +44 -0
  527. package/src/ui/components/modals/DeleteAccountModal.tsx +294 -0
  528. package/src/ui/components/modals/index.ts +1 -0
  529. package/src/ui/components/payment/PaymentDetailsStep.tsx +222 -0
  530. package/src/ui/components/payment/PaymentMethodStep.tsx +89 -0
  531. package/src/ui/components/payment/PaymentReviewStep.tsx +126 -0
  532. package/src/ui/components/payment/PaymentSuccessStep.tsx +71 -0
  533. package/src/ui/components/payment/PaymentSummaryStep.tsx +159 -0
  534. package/src/ui/components/payment/constants.ts +39 -0
  535. package/src/ui/components/payment/index.ts +9 -0
  536. package/src/ui/components/payment/paymentStyles.ts +397 -0
  537. package/src/ui/components/payment/types.ts +45 -0
  538. package/src/ui/components/types.tsx +6 -0
  539. package/src/ui/context/OxyContext.tsx +173 -195
  540. package/src/ui/context/hooks/useAuthOperations.ts +177 -36
  541. package/src/ui/context/hooks/useSessionManagement.ts +399 -0
  542. package/src/ui/hooks/index.ts +3 -1
  543. package/src/ui/hooks/mutations/useAccountMutations.ts +83 -76
  544. package/src/ui/hooks/queries/useAccountQueries.ts +29 -35
  545. package/src/ui/hooks/queries/useSecurityQueries.ts +1 -1
  546. package/src/ui/hooks/queries/useServicesQueries.ts +14 -6
  547. package/src/ui/hooks/useAsyncAction.ts +129 -0
  548. package/src/ui/hooks/useProfileEditing.ts +3 -3
  549. package/src/ui/hooks/useSessionManagement.ts +5 -10
  550. package/src/ui/hooks/useSessionSocket.ts +46 -175
  551. package/src/ui/hooks/useSettingToggle.ts +147 -0
  552. package/src/ui/hooks/useStorage.ts +24 -76
  553. package/src/ui/index.ts +22 -13
  554. package/src/ui/navigation/routes.ts +8 -2
  555. package/src/ui/screens/AccountCenterScreen.tsx +4 -4
  556. package/src/ui/screens/AccountOverviewScreen.tsx +36 -38
  557. package/src/ui/screens/AccountSettingsScreen.tsx +34 -37
  558. package/src/ui/screens/AccountSwitcherScreen.tsx +4 -4
  559. package/src/ui/screens/FAQScreen.tsx +332 -0
  560. package/src/ui/screens/FeedbackScreen.tsx +91 -626
  561. package/src/ui/screens/HelpSupportScreen.tsx +7 -5
  562. package/src/ui/screens/OxyAuthScreen.tsx +138 -64
  563. package/src/ui/screens/PaymentGatewayScreen.tsx +96 -1275
  564. package/src/ui/screens/PrivacySettingsScreen.tsx +6 -12
  565. package/src/ui/screens/ProfileScreen.tsx +11 -6
  566. package/src/ui/screens/SavesCollectionsScreen.tsx +19 -10
  567. package/src/ui/screens/karma/KarmaCenterScreen.tsx +10 -10
  568. package/src/ui/stores/accountStore.ts +1 -11
  569. package/src/ui/stores/authStore.ts +43 -44
  570. package/src/ui/styles/spacing.ts +15 -2
  571. package/src/ui/types/navigation.ts +2 -2
  572. package/src/ui/utils/avatarUtils.ts +39 -46
  573. package/src/ui/utils/storageHelpers.ts +0 -4
  574. package/src/utils/__tests__/validationUtils.test.ts +16 -1
  575. package/src/utils/errorUtils.ts +8 -1
  576. package/src/utils/validationUtils.ts +12 -0
  577. package/lib/commonjs/core/services/SessionService.js +0 -163
  578. package/lib/commonjs/core/services/SessionService.js.map +0 -1
  579. package/lib/commonjs/core/services/TokenService.js +0 -220
  580. package/lib/commonjs/core/services/TokenService.js.map +0 -1
  581. package/lib/commonjs/crypto/types.js +0 -2
  582. package/lib/commonjs/crypto/types.js.map +0 -1
  583. package/lib/commonjs/ui/context/OxyContextBase.js +0 -21
  584. package/lib/commonjs/ui/context/OxyContextBase.js.map +0 -1
  585. package/lib/commonjs/ui/context/hooks/useStorage.js +0 -79
  586. package/lib/commonjs/ui/context/hooks/useStorage.js.map +0 -1
  587. package/lib/commonjs/ui/hooks/useAvatarPicker.js +0 -56
  588. package/lib/commonjs/ui/hooks/useAvatarPicker.js.map +0 -1
  589. package/lib/module/core/services/SessionService.js +0 -159
  590. package/lib/module/core/services/SessionService.js.map +0 -1
  591. package/lib/module/core/services/TokenService.js +0 -217
  592. package/lib/module/core/services/TokenService.js.map +0 -1
  593. package/lib/module/crypto/types.js +0 -2
  594. package/lib/module/crypto/types.js.map +0 -1
  595. package/lib/module/ui/context/OxyContextBase.js +0 -16
  596. package/lib/module/ui/context/OxyContextBase.js.map +0 -1
  597. package/lib/module/ui/context/hooks/useStorage.js +0 -74
  598. package/lib/module/ui/context/hooks/useStorage.js.map +0 -1
  599. package/lib/module/ui/hooks/useAvatarPicker.js +0 -50
  600. package/lib/module/ui/hooks/useAvatarPicker.js.map +0 -1
  601. package/lib/typescript/core/services/SessionService.d.ts +0 -78
  602. package/lib/typescript/core/services/SessionService.d.ts.map +0 -1
  603. package/lib/typescript/core/services/TokenService.d.ts +0 -72
  604. package/lib/typescript/core/services/TokenService.d.ts.map +0 -1
  605. package/lib/typescript/crypto/types.d.ts +0 -22
  606. package/lib/typescript/crypto/types.d.ts.map +0 -1
  607. package/lib/typescript/ui/context/OxyContextBase.d.ts +0 -63
  608. package/lib/typescript/ui/context/OxyContextBase.d.ts.map +0 -1
  609. package/lib/typescript/ui/context/hooks/useStorage.d.ts +0 -22
  610. package/lib/typescript/ui/context/hooks/useStorage.d.ts.map +0 -1
  611. package/lib/typescript/ui/hooks/useAvatarPicker.d.ts +0 -19
  612. package/lib/typescript/ui/hooks/useAvatarPicker.d.ts.map +0 -1
  613. package/src/core/services/SessionService.ts +0 -173
  614. package/src/core/services/TokenService.ts +0 -237
  615. package/src/crypto/types.ts +0 -23
  616. package/src/ui/context/OxyContextBase.tsx +0 -78
  617. package/src/ui/context/hooks/useStorage.ts +0 -104
  618. package/src/ui/hooks/useAvatarPicker.ts +0 -61
@@ -0,0 +1,315 @@
1
+ import type { OxyServicesBase } from '../OxyServices.base';
2
+ import { OxyAuthenticationError } from '../OxyServices.errors';
3
+ import type { SessionLoginResponse } from '../../models/session';
4
+
5
+ export interface FedCMAuthOptions {
6
+ nonce?: string;
7
+ context?: 'signin' | 'signup' | 'continue' | 'use';
8
+ }
9
+
10
+ export interface FedCMConfig {
11
+ enabled: boolean;
12
+ configURL: string;
13
+ clientId?: string;
14
+ }
15
+
16
+ /**
17
+ * Federated Credential Management (FedCM) Authentication Mixin
18
+ *
19
+ * Implements the modern browser-native identity federation API that enables
20
+ * Google-style cross-domain authentication without third-party cookies.
21
+ *
22
+ * Browser Support:
23
+ * - Chrome 108+
24
+ * - Safari 16.4+
25
+ * - Edge 108+
26
+ * - Firefox: Not yet supported (fallback required)
27
+ *
28
+ * Key Features:
29
+ * - No redirects or popups required
30
+ * - Browser-native UI prompts
31
+ * - Privacy-preserving (IdP can't track users)
32
+ * - Automatic SSO across domains
33
+ * - Silent re-authentication support
34
+ *
35
+ * @see https://developer.mozilla.org/en-US/docs/Web/API/FedCM_API
36
+ */
37
+ export function OxyServicesFedCMMixin<T extends typeof OxyServicesBase>(Base: T) {
38
+ return class extends Base {
39
+ constructor(...args: any[]) {
40
+ super(...(args as [any]));
41
+ }
42
+ public static readonly DEFAULT_CONFIG_URL = 'https://auth.oxy.so/fedcm.json';
43
+ public static readonly FEDCM_TIMEOUT = 60000; // 1 minute
44
+
45
+ /**
46
+ * Check if FedCM is supported in the current browser
47
+ */
48
+ static isFedCMSupported(): boolean {
49
+ if (typeof window === 'undefined') return false;
50
+ return 'IdentityCredential' in window && 'navigator' in window && 'credentials' in navigator;
51
+ }
52
+
53
+ /**
54
+ * Instance method to check FedCM support
55
+ */
56
+ isFedCMSupported(): boolean {
57
+ return (this.constructor as typeof OxyServicesBase & { isFedCMSupported: () => boolean }).isFedCMSupported();
58
+ }
59
+
60
+ /**
61
+ * Sign in using FedCM (Federated Credential Management API)
62
+ *
63
+ * This provides a Google-style authentication experience:
64
+ * - Browser shows native "Sign in with Oxy" prompt
65
+ * - No redirect or popup required
66
+ * - User approves → credential exchange happens in browser
67
+ * - All apps automatically get SSO after first sign-in
68
+ *
69
+ * @param options - Authentication options
70
+ * @returns Session with access token and user data
71
+ * @throws {OxyAuthenticationError} If FedCM not supported or user cancels
72
+ *
73
+ * @example
74
+ * ```typescript
75
+ * try {
76
+ * const session = await oxyServices.signInWithFedCM();
77
+ * console.log('Signed in:', session.user);
78
+ * } catch (error) {
79
+ * // Fallback to popup or redirect auth
80
+ * await oxyServices.signInWithPopup();
81
+ * }
82
+ * ```
83
+ */
84
+ async signInWithFedCM(options: FedCMAuthOptions = {}): Promise<SessionLoginResponse> {
85
+ if (!this.isFedCMSupported()) {
86
+ throw new OxyAuthenticationError(
87
+ 'FedCM not supported in this browser. Please update your browser or use an alternative sign-in method.'
88
+ );
89
+ }
90
+
91
+ try {
92
+ const nonce = options.nonce || this.generateNonce();
93
+ const clientId = this.getClientId();
94
+
95
+ // Request credential from browser's native identity flow
96
+ const credential = await this.requestIdentityCredential({
97
+ configURL: (this.constructor as any).DEFAULT_CONFIG_URL,
98
+ clientId,
99
+ nonce,
100
+ context: options.context,
101
+ });
102
+
103
+ if (!credential || !credential.token) {
104
+ throw new OxyAuthenticationError('No credential received from browser');
105
+ }
106
+
107
+ // Exchange FedCM ID token for Oxy session
108
+ const session = await this.exchangeIdTokenForSession(credential.token);
109
+
110
+ // Store access token in HttpService (extract from response or get from session)
111
+ if (session && (session as any).accessToken) {
112
+ this.httpService.setTokens((session as any).accessToken);
113
+ }
114
+
115
+ return session;
116
+ } catch (error) {
117
+ if ((error as any).name === 'AbortError') {
118
+ throw new OxyAuthenticationError('Sign-in was cancelled by user');
119
+ }
120
+ if ((error as any).name === 'NetworkError') {
121
+ throw new OxyAuthenticationError('Network error during sign-in. Please check your connection.');
122
+ }
123
+ throw error;
124
+ }
125
+ }
126
+
127
+ /**
128
+ * Silent sign-in using FedCM
129
+ *
130
+ * Attempts to automatically re-authenticate the user without any UI.
131
+ * This is what enables "instant sign-in" across all Oxy domains after
132
+ * the user has signed in once.
133
+ *
134
+ * The browser will:
135
+ * 1. Check if user has previously signed in to Oxy
136
+ * 2. Check if user is still signed in at auth.oxy.so
137
+ * 3. If yes, automatically provide credential without prompting
138
+ *
139
+ * @returns Session if user is already signed in, null otherwise
140
+ *
141
+ * @example
142
+ * ```typescript
143
+ * // On app startup
144
+ * useEffect(() => {
145
+ * const checkAuth = async () => {
146
+ * const session = await oxyServices.silentSignInWithFedCM();
147
+ * if (session) {
148
+ * setUser(session.user);
149
+ * } else {
150
+ * // Show sign-in button
151
+ * }
152
+ * };
153
+ * checkAuth();
154
+ * }, []);
155
+ * ```
156
+ */
157
+ async silentSignInWithFedCM(): Promise<SessionLoginResponse | null> {
158
+ if (!this.isFedCMSupported()) {
159
+ return null;
160
+ }
161
+
162
+ try {
163
+ const nonce = this.generateNonce();
164
+ const clientId = this.getClientId();
165
+
166
+ // Request credential with silent mediation (no UI)
167
+ const credential = await this.requestIdentityCredential({
168
+ configURL: (this.constructor as any).DEFAULT_CONFIG_URL,
169
+ clientId,
170
+ nonce,
171
+ mediation: 'silent',
172
+ });
173
+
174
+ if (!credential || !credential.token) {
175
+ return null;
176
+ }
177
+
178
+ const session = await this.exchangeIdTokenForSession(credential.token);
179
+ if (session && (session as any).accessToken) {
180
+ this.httpService.setTokens((session as any).accessToken);
181
+ }
182
+
183
+ return session;
184
+ } catch (error) {
185
+ // Silent failures are expected and should not throw
186
+ return null;
187
+ }
188
+ }
189
+
190
+ /**
191
+ * Request identity credential from browser using FedCM API
192
+ *
193
+ * @private
194
+ */
195
+ public async requestIdentityCredential(options: {
196
+ configURL: string;
197
+ clientId: string;
198
+ nonce: string;
199
+ context?: string;
200
+ mediation?: 'silent' | 'optional' | 'required';
201
+ }): Promise<{ token: string } | null> {
202
+ const controller = new AbortController();
203
+ const timeout = setTimeout(() => controller.abort(), (this.constructor as any).FEDCM_TIMEOUT);
204
+
205
+ try {
206
+ // Type assertion needed as FedCM types may not be in all TypeScript versions
207
+ const credential = (await (navigator.credentials as any).get({
208
+ identity: {
209
+ providers: [
210
+ {
211
+ configURL: options.configURL,
212
+ clientId: options.clientId,
213
+ nonce: options.nonce,
214
+ ...(options.context && { loginHint: options.context }),
215
+ },
216
+ ],
217
+ },
218
+ mediation: options.mediation || 'optional',
219
+ signal: controller.signal,
220
+ })) as any;
221
+
222
+ if (!credential || credential.type !== 'identity') {
223
+ return null;
224
+ }
225
+
226
+ return { token: credential.token };
227
+ } finally {
228
+ clearTimeout(timeout);
229
+ }
230
+ }
231
+
232
+ /**
233
+ * Exchange FedCM ID token for Oxy session
234
+ *
235
+ * The ID token is a JWT issued by auth.oxy.so that proves the user's
236
+ * identity. We exchange it for a full Oxy session with access token.
237
+ *
238
+ * @private
239
+ */
240
+ public async exchangeIdTokenForSession(idToken: string): Promise<SessionLoginResponse> {
241
+ return this.makeRequest<SessionLoginResponse>(
242
+ 'POST',
243
+ '/api/auth/fedcm/exchange',
244
+ { id_token: idToken },
245
+ { cache: false }
246
+ );
247
+ }
248
+
249
+ /**
250
+ * Revoke FedCM credential (sign out)
251
+ *
252
+ * This tells the browser to forget the FedCM credential for this app.
253
+ * The user will need to re-authenticate next time.
254
+ */
255
+ async revokeFedCMCredential(): Promise<void> {
256
+ if (!this.isFedCMSupported()) {
257
+ return;
258
+ }
259
+
260
+ try {
261
+ // FedCM logout API (if available)
262
+ if ('IdentityCredential' in window && 'logout' in (window as any).IdentityCredential) {
263
+ const clientId = this.getClientId();
264
+ await (window as any).IdentityCredential.logout({
265
+ configURL: (this.constructor as any).DEFAULT_CONFIG_URL,
266
+ clientId,
267
+ });
268
+ }
269
+ } catch (error) {
270
+ // Silent failure
271
+ }
272
+ }
273
+
274
+ /**
275
+ * Get configuration for FedCM
276
+ *
277
+ * @returns FedCM configuration with browser support info
278
+ */
279
+ getFedCMConfig(): FedCMConfig {
280
+ return {
281
+ enabled: this.isFedCMSupported(),
282
+ configURL: (this.constructor as any).DEFAULT_CONFIG_URL,
283
+ clientId: this.getClientId(),
284
+ };
285
+ }
286
+
287
+ /**
288
+ * Generate a cryptographically secure nonce for FedCM
289
+ *
290
+ * @private
291
+ */
292
+ public generateNonce(): string {
293
+ if (typeof window !== 'undefined' && window.crypto && window.crypto.randomUUID) {
294
+ return window.crypto.randomUUID();
295
+ }
296
+ // Fallback for older browsers
297
+ return `${Date.now()}-${Math.random().toString(36).substring(2, 15)}`;
298
+ }
299
+
300
+ /**
301
+ * Get the client ID for this origin
302
+ *
303
+ * @private
304
+ */
305
+ public getClientId(): string {
306
+ if (typeof window === 'undefined') {
307
+ return 'unknown';
308
+ }
309
+ return window.location.origin;
310
+ }
311
+ };
312
+ }
313
+
314
+ // Export the mixin function as both named and default
315
+ export { OxyServicesFedCMMixin as FedCMMixin };
@@ -0,0 +1,402 @@
1
+ import type { OxyServicesBase } from '../OxyServices.base';
2
+ import { OxyAuthenticationError } from '../OxyServices.errors';
3
+ import type { SessionLoginResponse } from '../../models/session';
4
+
5
+ export interface PopupAuthOptions {
6
+ width?: number;
7
+ height?: number;
8
+ timeout?: number;
9
+ mode?: 'login' | 'signup';
10
+ }
11
+
12
+ export interface SilentAuthOptions {
13
+ timeout?: number;
14
+ }
15
+
16
+ /**
17
+ * Popup-based Cross-Domain Authentication Mixin
18
+ *
19
+ * Implements OAuth2-style authentication using popup windows and postMessage.
20
+ * This is the primary authentication method for modern browsers, providing a
21
+ * Google-like experience without full page redirects.
22
+ *
23
+ * Flow:
24
+ * 1. Opens small popup window to auth.oxy.so
25
+ * 2. User signs in (auth.oxy.so sets its own first-party cookie)
26
+ * 3. auth.oxy.so sends token back via postMessage
27
+ * 4. Popup closes, parent app has the session
28
+ *
29
+ * Features:
30
+ * - No full page redirect (preserves app state)
31
+ * - Works across different domains (homiio.com, mention.earth, etc.)
32
+ * - Silent refresh using hidden iframe for seamless SSO
33
+ * - CSRF protection via state parameter
34
+ * - XSS protection via origin validation
35
+ *
36
+ * Browser Support: All modern browsers (IE11+)
37
+ */
38
+ export function OxyServicesPopupAuthMixin<T extends typeof OxyServicesBase>(Base: T) {
39
+ return class extends Base {
40
+ constructor(...args: any[]) {
41
+ super(...(args as [any]));
42
+ }
43
+ public static readonly AUTH_URL = 'https://auth.oxy.so';
44
+ public static readonly POPUP_WIDTH = 500;
45
+ public static readonly POPUP_HEIGHT = 700;
46
+ public static readonly POPUP_TIMEOUT = 60000; // 1 minute
47
+ public static readonly SILENT_TIMEOUT = 5000; // 5 seconds
48
+
49
+ /**
50
+ * Sign in using popup window
51
+ *
52
+ * Opens a centered popup window to auth.oxy.so where the user can sign in.
53
+ * The popup automatically closes after successful authentication and the
54
+ * session is returned to the parent window.
55
+ *
56
+ * @param options - Popup configuration options
57
+ * @returns Session with access token and user data
58
+ * @throws {OxyAuthenticationError} If popup is blocked or auth fails
59
+ *
60
+ * @example
61
+ * ```typescript
62
+ * const handleSignIn = async () => {
63
+ * try {
64
+ * const session = await oxyServices.signInWithPopup();
65
+ * console.log('Signed in:', session.user);
66
+ * } catch (error) {
67
+ * if (error.message.includes('blocked')) {
68
+ * alert('Please allow popups for this site');
69
+ * }
70
+ * }
71
+ * };
72
+ * ```
73
+ */
74
+ async signInWithPopup(options: PopupAuthOptions = {}): Promise<SessionLoginResponse> {
75
+ if (typeof window === 'undefined') {
76
+ throw new OxyAuthenticationError('Popup authentication requires browser environment');
77
+ }
78
+
79
+ const state = this.generateState();
80
+ const nonce = this.generateNonce();
81
+
82
+ // Store state for CSRF protection
83
+ this.storeAuthState(state, nonce);
84
+
85
+ const width = options.width || (this.constructor as any).POPUP_WIDTH;
86
+ const height = options.height || (this.constructor as any).POPUP_HEIGHT;
87
+ const timeout = options.timeout || (this.constructor as any).POPUP_TIMEOUT;
88
+ const mode = options.mode || 'login';
89
+
90
+ const authUrl = this.buildAuthUrl({
91
+ mode,
92
+ state,
93
+ nonce,
94
+ clientId: window.location.origin,
95
+ redirectUri: `${(this.constructor as any).AUTH_URL}/auth/callback`,
96
+ });
97
+
98
+ const popup = this.openCenteredPopup(authUrl, 'Oxy Sign In', width, height);
99
+
100
+ if (!popup) {
101
+ throw new OxyAuthenticationError(
102
+ 'Popup blocked. Please allow popups for this site and try again.'
103
+ );
104
+ }
105
+
106
+ try {
107
+ const session = await this.waitForPopupAuth(popup, state, timeout);
108
+
109
+ // Store access token if present
110
+ if (session && (session as any).accessToken) {
111
+ this.httpService.setTokens((session as any).accessToken);
112
+ }
113
+
114
+ return session;
115
+ } catch (error) {
116
+ throw error;
117
+ } finally {
118
+ this.clearAuthState(state);
119
+ }
120
+ }
121
+
122
+ /**
123
+ * Sign up using popup window
124
+ *
125
+ * Same as signInWithPopup but opens the signup page by default.
126
+ *
127
+ * @param options - Popup configuration options
128
+ * @returns Session with access token and user data
129
+ */
130
+ async signUpWithPopup(options: PopupAuthOptions = {}): Promise<SessionLoginResponse> {
131
+ return this.signInWithPopup({ ...options, mode: 'signup' });
132
+ }
133
+
134
+ /**
135
+ * Silent sign-in using hidden iframe
136
+ *
137
+ * Attempts to automatically re-authenticate the user without any UI.
138
+ * This is what enables seamless SSO across all Oxy domains.
139
+ *
140
+ * How it works:
141
+ * 1. Creates hidden iframe pointing to auth.oxy.so/silent-auth
142
+ * 2. If user has valid session at auth.oxy.so, it sends token via postMessage
143
+ * 3. If not, iframe responds with null (no error thrown)
144
+ *
145
+ * This should be called on app startup to check for existing sessions.
146
+ *
147
+ * @param options - Silent auth options
148
+ * @returns Session if user is signed in, null otherwise
149
+ *
150
+ * @example
151
+ * ```typescript
152
+ * useEffect(() => {
153
+ * const checkAuth = async () => {
154
+ * const session = await oxyServices.silentSignIn();
155
+ * if (session) {
156
+ * setUser(session.user);
157
+ * }
158
+ * };
159
+ * checkAuth();
160
+ * }, []);
161
+ * ```
162
+ */
163
+ async silentSignIn(options: SilentAuthOptions = {}): Promise<SessionLoginResponse | null> {
164
+ if (typeof window === 'undefined') {
165
+ return null;
166
+ }
167
+
168
+ const timeout = options.timeout || (this.constructor as any).SILENT_TIMEOUT;
169
+ const nonce = this.generateNonce();
170
+ const clientId = window.location.origin;
171
+
172
+ const iframe = document.createElement('iframe');
173
+ iframe.style.display = 'none';
174
+ iframe.style.position = 'absolute';
175
+ iframe.style.width = '0';
176
+ iframe.style.height = '0';
177
+ iframe.style.border = 'none';
178
+
179
+ const silentUrl = `${(this.constructor as any).AUTH_URL}/auth/silent?` + `client_id=${encodeURIComponent(clientId)}&` + `nonce=${nonce}`;
180
+
181
+ iframe.src = silentUrl;
182
+ document.body.appendChild(iframe);
183
+
184
+ try {
185
+ const session = await this.waitForIframeAuth(iframe, timeout, clientId);
186
+
187
+ if (session && (session as any).accessToken) {
188
+ this.httpService.setTokens((session as any).accessToken);
189
+ }
190
+
191
+ return session;
192
+ } catch (error) {
193
+ return null;
194
+ } finally {
195
+ document.body.removeChild(iframe);
196
+ }
197
+ }
198
+
199
+ /**
200
+ * Open a centered popup window
201
+ *
202
+ * @private
203
+ */
204
+ public openCenteredPopup(url: string, title: string, width: number, height: number): Window | null {
205
+ const left = window.screenX + (window.outerWidth - width) / 2;
206
+ const top = window.screenY + (window.outerHeight - height) / 2;
207
+
208
+ const features = [
209
+ `width=${width}`,
210
+ `height=${height}`,
211
+ `left=${left}`,
212
+ `top=${top}`,
213
+ 'toolbar=no',
214
+ 'menubar=no',
215
+ 'scrollbars=yes',
216
+ 'resizable=yes',
217
+ 'status=no',
218
+ 'location=no',
219
+ ].join(',');
220
+
221
+ return window.open(url, title, features);
222
+ }
223
+
224
+ /**
225
+ * Wait for authentication response from popup
226
+ *
227
+ * @private
228
+ */
229
+ public async waitForPopupAuth(
230
+ popup: Window,
231
+ expectedState: string,
232
+ timeout: number
233
+ ): Promise<SessionLoginResponse> {
234
+ return new Promise((resolve, reject) => {
235
+ const timeoutId = setTimeout(() => {
236
+ cleanup();
237
+ reject(new OxyAuthenticationError('Authentication timeout'));
238
+ }, timeout);
239
+
240
+ const messageHandler = (event: MessageEvent) => {
241
+ // CRITICAL: Verify origin to prevent XSS attacks
242
+ if (event.origin !== (this.constructor as any).AUTH_URL) {
243
+ return;
244
+ }
245
+
246
+ const { type, state, session, error } = event.data;
247
+
248
+ if (type !== 'oxy_auth_response') {
249
+ return;
250
+ }
251
+
252
+ // Verify state parameter to prevent CSRF attacks
253
+ if (state !== expectedState) {
254
+ cleanup();
255
+ reject(new OxyAuthenticationError('Invalid state parameter. Possible CSRF attack.'));
256
+ return;
257
+ }
258
+
259
+ cleanup();
260
+
261
+ if (error) {
262
+ reject(new OxyAuthenticationError(error));
263
+ } else if (session) {
264
+ resolve(session);
265
+ } else {
266
+ reject(new OxyAuthenticationError('No session received from authentication server'));
267
+ }
268
+ };
269
+
270
+ // Poll to detect if user closed the popup
271
+ const pollInterval = setInterval(() => {
272
+ if (popup.closed) {
273
+ cleanup();
274
+ reject(new OxyAuthenticationError('Authentication cancelled by user'));
275
+ }
276
+ }, 500);
277
+
278
+ const cleanup = () => {
279
+ clearTimeout(timeoutId);
280
+ clearInterval(pollInterval);
281
+ window.removeEventListener('message', messageHandler);
282
+ if (!popup.closed) {
283
+ popup.close();
284
+ }
285
+ };
286
+
287
+ window.addEventListener('message', messageHandler);
288
+ });
289
+ }
290
+
291
+ /**
292
+ * Wait for authentication response from iframe
293
+ *
294
+ * @private
295
+ */
296
+ public async waitForIframeAuth(
297
+ iframe: HTMLIFrameElement,
298
+ timeout: number,
299
+ expectedOrigin: string
300
+ ): Promise<SessionLoginResponse | null> {
301
+ return new Promise((resolve) => {
302
+ const timeoutId = setTimeout(() => {
303
+ cleanup();
304
+ resolve(null); // Silent failure - don't throw
305
+ }, timeout);
306
+
307
+ const messageHandler = (event: MessageEvent) => {
308
+ // Verify origin
309
+ if (event.origin !== (this.constructor as any).AUTH_URL) {
310
+ return;
311
+ }
312
+
313
+ const { type, session } = event.data;
314
+
315
+ if (type !== 'oxy_silent_auth') {
316
+ return;
317
+ }
318
+
319
+ cleanup();
320
+ resolve(session || null);
321
+ };
322
+
323
+ const cleanup = () => {
324
+ clearTimeout(timeoutId);
325
+ window.removeEventListener('message', messageHandler);
326
+ };
327
+
328
+ window.addEventListener('message', messageHandler);
329
+ });
330
+ }
331
+
332
+ /**
333
+ * Build authentication URL with query parameters
334
+ *
335
+ * @private
336
+ */
337
+ public buildAuthUrl(params: {
338
+ mode: string;
339
+ state: string;
340
+ nonce: string;
341
+ clientId: string;
342
+ redirectUri: string;
343
+ }): string {
344
+ const url = new URL(`${(this.constructor as any).AUTH_URL}/${params.mode}`);
345
+ url.searchParams.set('response_type', 'token');
346
+ url.searchParams.set('client_id', params.clientId);
347
+ url.searchParams.set('redirect_uri', params.redirectUri);
348
+ url.searchParams.set('state', params.state);
349
+ url.searchParams.set('nonce', params.nonce);
350
+ return url.toString();
351
+ }
352
+
353
+ /**
354
+ * Generate cryptographically secure state for CSRF protection
355
+ *
356
+ * @private
357
+ */
358
+ public generateState(): string {
359
+ if (typeof window !== 'undefined' && window.crypto && window.crypto.randomUUID) {
360
+ return window.crypto.randomUUID();
361
+ }
362
+ return `${Date.now()}-${Math.random().toString(36).substring(2, 15)}`;
363
+ }
364
+
365
+ /**
366
+ * Generate nonce for replay attack prevention
367
+ *
368
+ * @private
369
+ */
370
+ public generateNonce(): string {
371
+ if (typeof window !== 'undefined' && window.crypto && window.crypto.randomUUID) {
372
+ return window.crypto.randomUUID();
373
+ }
374
+ return `${Date.now()}-${Math.random().toString(36).substring(2, 15)}`;
375
+ }
376
+
377
+ /**
378
+ * Store auth state in session storage
379
+ *
380
+ * @private
381
+ */
382
+ public storeAuthState(state: string, nonce: string): void {
383
+ if (typeof window !== 'undefined' && window.sessionStorage) {
384
+ sessionStorage.setItem(`oxy_auth_state_${state}`, JSON.stringify({ nonce, timestamp: Date.now() }));
385
+ }
386
+ }
387
+
388
+ /**
389
+ * Clear auth state from session storage
390
+ *
391
+ * @private
392
+ */
393
+ public clearAuthState(state: string): void {
394
+ if (typeof window !== 'undefined' && window.sessionStorage) {
395
+ sessionStorage.removeItem(`oxy_auth_state_${state}`);
396
+ }
397
+ }
398
+ };
399
+ }
400
+
401
+ // Export the mixin function as both named and default
402
+ export { OxyServicesPopupAuthMixin as PopupAuthMixin };