@oxyhq/services 5.17.17 → 5.17.18

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 (403) 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.fedcm.js +289 -0
  17. package/lib/commonjs/core/mixins/OxyServices.fedcm.js.map +1 -0
  18. package/lib/commonjs/core/mixins/OxyServices.popup.js +352 -0
  19. package/lib/commonjs/core/mixins/OxyServices.popup.js.map +1 -0
  20. package/lib/commonjs/core/mixins/OxyServices.redirect.js +378 -0
  21. package/lib/commonjs/core/mixins/OxyServices.redirect.js.map +1 -0
  22. package/lib/commonjs/core/mixins/OxyServices.user.js +35 -24
  23. package/lib/commonjs/core/mixins/OxyServices.user.js.map +1 -1
  24. package/lib/commonjs/core/mixins/index.js +27 -15
  25. package/lib/commonjs/core/mixins/index.js.map +1 -1
  26. package/lib/commonjs/crypto/index.js +30 -0
  27. package/lib/commonjs/crypto/index.js.map +1 -1
  28. package/lib/commonjs/crypto/keyManager.js +902 -0
  29. package/lib/commonjs/crypto/keyManager.js.map +1 -0
  30. package/lib/commonjs/crypto/polyfill.js +14 -5
  31. package/lib/commonjs/crypto/polyfill.js.map +1 -1
  32. package/lib/commonjs/crypto/recoveryPhrase.js +152 -0
  33. package/lib/commonjs/crypto/recoveryPhrase.js.map +1 -0
  34. package/lib/commonjs/crypto/signatureService.js +289 -0
  35. package/lib/commonjs/crypto/signatureService.js.map +1 -0
  36. package/lib/commonjs/i18n/locales/en-US.json +1 -1
  37. package/lib/commonjs/index.js +40 -26
  38. package/lib/commonjs/index.js.map +1 -1
  39. package/lib/commonjs/models/interfaces.js +0 -15
  40. package/lib/commonjs/models/interfaces.js.map +1 -1
  41. package/lib/commonjs/ui/components/BottomSheetRouter.js +9 -1
  42. package/lib/commonjs/ui/components/BottomSheetRouter.js.map +1 -1
  43. package/lib/commonjs/ui/components/Icon.js.map +1 -1
  44. package/lib/commonjs/ui/components/IconButton/utils.js.map +1 -1
  45. package/lib/commonjs/ui/components/OxyProvider.js +41 -11
  46. package/lib/commonjs/ui/components/OxyProvider.js.map +1 -1
  47. package/lib/commonjs/ui/components/TextField/Adornment/utils.js.map +1 -1
  48. package/lib/commonjs/ui/components/TextField/helpers.js.map +1 -1
  49. package/lib/commonjs/ui/components/TouchableRipple/utils.js.map +1 -1
  50. package/lib/commonjs/ui/components/Typography/AnimatedText.js.map +1 -1
  51. package/lib/commonjs/ui/context/OxyContext.js +110 -199
  52. package/lib/commonjs/ui/context/OxyContext.js.map +1 -1
  53. package/lib/commonjs/ui/context/hooks/useAuthOperations.js +150 -19
  54. package/lib/commonjs/ui/context/hooks/useAuthOperations.js.map +1 -1
  55. package/lib/commonjs/ui/context/hooks/useSessionManagement.js +279 -0
  56. package/lib/commonjs/ui/context/hooks/useSessionManagement.js.map +1 -0
  57. package/lib/commonjs/ui/hooks/mutations/useAccountMutations.js +79 -72
  58. package/lib/commonjs/ui/hooks/mutations/useAccountMutations.js.map +1 -1
  59. package/lib/commonjs/ui/hooks/queries/useAccountQueries.js +38 -51
  60. package/lib/commonjs/ui/hooks/queries/useAccountQueries.js.map +1 -1
  61. package/lib/commonjs/ui/hooks/queries/useSecurityQueries.js +3 -3
  62. package/lib/commonjs/ui/hooks/queries/useSecurityQueries.js.map +1 -1
  63. package/lib/commonjs/ui/hooks/queries/useServicesQueries.js +18 -12
  64. package/lib/commonjs/ui/hooks/queries/useServicesQueries.js.map +1 -1
  65. package/lib/commonjs/ui/hooks/useProfileEditing.js +3 -5
  66. package/lib/commonjs/ui/hooks/useProfileEditing.js.map +1 -1
  67. package/lib/commonjs/ui/hooks/useSessionManagement.js +4 -8
  68. package/lib/commonjs/ui/hooks/useSessionManagement.js.map +1 -1
  69. package/lib/commonjs/ui/hooks/useSessionSocket.js +162 -315
  70. package/lib/commonjs/ui/hooks/useSessionSocket.js.map +1 -1
  71. package/lib/commonjs/ui/hooks/useStorage.js +24 -58
  72. package/lib/commonjs/ui/hooks/useStorage.js.map +1 -1
  73. package/lib/commonjs/ui/index.js +50 -21
  74. package/lib/commonjs/ui/index.js.map +1 -1
  75. package/lib/commonjs/ui/navigation/routes.js +5 -1
  76. package/lib/commonjs/ui/navigation/routes.js.map +1 -1
  77. package/lib/commonjs/ui/screens/AccountCenterScreen.js +2 -2
  78. package/lib/commonjs/ui/screens/AccountCenterScreen.js.map +1 -1
  79. package/lib/commonjs/ui/screens/AccountOverviewScreen.js.map +1 -1
  80. package/lib/commonjs/ui/screens/AccountSettingsScreen.js +29 -24
  81. package/lib/commonjs/ui/screens/AccountSettingsScreen.js.map +1 -1
  82. package/lib/commonjs/ui/screens/AccountSwitcherScreen.js +3 -3
  83. package/lib/commonjs/ui/screens/AccountSwitcherScreen.js.map +1 -1
  84. package/lib/commonjs/ui/screens/OxyAuthScreen.js +134 -66
  85. package/lib/commonjs/ui/screens/OxyAuthScreen.js.map +1 -1
  86. package/lib/commonjs/ui/screens/PrivacySettingsScreen.js +6 -13
  87. package/lib/commonjs/ui/screens/PrivacySettingsScreen.js.map +1 -1
  88. package/lib/commonjs/ui/stores/accountStore.js +2 -4
  89. package/lib/commonjs/ui/stores/accountStore.js.map +1 -1
  90. package/lib/commonjs/ui/stores/authStore.js +45 -32
  91. package/lib/commonjs/ui/stores/authStore.js.map +1 -1
  92. package/lib/commonjs/ui/styles/spacing.js +54 -2
  93. package/lib/commonjs/ui/styles/spacing.js.map +1 -1
  94. package/lib/commonjs/ui/utils/avatarUtils.js +37 -41
  95. package/lib/commonjs/ui/utils/avatarUtils.js.map +1 -1
  96. package/lib/commonjs/ui/utils/storageHelpers.js.map +1 -1
  97. package/lib/commonjs/utils/errorUtils.js +13 -0
  98. package/lib/commonjs/utils/errorUtils.js.map +1 -1
  99. package/lib/commonjs/utils/validationUtils.js +15 -1
  100. package/lib/commonjs/utils/validationUtils.js.map +1 -1
  101. package/lib/module/core/CrossDomainAuth.js +271 -0
  102. package/lib/module/core/CrossDomainAuth.js.map +1 -0
  103. package/lib/module/core/HttpService.js +82 -15
  104. package/lib/module/core/HttpService.js.map +1 -1
  105. package/lib/module/core/OxyServices.base.js +11 -4
  106. package/lib/module/core/OxyServices.base.js.map +1 -1
  107. package/lib/module/core/OxyServices.js +4 -1
  108. package/lib/module/core/OxyServices.js.map +1 -1
  109. package/lib/module/core/index.js +6 -1
  110. package/lib/module/core/index.js.map +1 -1
  111. package/lib/module/core/mixins/OxyServices.assets.js +16 -3
  112. package/lib/module/core/mixins/OxyServices.assets.js.map +1 -1
  113. package/lib/module/core/mixins/OxyServices.auth.js +73 -32
  114. package/lib/module/core/mixins/OxyServices.auth.js.map +1 -1
  115. package/lib/module/core/mixins/OxyServices.fedcm.js +286 -0
  116. package/lib/module/core/mixins/OxyServices.fedcm.js.map +1 -0
  117. package/lib/module/core/mixins/OxyServices.popup.js +349 -0
  118. package/lib/module/core/mixins/OxyServices.popup.js.map +1 -0
  119. package/lib/module/core/mixins/OxyServices.redirect.js +375 -0
  120. package/lib/module/core/mixins/OxyServices.redirect.js.map +1 -0
  121. package/lib/module/core/mixins/OxyServices.user.js +35 -24
  122. package/lib/module/core/mixins/OxyServices.user.js.map +1 -1
  123. package/lib/module/core/mixins/index.js +15 -3
  124. package/lib/module/core/mixins/index.js.map +1 -1
  125. package/lib/module/crypto/index.js +8 -4
  126. package/lib/module/crypto/index.js.map +1 -1
  127. package/lib/module/crypto/keyManager.js +899 -0
  128. package/lib/module/crypto/keyManager.js.map +1 -0
  129. package/lib/module/crypto/polyfill.js +6 -5
  130. package/lib/module/crypto/polyfill.js.map +1 -1
  131. package/lib/module/crypto/recoveryPhrase.js +147 -0
  132. package/lib/module/crypto/recoveryPhrase.js.map +1 -0
  133. package/lib/module/crypto/signatureService.js +286 -0
  134. package/lib/module/crypto/signatureService.js.map +1 -0
  135. package/lib/module/i18n/locales/en-US.json +1 -1
  136. package/lib/module/index.js +6 -9
  137. package/lib/module/index.js.map +1 -1
  138. package/lib/module/models/interfaces.js +0 -15
  139. package/lib/module/models/interfaces.js.map +1 -1
  140. package/lib/module/ui/components/BottomSheetRouter.js +6 -2
  141. package/lib/module/ui/components/BottomSheetRouter.js.map +1 -1
  142. package/lib/module/ui/components/Icon.js.map +1 -1
  143. package/lib/module/ui/components/IconButton/utils.js.map +1 -1
  144. package/lib/module/ui/components/OxyProvider.js +41 -11
  145. package/lib/module/ui/components/OxyProvider.js.map +1 -1
  146. package/lib/module/ui/components/TextField/Adornment/utils.js.map +1 -1
  147. package/lib/module/ui/components/TextField/helpers.js.map +1 -1
  148. package/lib/module/ui/components/TouchableRipple/utils.js.map +1 -1
  149. package/lib/module/ui/components/Typography/AnimatedText.js.map +1 -1
  150. package/lib/module/ui/context/OxyContext.js +112 -191
  151. package/lib/module/ui/context/OxyContext.js.map +1 -1
  152. package/lib/module/ui/context/hooks/useAuthOperations.js +150 -19
  153. package/lib/module/ui/context/hooks/useAuthOperations.js.map +1 -1
  154. package/lib/module/ui/context/hooks/useSessionManagement.js +274 -0
  155. package/lib/module/ui/context/hooks/useSessionManagement.js.map +1 -0
  156. package/lib/module/ui/hooks/mutations/useAccountMutations.js +80 -72
  157. package/lib/module/ui/hooks/mutations/useAccountMutations.js.map +1 -1
  158. package/lib/module/ui/hooks/queries/useAccountQueries.js +31 -44
  159. package/lib/module/ui/hooks/queries/useAccountQueries.js.map +1 -1
  160. package/lib/module/ui/hooks/queries/useSecurityQueries.js +1 -1
  161. package/lib/module/ui/hooks/queries/useSecurityQueries.js.map +1 -1
  162. package/lib/module/ui/hooks/queries/useServicesQueries.js +13 -7
  163. package/lib/module/ui/hooks/queries/useServicesQueries.js.map +1 -1
  164. package/lib/module/ui/hooks/useProfileEditing.js +3 -5
  165. package/lib/module/ui/hooks/useProfileEditing.js.map +1 -1
  166. package/lib/module/ui/hooks/useSessionManagement.js +4 -8
  167. package/lib/module/ui/hooks/useSessionManagement.js.map +1 -1
  168. package/lib/module/ui/hooks/useSessionSocket.js +162 -315
  169. package/lib/module/ui/hooks/useSessionSocket.js.map +1 -1
  170. package/lib/module/ui/hooks/useStorage.js +25 -59
  171. package/lib/module/ui/hooks/useStorage.js.map +1 -1
  172. package/lib/module/ui/index.js +15 -10
  173. package/lib/module/ui/index.js.map +1 -1
  174. package/lib/module/ui/navigation/routes.js +5 -1
  175. package/lib/module/ui/navigation/routes.js.map +1 -1
  176. package/lib/module/ui/screens/AccountCenterScreen.js +2 -2
  177. package/lib/module/ui/screens/AccountCenterScreen.js.map +1 -1
  178. package/lib/module/ui/screens/AccountOverviewScreen.js.map +1 -1
  179. package/lib/module/ui/screens/AccountSettingsScreen.js +29 -24
  180. package/lib/module/ui/screens/AccountSettingsScreen.js.map +1 -1
  181. package/lib/module/ui/screens/AccountSwitcherScreen.js +3 -3
  182. package/lib/module/ui/screens/AccountSwitcherScreen.js.map +1 -1
  183. package/lib/module/ui/screens/OxyAuthScreen.js +135 -68
  184. package/lib/module/ui/screens/OxyAuthScreen.js.map +1 -1
  185. package/lib/module/ui/screens/PrivacySettingsScreen.js +6 -13
  186. package/lib/module/ui/screens/PrivacySettingsScreen.js.map +1 -1
  187. package/lib/module/ui/stores/accountStore.js +2 -4
  188. package/lib/module/ui/stores/accountStore.js.map +1 -1
  189. package/lib/module/ui/stores/authStore.js +45 -32
  190. package/lib/module/ui/stores/authStore.js.map +1 -1
  191. package/lib/module/ui/styles/spacing.js +6 -2
  192. package/lib/module/ui/styles/spacing.js.map +1 -1
  193. package/lib/module/ui/utils/avatarUtils.js +37 -40
  194. package/lib/module/ui/utils/avatarUtils.js.map +1 -1
  195. package/lib/module/ui/utils/storageHelpers.js.map +1 -1
  196. package/lib/module/utils/errorUtils.js +7 -0
  197. package/lib/module/utils/errorUtils.js.map +1 -1
  198. package/lib/module/utils/validationUtils.js +13 -0
  199. package/lib/module/utils/validationUtils.js.map +1 -1
  200. package/lib/typescript/core/CrossDomainAuth.d.ts +161 -0
  201. package/lib/typescript/core/CrossDomainAuth.d.ts.map +1 -0
  202. package/lib/typescript/core/HttpService.d.ts +1 -1
  203. package/lib/typescript/core/HttpService.d.ts.map +1 -1
  204. package/lib/typescript/core/OxyServices.base.d.ts +0 -6
  205. package/lib/typescript/core/OxyServices.base.d.ts.map +1 -1
  206. package/lib/typescript/core/OxyServices.d.ts +5 -36
  207. package/lib/typescript/core/OxyServices.d.ts.map +1 -1
  208. package/lib/typescript/core/index.d.ts +4 -0
  209. package/lib/typescript/core/index.d.ts.map +1 -1
  210. package/lib/typescript/core/mixins/OxyServices.analytics.d.ts.map +1 -1
  211. package/lib/typescript/core/mixins/OxyServices.assets.d.ts.map +1 -1
  212. package/lib/typescript/core/mixins/OxyServices.auth.d.ts +40 -20
  213. package/lib/typescript/core/mixins/OxyServices.auth.d.ts.map +1 -1
  214. package/lib/typescript/core/mixins/OxyServices.developer.d.ts.map +1 -1
  215. package/lib/typescript/core/mixins/OxyServices.devices.d.ts.map +1 -1
  216. package/lib/typescript/core/mixins/OxyServices.fedcm.d.ts +195 -0
  217. package/lib/typescript/core/mixins/OxyServices.fedcm.d.ts.map +1 -0
  218. package/lib/typescript/core/mixins/OxyServices.karma.d.ts.map +1 -1
  219. package/lib/typescript/core/mixins/OxyServices.language.d.ts.map +1 -1
  220. package/lib/typescript/core/mixins/OxyServices.location.d.ts.map +1 -1
  221. package/lib/typescript/core/mixins/OxyServices.payment.d.ts.map +1 -1
  222. package/lib/typescript/core/mixins/OxyServices.popup.d.ts +206 -0
  223. package/lib/typescript/core/mixins/OxyServices.popup.d.ts.map +1 -0
  224. package/lib/typescript/core/mixins/OxyServices.privacy.d.ts.map +1 -1
  225. package/lib/typescript/core/mixins/OxyServices.redirect.d.ts +246 -0
  226. package/lib/typescript/core/mixins/OxyServices.redirect.d.ts.map +1 -0
  227. package/lib/typescript/core/mixins/OxyServices.security.d.ts.map +1 -1
  228. package/lib/typescript/core/mixins/OxyServices.user.d.ts +6 -4
  229. package/lib/typescript/core/mixins/OxyServices.user.d.ts.map +1 -1
  230. package/lib/typescript/core/mixins/OxyServices.utility.d.ts.map +1 -1
  231. package/lib/typescript/core/mixins/index.d.ts +220 -8
  232. package/lib/typescript/core/mixins/index.d.ts.map +1 -1
  233. package/lib/typescript/crypto/index.d.ts +6 -3
  234. package/lib/typescript/crypto/index.d.ts.map +1 -1
  235. package/lib/typescript/crypto/keyManager.d.ts +190 -0
  236. package/lib/typescript/crypto/keyManager.d.ts.map +1 -0
  237. package/lib/typescript/crypto/polyfill.d.ts +4 -3
  238. package/lib/typescript/crypto/polyfill.d.ts.map +1 -1
  239. package/lib/typescript/crypto/recoveryPhrase.d.ts +59 -0
  240. package/lib/typescript/crypto/recoveryPhrase.d.ts.map +1 -0
  241. package/lib/typescript/crypto/signatureService.d.ts +87 -0
  242. package/lib/typescript/crypto/signatureService.d.ts.map +1 -0
  243. package/lib/typescript/index.d.ts +5 -6
  244. package/lib/typescript/index.d.ts.map +1 -1
  245. package/lib/typescript/models/interfaces.d.ts +2 -14
  246. package/lib/typescript/models/interfaces.d.ts.map +1 -1
  247. package/lib/typescript/models/session.d.ts +0 -9
  248. package/lib/typescript/models/session.d.ts.map +1 -1
  249. package/lib/typescript/types/bip39.d.ts +32 -0
  250. package/lib/typescript/ui/components/BottomSheetRouter.d.ts +5 -0
  251. package/lib/typescript/ui/components/BottomSheetRouter.d.ts.map +1 -1
  252. package/lib/typescript/ui/components/IconButton/utils.d.ts +1 -1
  253. package/lib/typescript/ui/components/OxyProvider.d.ts.map +1 -1
  254. package/lib/typescript/ui/components/TextField/Addons/Outline.d.ts +2 -2
  255. package/lib/typescript/ui/components/TextField/Adornment/utils.d.ts +1 -1
  256. package/lib/typescript/ui/components/TextField/Adornment/utils.d.ts.map +1 -1
  257. package/lib/typescript/ui/components/TextField/helpers.d.ts +8 -8
  258. package/lib/typescript/ui/components/TextField/types.d.ts +1 -0
  259. package/lib/typescript/ui/components/TextField/types.d.ts.map +1 -1
  260. package/lib/typescript/ui/components/types.d.ts +4 -0
  261. package/lib/typescript/ui/components/types.d.ts.map +1 -1
  262. package/lib/typescript/ui/context/OxyContext.d.ts +57 -3
  263. package/lib/typescript/ui/context/OxyContext.d.ts.map +1 -1
  264. package/lib/typescript/ui/context/hooks/useAuthOperations.d.ts +10 -3
  265. package/lib/typescript/ui/context/hooks/useAuthOperations.d.ts.map +1 -1
  266. package/lib/typescript/ui/context/hooks/useSessionManagement.d.ts +41 -0
  267. package/lib/typescript/ui/context/hooks/useSessionManagement.d.ts.map +1 -0
  268. package/lib/typescript/ui/hooks/mutations/useAccountMutations.d.ts.map +1 -1
  269. package/lib/typescript/ui/hooks/queries/useAccountQueries.d.ts.map +1 -1
  270. package/lib/typescript/ui/hooks/queries/useServicesQueries.d.ts.map +1 -1
  271. package/lib/typescript/ui/hooks/useProfileEditing.d.ts.map +1 -1
  272. package/lib/typescript/ui/hooks/useSessionManagement.d.ts.map +1 -1
  273. package/lib/typescript/ui/hooks/useSessionSocket.d.ts +1 -2
  274. package/lib/typescript/ui/hooks/useSessionSocket.d.ts.map +1 -1
  275. package/lib/typescript/ui/hooks/useStorage.d.ts +3 -9
  276. package/lib/typescript/ui/hooks/useStorage.d.ts.map +1 -1
  277. package/lib/typescript/ui/index.d.ts +6 -2
  278. package/lib/typescript/ui/index.d.ts.map +1 -1
  279. package/lib/typescript/ui/navigation/routes.d.ts +1 -1
  280. package/lib/typescript/ui/navigation/routes.d.ts.map +1 -1
  281. package/lib/typescript/ui/screens/AccountSettingsScreen.d.ts.map +1 -1
  282. package/lib/typescript/ui/screens/OxyAuthScreen.d.ts +1 -1
  283. package/lib/typescript/ui/screens/OxyAuthScreen.d.ts.map +1 -1
  284. package/lib/typescript/ui/screens/PrivacySettingsScreen.d.ts.map +1 -1
  285. package/lib/typescript/ui/stores/accountStore.d.ts.map +1 -1
  286. package/lib/typescript/ui/stores/authStore.d.ts +8 -7
  287. package/lib/typescript/ui/stores/authStore.d.ts.map +1 -1
  288. package/lib/typescript/ui/styles/spacing.d.ts +5 -0
  289. package/lib/typescript/ui/styles/spacing.d.ts.map +1 -1
  290. package/lib/typescript/ui/types/navigation.d.ts +2 -1
  291. package/lib/typescript/ui/types/navigation.d.ts.map +1 -1
  292. package/lib/typescript/ui/utils/avatarUtils.d.ts +2 -13
  293. package/lib/typescript/ui/utils/avatarUtils.d.ts.map +1 -1
  294. package/lib/typescript/ui/utils/storageHelpers.d.ts +0 -3
  295. package/lib/typescript/ui/utils/storageHelpers.d.ts.map +1 -1
  296. package/lib/typescript/utils/errorUtils.d.ts +6 -0
  297. package/lib/typescript/utils/errorUtils.d.ts.map +1 -1
  298. package/lib/typescript/utils/validationUtils.d.ts +8 -0
  299. package/lib/typescript/utils/validationUtils.d.ts.map +1 -1
  300. package/package.json +8 -7
  301. package/src/core/CrossDomainAuth.ts +307 -0
  302. package/src/core/HttpService.ts +99 -16
  303. package/src/core/OxyServices.base.ts +20 -3
  304. package/src/core/OxyServices.ts +7 -3
  305. package/src/core/index.ts +9 -1
  306. package/src/core/mixins/OxyServices.assets.ts +14 -3
  307. package/src/core/mixins/OxyServices.auth.ts +105 -36
  308. package/src/core/mixins/OxyServices.fedcm.ts +315 -0
  309. package/src/core/mixins/OxyServices.popup.ts +402 -0
  310. package/src/core/mixins/OxyServices.redirect.ts +397 -0
  311. package/src/core/mixins/OxyServices.user.ts +39 -24
  312. package/src/core/mixins/index.ts +19 -3
  313. package/src/crypto/index.ts +16 -5
  314. package/src/crypto/keyManager.ts +966 -0
  315. package/src/crypto/polyfill.ts +6 -5
  316. package/src/crypto/recoveryPhrase.ts +166 -0
  317. package/src/crypto/signatureService.ts +323 -0
  318. package/src/i18n/locales/en-US.json +1 -1
  319. package/src/index.ts +19 -15
  320. package/src/models/interfaces.ts +4 -16
  321. package/src/models/session.ts +2 -11
  322. package/src/types/bip39.d.ts +32 -0
  323. package/src/ui/components/BottomSheetRouter.tsx +6 -1
  324. package/src/ui/components/Icon.tsx +1 -1
  325. package/src/ui/components/IconButton/utils.ts +1 -1
  326. package/src/ui/components/OxyProvider.tsx +44 -12
  327. package/src/ui/components/TextField/Addons/Outline.tsx +2 -2
  328. package/src/ui/components/TextField/Adornment/utils.ts +2 -2
  329. package/src/ui/components/TextField/helpers.tsx +10 -10
  330. package/src/ui/components/TextField/types.tsx +1 -1
  331. package/src/ui/components/TouchableRipple/utils.ts +2 -2
  332. package/src/ui/components/Typography/AnimatedText.tsx +2 -2
  333. package/src/ui/components/types.tsx +6 -0
  334. package/src/ui/context/OxyContext.tsx +173 -195
  335. package/src/ui/context/hooks/useAuthOperations.ts +177 -36
  336. package/src/ui/context/hooks/useSessionManagement.ts +399 -0
  337. package/src/ui/hooks/mutations/useAccountMutations.ts +83 -76
  338. package/src/ui/hooks/queries/useAccountQueries.ts +29 -35
  339. package/src/ui/hooks/queries/useSecurityQueries.ts +1 -1
  340. package/src/ui/hooks/queries/useServicesQueries.ts +14 -6
  341. package/src/ui/hooks/useProfileEditing.ts +3 -3
  342. package/src/ui/hooks/useSessionManagement.ts +5 -10
  343. package/src/ui/hooks/useSessionSocket.ts +46 -175
  344. package/src/ui/hooks/useStorage.ts +24 -76
  345. package/src/ui/index.ts +22 -13
  346. package/src/ui/navigation/routes.ts +6 -2
  347. package/src/ui/screens/AccountCenterScreen.tsx +2 -2
  348. package/src/ui/screens/AccountOverviewScreen.tsx +1 -1
  349. package/src/ui/screens/AccountSettingsScreen.tsx +34 -37
  350. package/src/ui/screens/AccountSwitcherScreen.tsx +4 -4
  351. package/src/ui/screens/OxyAuthScreen.tsx +138 -64
  352. package/src/ui/screens/PrivacySettingsScreen.tsx +6 -12
  353. package/src/ui/stores/accountStore.ts +1 -11
  354. package/src/ui/stores/authStore.ts +43 -44
  355. package/src/ui/styles/spacing.ts +15 -2
  356. package/src/ui/types/navigation.ts +2 -2
  357. package/src/ui/utils/avatarUtils.ts +39 -46
  358. package/src/ui/utils/storageHelpers.ts +0 -4
  359. package/src/utils/__tests__/validationUtils.test.ts +16 -1
  360. package/src/utils/errorUtils.ts +8 -1
  361. package/src/utils/validationUtils.ts +12 -0
  362. package/lib/commonjs/core/services/SessionService.js +0 -163
  363. package/lib/commonjs/core/services/SessionService.js.map +0 -1
  364. package/lib/commonjs/core/services/TokenService.js +0 -220
  365. package/lib/commonjs/core/services/TokenService.js.map +0 -1
  366. package/lib/commonjs/crypto/types.js +0 -2
  367. package/lib/commonjs/crypto/types.js.map +0 -1
  368. package/lib/commonjs/ui/context/OxyContextBase.js +0 -21
  369. package/lib/commonjs/ui/context/OxyContextBase.js.map +0 -1
  370. package/lib/commonjs/ui/context/hooks/useStorage.js +0 -79
  371. package/lib/commonjs/ui/context/hooks/useStorage.js.map +0 -1
  372. package/lib/commonjs/ui/hooks/useAvatarPicker.js +0 -56
  373. package/lib/commonjs/ui/hooks/useAvatarPicker.js.map +0 -1
  374. package/lib/module/core/services/SessionService.js +0 -159
  375. package/lib/module/core/services/SessionService.js.map +0 -1
  376. package/lib/module/core/services/TokenService.js +0 -217
  377. package/lib/module/core/services/TokenService.js.map +0 -1
  378. package/lib/module/crypto/types.js +0 -2
  379. package/lib/module/crypto/types.js.map +0 -1
  380. package/lib/module/ui/context/OxyContextBase.js +0 -16
  381. package/lib/module/ui/context/OxyContextBase.js.map +0 -1
  382. package/lib/module/ui/context/hooks/useStorage.js +0 -74
  383. package/lib/module/ui/context/hooks/useStorage.js.map +0 -1
  384. package/lib/module/ui/hooks/useAvatarPicker.js +0 -50
  385. package/lib/module/ui/hooks/useAvatarPicker.js.map +0 -1
  386. package/lib/typescript/core/services/SessionService.d.ts +0 -78
  387. package/lib/typescript/core/services/SessionService.d.ts.map +0 -1
  388. package/lib/typescript/core/services/TokenService.d.ts +0 -72
  389. package/lib/typescript/core/services/TokenService.d.ts.map +0 -1
  390. package/lib/typescript/crypto/types.d.ts +0 -22
  391. package/lib/typescript/crypto/types.d.ts.map +0 -1
  392. package/lib/typescript/ui/context/OxyContextBase.d.ts +0 -63
  393. package/lib/typescript/ui/context/OxyContextBase.d.ts.map +0 -1
  394. package/lib/typescript/ui/context/hooks/useStorage.d.ts +0 -22
  395. package/lib/typescript/ui/context/hooks/useStorage.d.ts.map +0 -1
  396. package/lib/typescript/ui/hooks/useAvatarPicker.d.ts +0 -19
  397. package/lib/typescript/ui/hooks/useAvatarPicker.d.ts.map +0 -1
  398. package/src/core/services/SessionService.ts +0 -173
  399. package/src/core/services/TokenService.ts +0 -237
  400. package/src/crypto/types.ts +0 -23
  401. package/src/ui/context/OxyContextBase.tsx +0 -78
  402. package/src/ui/context/hooks/useStorage.ts +0 -104
  403. package/src/ui/hooks/useAvatarPicker.ts +0 -61
@@ -0,0 +1,289 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.FedCMMixin = exports.OxyServicesFedCMMixin = OxyServicesFedCMMixin;
7
+ var _OxyServices = require("../OxyServices.errors");
8
+ /**
9
+ * Federated Credential Management (FedCM) Authentication Mixin
10
+ *
11
+ * Implements the modern browser-native identity federation API that enables
12
+ * Google-style cross-domain authentication without third-party cookies.
13
+ *
14
+ * Browser Support:
15
+ * - Chrome 108+
16
+ * - Safari 16.4+
17
+ * - Edge 108+
18
+ * - Firefox: Not yet supported (fallback required)
19
+ *
20
+ * Key Features:
21
+ * - No redirects or popups required
22
+ * - Browser-native UI prompts
23
+ * - Privacy-preserving (IdP can't track users)
24
+ * - Automatic SSO across domains
25
+ * - Silent re-authentication support
26
+ *
27
+ * @see https://developer.mozilla.org/en-US/docs/Web/API/FedCM_API
28
+ */
29
+ function OxyServicesFedCMMixin(Base) {
30
+ return class extends Base {
31
+ constructor(...args) {
32
+ super(...args);
33
+ }
34
+ static DEFAULT_CONFIG_URL = 'https://auth.oxy.so/fedcm.json';
35
+ static FEDCM_TIMEOUT = 60000; // 1 minute
36
+
37
+ /**
38
+ * Check if FedCM is supported in the current browser
39
+ */
40
+ static isFedCMSupported() {
41
+ if (typeof window === 'undefined') return false;
42
+ return 'IdentityCredential' in window && 'navigator' in window && 'credentials' in navigator;
43
+ }
44
+
45
+ /**
46
+ * Instance method to check FedCM support
47
+ */
48
+ isFedCMSupported() {
49
+ return this.constructor.isFedCMSupported();
50
+ }
51
+
52
+ /**
53
+ * Sign in using FedCM (Federated Credential Management API)
54
+ *
55
+ * This provides a Google-style authentication experience:
56
+ * - Browser shows native "Sign in with Oxy" prompt
57
+ * - No redirect or popup required
58
+ * - User approves → credential exchange happens in browser
59
+ * - All apps automatically get SSO after first sign-in
60
+ *
61
+ * @param options - Authentication options
62
+ * @returns Session with access token and user data
63
+ * @throws {OxyAuthenticationError} If FedCM not supported or user cancels
64
+ *
65
+ * @example
66
+ * ```typescript
67
+ * try {
68
+ * const session = await oxyServices.signInWithFedCM();
69
+ * console.log('Signed in:', session.user);
70
+ * } catch (error) {
71
+ * // Fallback to popup or redirect auth
72
+ * await oxyServices.signInWithPopup();
73
+ * }
74
+ * ```
75
+ */
76
+ async signInWithFedCM(options = {}) {
77
+ if (!this.isFedCMSupported()) {
78
+ throw new _OxyServices.OxyAuthenticationError('FedCM not supported in this browser. Please update your browser or use an alternative sign-in method.');
79
+ }
80
+ try {
81
+ const nonce = options.nonce || this.generateNonce();
82
+ const clientId = this.getClientId();
83
+
84
+ // Request credential from browser's native identity flow
85
+ const credential = await this.requestIdentityCredential({
86
+ configURL: this.constructor.DEFAULT_CONFIG_URL,
87
+ clientId,
88
+ nonce,
89
+ context: options.context
90
+ });
91
+ if (!credential || !credential.token) {
92
+ throw new _OxyServices.OxyAuthenticationError('No credential received from browser');
93
+ }
94
+
95
+ // Exchange FedCM ID token for Oxy session
96
+ const session = await this.exchangeIdTokenForSession(credential.token);
97
+
98
+ // Store access token in HttpService (extract from response or get from session)
99
+ if (session && session.accessToken) {
100
+ this.httpService.setTokens(session.accessToken);
101
+ }
102
+ return session;
103
+ } catch (error) {
104
+ if (error.name === 'AbortError') {
105
+ throw new _OxyServices.OxyAuthenticationError('Sign-in was cancelled by user');
106
+ }
107
+ if (error.name === 'NetworkError') {
108
+ throw new _OxyServices.OxyAuthenticationError('Network error during sign-in. Please check your connection.');
109
+ }
110
+ throw error;
111
+ }
112
+ }
113
+
114
+ /**
115
+ * Silent sign-in using FedCM
116
+ *
117
+ * Attempts to automatically re-authenticate the user without any UI.
118
+ * This is what enables "instant sign-in" across all Oxy domains after
119
+ * the user has signed in once.
120
+ *
121
+ * The browser will:
122
+ * 1. Check if user has previously signed in to Oxy
123
+ * 2. Check if user is still signed in at auth.oxy.so
124
+ * 3. If yes, automatically provide credential without prompting
125
+ *
126
+ * @returns Session if user is already signed in, null otherwise
127
+ *
128
+ * @example
129
+ * ```typescript
130
+ * // On app startup
131
+ * useEffect(() => {
132
+ * const checkAuth = async () => {
133
+ * const session = await oxyServices.silentSignInWithFedCM();
134
+ * if (session) {
135
+ * setUser(session.user);
136
+ * } else {
137
+ * // Show sign-in button
138
+ * }
139
+ * };
140
+ * checkAuth();
141
+ * }, []);
142
+ * ```
143
+ */
144
+ async silentSignInWithFedCM() {
145
+ if (!this.isFedCMSupported()) {
146
+ return null;
147
+ }
148
+ try {
149
+ const nonce = this.generateNonce();
150
+ const clientId = this.getClientId();
151
+
152
+ // Request credential with silent mediation (no UI)
153
+ const credential = await this.requestIdentityCredential({
154
+ configURL: this.constructor.DEFAULT_CONFIG_URL,
155
+ clientId,
156
+ nonce,
157
+ mediation: 'silent'
158
+ });
159
+ if (!credential || !credential.token) {
160
+ return null;
161
+ }
162
+ const session = await this.exchangeIdTokenForSession(credential.token);
163
+ if (session && session.accessToken) {
164
+ this.httpService.setTokens(session.accessToken);
165
+ }
166
+ return session;
167
+ } catch (error) {
168
+ // Silent failures are expected and should not throw
169
+ return null;
170
+ }
171
+ }
172
+
173
+ /**
174
+ * Request identity credential from browser using FedCM API
175
+ *
176
+ * @private
177
+ */
178
+ async requestIdentityCredential(options) {
179
+ const controller = new AbortController();
180
+ const timeout = setTimeout(() => controller.abort(), this.constructor.FEDCM_TIMEOUT);
181
+ try {
182
+ // Type assertion needed as FedCM types may not be in all TypeScript versions
183
+ const credential = await navigator.credentials.get({
184
+ identity: {
185
+ providers: [{
186
+ configURL: options.configURL,
187
+ clientId: options.clientId,
188
+ nonce: options.nonce,
189
+ ...(options.context && {
190
+ loginHint: options.context
191
+ })
192
+ }]
193
+ },
194
+ mediation: options.mediation || 'optional',
195
+ signal: controller.signal
196
+ });
197
+ if (!credential || credential.type !== 'identity') {
198
+ return null;
199
+ }
200
+ return {
201
+ token: credential.token
202
+ };
203
+ } finally {
204
+ clearTimeout(timeout);
205
+ }
206
+ }
207
+
208
+ /**
209
+ * Exchange FedCM ID token for Oxy session
210
+ *
211
+ * The ID token is a JWT issued by auth.oxy.so that proves the user's
212
+ * identity. We exchange it for a full Oxy session with access token.
213
+ *
214
+ * @private
215
+ */
216
+ async exchangeIdTokenForSession(idToken) {
217
+ return this.makeRequest('POST', '/api/auth/fedcm/exchange', {
218
+ id_token: idToken
219
+ }, {
220
+ cache: false
221
+ });
222
+ }
223
+
224
+ /**
225
+ * Revoke FedCM credential (sign out)
226
+ *
227
+ * This tells the browser to forget the FedCM credential for this app.
228
+ * The user will need to re-authenticate next time.
229
+ */
230
+ async revokeFedCMCredential() {
231
+ if (!this.isFedCMSupported()) {
232
+ return;
233
+ }
234
+ try {
235
+ // FedCM logout API (if available)
236
+ if ('IdentityCredential' in window && 'logout' in window.IdentityCredential) {
237
+ const clientId = this.getClientId();
238
+ await window.IdentityCredential.logout({
239
+ configURL: this.constructor.DEFAULT_CONFIG_URL,
240
+ clientId
241
+ });
242
+ }
243
+ } catch (error) {
244
+ // Silent failure
245
+ }
246
+ }
247
+
248
+ /**
249
+ * Get configuration for FedCM
250
+ *
251
+ * @returns FedCM configuration with browser support info
252
+ */
253
+ getFedCMConfig() {
254
+ return {
255
+ enabled: this.isFedCMSupported(),
256
+ configURL: this.constructor.DEFAULT_CONFIG_URL,
257
+ clientId: this.getClientId()
258
+ };
259
+ }
260
+
261
+ /**
262
+ * Generate a cryptographically secure nonce for FedCM
263
+ *
264
+ * @private
265
+ */
266
+ generateNonce() {
267
+ if (typeof window !== 'undefined' && window.crypto && window.crypto.randomUUID) {
268
+ return window.crypto.randomUUID();
269
+ }
270
+ // Fallback for older browsers
271
+ return `${Date.now()}-${Math.random().toString(36).substring(2, 15)}`;
272
+ }
273
+
274
+ /**
275
+ * Get the client ID for this origin
276
+ *
277
+ * @private
278
+ */
279
+ getClientId() {
280
+ if (typeof window === 'undefined') {
281
+ return 'unknown';
282
+ }
283
+ return window.location.origin;
284
+ }
285
+ };
286
+ }
287
+
288
+ // Export the mixin function as both named and default
289
+ //# sourceMappingURL=OxyServices.fedcm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_OxyServices","require","OxyServicesFedCMMixin","Base","constructor","args","DEFAULT_CONFIG_URL","FEDCM_TIMEOUT","isFedCMSupported","window","navigator","signInWithFedCM","options","OxyAuthenticationError","nonce","generateNonce","clientId","getClientId","credential","requestIdentityCredential","configURL","context","token","session","exchangeIdTokenForSession","accessToken","httpService","setTokens","error","name","silentSignInWithFedCM","mediation","controller","AbortController","timeout","setTimeout","abort","credentials","get","identity","providers","loginHint","signal","type","clearTimeout","idToken","makeRequest","id_token","cache","revokeFedCMCredential","IdentityCredential","logout","getFedCMConfig","enabled","crypto","randomUUID","Date","now","Math","random","toString","substring","location","origin"],"sourceRoot":"../../../../src","sources":["core/mixins/OxyServices.fedcm.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,352 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.PopupAuthMixin = exports.OxyServicesPopupAuthMixin = OxyServicesPopupAuthMixin;
7
+ var _OxyServices = require("../OxyServices.errors");
8
+ /**
9
+ * Popup-based Cross-Domain Authentication Mixin
10
+ *
11
+ * Implements OAuth2-style authentication using popup windows and postMessage.
12
+ * This is the primary authentication method for modern browsers, providing a
13
+ * Google-like experience without full page redirects.
14
+ *
15
+ * Flow:
16
+ * 1. Opens small popup window to auth.oxy.so
17
+ * 2. User signs in (auth.oxy.so sets its own first-party cookie)
18
+ * 3. auth.oxy.so sends token back via postMessage
19
+ * 4. Popup closes, parent app has the session
20
+ *
21
+ * Features:
22
+ * - No full page redirect (preserves app state)
23
+ * - Works across different domains (homiio.com, mention.earth, etc.)
24
+ * - Silent refresh using hidden iframe for seamless SSO
25
+ * - CSRF protection via state parameter
26
+ * - XSS protection via origin validation
27
+ *
28
+ * Browser Support: All modern browsers (IE11+)
29
+ */
30
+ function OxyServicesPopupAuthMixin(Base) {
31
+ return class extends Base {
32
+ constructor(...args) {
33
+ super(...args);
34
+ }
35
+ static AUTH_URL = 'https://auth.oxy.so';
36
+ static POPUP_WIDTH = 500;
37
+ static POPUP_HEIGHT = 700;
38
+ static POPUP_TIMEOUT = 60000; // 1 minute
39
+ static SILENT_TIMEOUT = 5000; // 5 seconds
40
+
41
+ /**
42
+ * Sign in using popup window
43
+ *
44
+ * Opens a centered popup window to auth.oxy.so where the user can sign in.
45
+ * The popup automatically closes after successful authentication and the
46
+ * session is returned to the parent window.
47
+ *
48
+ * @param options - Popup configuration options
49
+ * @returns Session with access token and user data
50
+ * @throws {OxyAuthenticationError} If popup is blocked or auth fails
51
+ *
52
+ * @example
53
+ * ```typescript
54
+ * const handleSignIn = async () => {
55
+ * try {
56
+ * const session = await oxyServices.signInWithPopup();
57
+ * console.log('Signed in:', session.user);
58
+ * } catch (error) {
59
+ * if (error.message.includes('blocked')) {
60
+ * alert('Please allow popups for this site');
61
+ * }
62
+ * }
63
+ * };
64
+ * ```
65
+ */
66
+ async signInWithPopup(options = {}) {
67
+ if (typeof window === 'undefined') {
68
+ throw new _OxyServices.OxyAuthenticationError('Popup authentication requires browser environment');
69
+ }
70
+ const state = this.generateState();
71
+ const nonce = this.generateNonce();
72
+
73
+ // Store state for CSRF protection
74
+ this.storeAuthState(state, nonce);
75
+ const width = options.width || this.constructor.POPUP_WIDTH;
76
+ const height = options.height || this.constructor.POPUP_HEIGHT;
77
+ const timeout = options.timeout || this.constructor.POPUP_TIMEOUT;
78
+ const mode = options.mode || 'login';
79
+ const authUrl = this.buildAuthUrl({
80
+ mode,
81
+ state,
82
+ nonce,
83
+ clientId: window.location.origin,
84
+ redirectUri: `${this.constructor.AUTH_URL}/auth/callback`
85
+ });
86
+ const popup = this.openCenteredPopup(authUrl, 'Oxy Sign In', width, height);
87
+ if (!popup) {
88
+ throw new _OxyServices.OxyAuthenticationError('Popup blocked. Please allow popups for this site and try again.');
89
+ }
90
+ try {
91
+ const session = await this.waitForPopupAuth(popup, state, timeout);
92
+
93
+ // Store access token if present
94
+ if (session && session.accessToken) {
95
+ this.httpService.setTokens(session.accessToken);
96
+ }
97
+ return session;
98
+ } catch (error) {
99
+ throw error;
100
+ } finally {
101
+ this.clearAuthState(state);
102
+ }
103
+ }
104
+
105
+ /**
106
+ * Sign up using popup window
107
+ *
108
+ * Same as signInWithPopup but opens the signup page by default.
109
+ *
110
+ * @param options - Popup configuration options
111
+ * @returns Session with access token and user data
112
+ */
113
+ async signUpWithPopup(options = {}) {
114
+ return this.signInWithPopup({
115
+ ...options,
116
+ mode: 'signup'
117
+ });
118
+ }
119
+
120
+ /**
121
+ * Silent sign-in using hidden iframe
122
+ *
123
+ * Attempts to automatically re-authenticate the user without any UI.
124
+ * This is what enables seamless SSO across all Oxy domains.
125
+ *
126
+ * How it works:
127
+ * 1. Creates hidden iframe pointing to auth.oxy.so/silent-auth
128
+ * 2. If user has valid session at auth.oxy.so, it sends token via postMessage
129
+ * 3. If not, iframe responds with null (no error thrown)
130
+ *
131
+ * This should be called on app startup to check for existing sessions.
132
+ *
133
+ * @param options - Silent auth options
134
+ * @returns Session if user is signed in, null otherwise
135
+ *
136
+ * @example
137
+ * ```typescript
138
+ * useEffect(() => {
139
+ * const checkAuth = async () => {
140
+ * const session = await oxyServices.silentSignIn();
141
+ * if (session) {
142
+ * setUser(session.user);
143
+ * }
144
+ * };
145
+ * checkAuth();
146
+ * }, []);
147
+ * ```
148
+ */
149
+ async silentSignIn(options = {}) {
150
+ if (typeof window === 'undefined') {
151
+ return null;
152
+ }
153
+ const timeout = options.timeout || this.constructor.SILENT_TIMEOUT;
154
+ const nonce = this.generateNonce();
155
+ const clientId = window.location.origin;
156
+ const iframe = document.createElement('iframe');
157
+ iframe.style.display = 'none';
158
+ iframe.style.position = 'absolute';
159
+ iframe.style.width = '0';
160
+ iframe.style.height = '0';
161
+ iframe.style.border = 'none';
162
+ const silentUrl = `${this.constructor.AUTH_URL}/auth/silent?` + `client_id=${encodeURIComponent(clientId)}&` + `nonce=${nonce}`;
163
+ iframe.src = silentUrl;
164
+ document.body.appendChild(iframe);
165
+ try {
166
+ const session = await this.waitForIframeAuth(iframe, timeout, clientId);
167
+ if (session && session.accessToken) {
168
+ this.httpService.setTokens(session.accessToken);
169
+ }
170
+ return session;
171
+ } catch (error) {
172
+ return null;
173
+ } finally {
174
+ document.body.removeChild(iframe);
175
+ }
176
+ }
177
+
178
+ /**
179
+ * Open a centered popup window
180
+ *
181
+ * @private
182
+ */
183
+ openCenteredPopup(url, title, width, height) {
184
+ const left = window.screenX + (window.outerWidth - width) / 2;
185
+ const top = window.screenY + (window.outerHeight - height) / 2;
186
+ const features = [`width=${width}`, `height=${height}`, `left=${left}`, `top=${top}`, 'toolbar=no', 'menubar=no', 'scrollbars=yes', 'resizable=yes', 'status=no', 'location=no'].join(',');
187
+ return window.open(url, title, features);
188
+ }
189
+
190
+ /**
191
+ * Wait for authentication response from popup
192
+ *
193
+ * @private
194
+ */
195
+ async waitForPopupAuth(popup, expectedState, timeout) {
196
+ return new Promise((resolve, reject) => {
197
+ const timeoutId = setTimeout(() => {
198
+ cleanup();
199
+ reject(new _OxyServices.OxyAuthenticationError('Authentication timeout'));
200
+ }, timeout);
201
+ const messageHandler = event => {
202
+ // CRITICAL: Verify origin to prevent XSS attacks
203
+ if (event.origin !== this.constructor.AUTH_URL) {
204
+ return;
205
+ }
206
+ const {
207
+ type,
208
+ state,
209
+ session,
210
+ error
211
+ } = event.data;
212
+ if (type !== 'oxy_auth_response') {
213
+ return;
214
+ }
215
+
216
+ // Verify state parameter to prevent CSRF attacks
217
+ if (state !== expectedState) {
218
+ cleanup();
219
+ reject(new _OxyServices.OxyAuthenticationError('Invalid state parameter. Possible CSRF attack.'));
220
+ return;
221
+ }
222
+ cleanup();
223
+ if (error) {
224
+ reject(new _OxyServices.OxyAuthenticationError(error));
225
+ } else if (session) {
226
+ resolve(session);
227
+ } else {
228
+ reject(new _OxyServices.OxyAuthenticationError('No session received from authentication server'));
229
+ }
230
+ };
231
+
232
+ // Poll to detect if user closed the popup
233
+ const pollInterval = setInterval(() => {
234
+ if (popup.closed) {
235
+ cleanup();
236
+ reject(new _OxyServices.OxyAuthenticationError('Authentication cancelled by user'));
237
+ }
238
+ }, 500);
239
+ const cleanup = () => {
240
+ clearTimeout(timeoutId);
241
+ clearInterval(pollInterval);
242
+ window.removeEventListener('message', messageHandler);
243
+ if (!popup.closed) {
244
+ popup.close();
245
+ }
246
+ };
247
+ window.addEventListener('message', messageHandler);
248
+ });
249
+ }
250
+
251
+ /**
252
+ * Wait for authentication response from iframe
253
+ *
254
+ * @private
255
+ */
256
+ async waitForIframeAuth(iframe, timeout, expectedOrigin) {
257
+ return new Promise(resolve => {
258
+ const timeoutId = setTimeout(() => {
259
+ cleanup();
260
+ resolve(null); // Silent failure - don't throw
261
+ }, timeout);
262
+ const messageHandler = event => {
263
+ // Verify origin
264
+ if (event.origin !== this.constructor.AUTH_URL) {
265
+ return;
266
+ }
267
+ const {
268
+ type,
269
+ session
270
+ } = event.data;
271
+ if (type !== 'oxy_silent_auth') {
272
+ return;
273
+ }
274
+ cleanup();
275
+ resolve(session || null);
276
+ };
277
+ const cleanup = () => {
278
+ clearTimeout(timeoutId);
279
+ window.removeEventListener('message', messageHandler);
280
+ };
281
+ window.addEventListener('message', messageHandler);
282
+ });
283
+ }
284
+
285
+ /**
286
+ * Build authentication URL with query parameters
287
+ *
288
+ * @private
289
+ */
290
+ buildAuthUrl(params) {
291
+ const url = new URL(`${this.constructor.AUTH_URL}/${params.mode}`);
292
+ url.searchParams.set('response_type', 'token');
293
+ url.searchParams.set('client_id', params.clientId);
294
+ url.searchParams.set('redirect_uri', params.redirectUri);
295
+ url.searchParams.set('state', params.state);
296
+ url.searchParams.set('nonce', params.nonce);
297
+ return url.toString();
298
+ }
299
+
300
+ /**
301
+ * Generate cryptographically secure state for CSRF protection
302
+ *
303
+ * @private
304
+ */
305
+ generateState() {
306
+ if (typeof window !== 'undefined' && window.crypto && window.crypto.randomUUID) {
307
+ return window.crypto.randomUUID();
308
+ }
309
+ return `${Date.now()}-${Math.random().toString(36).substring(2, 15)}`;
310
+ }
311
+
312
+ /**
313
+ * Generate nonce for replay attack prevention
314
+ *
315
+ * @private
316
+ */
317
+ generateNonce() {
318
+ if (typeof window !== 'undefined' && window.crypto && window.crypto.randomUUID) {
319
+ return window.crypto.randomUUID();
320
+ }
321
+ return `${Date.now()}-${Math.random().toString(36).substring(2, 15)}`;
322
+ }
323
+
324
+ /**
325
+ * Store auth state in session storage
326
+ *
327
+ * @private
328
+ */
329
+ storeAuthState(state, nonce) {
330
+ if (typeof window !== 'undefined' && window.sessionStorage) {
331
+ sessionStorage.setItem(`oxy_auth_state_${state}`, JSON.stringify({
332
+ nonce,
333
+ timestamp: Date.now()
334
+ }));
335
+ }
336
+ }
337
+
338
+ /**
339
+ * Clear auth state from session storage
340
+ *
341
+ * @private
342
+ */
343
+ clearAuthState(state) {
344
+ if (typeof window !== 'undefined' && window.sessionStorage) {
345
+ sessionStorage.removeItem(`oxy_auth_state_${state}`);
346
+ }
347
+ }
348
+ };
349
+ }
350
+
351
+ // Export the mixin function as both named and default
352
+ //# sourceMappingURL=OxyServices.popup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_OxyServices","require","OxyServicesPopupAuthMixin","Base","constructor","args","AUTH_URL","POPUP_WIDTH","POPUP_HEIGHT","POPUP_TIMEOUT","SILENT_TIMEOUT","signInWithPopup","options","window","OxyAuthenticationError","state","generateState","nonce","generateNonce","storeAuthState","width","height","timeout","mode","authUrl","buildAuthUrl","clientId","location","origin","redirectUri","popup","openCenteredPopup","session","waitForPopupAuth","accessToken","httpService","setTokens","error","clearAuthState","signUpWithPopup","silentSignIn","iframe","document","createElement","style","display","position","border","silentUrl","encodeURIComponent","src","body","appendChild","waitForIframeAuth","removeChild","url","title","left","screenX","outerWidth","top","screenY","outerHeight","features","join","open","expectedState","Promise","resolve","reject","timeoutId","setTimeout","cleanup","messageHandler","event","type","data","pollInterval","setInterval","closed","clearTimeout","clearInterval","removeEventListener","close","addEventListener","expectedOrigin","params","URL","searchParams","set","toString","crypto","randomUUID","Date","now","Math","random","substring","sessionStorage","setItem","JSON","stringify","timestamp","removeItem"],"sourceRoot":"../../../../src","sources":["core/mixins/OxyServices.popup.ts"],"mappings":"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","ignoreList":[]}