@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.
- package/README.md +32 -38
- package/lib/commonjs/core/CrossDomainAuth.js +277 -0
- package/lib/commonjs/core/CrossDomainAuth.js.map +1 -0
- package/lib/commonjs/core/HttpService.js +82 -15
- package/lib/commonjs/core/HttpService.js.map +1 -1
- package/lib/commonjs/core/OxyServices.base.js +11 -3
- package/lib/commonjs/core/OxyServices.base.js.map +1 -1
- package/lib/commonjs/core/OxyServices.js +4 -1
- package/lib/commonjs/core/OxyServices.js.map +1 -1
- package/lib/commonjs/core/index.js +30 -0
- package/lib/commonjs/core/index.js.map +1 -1
- package/lib/commonjs/core/mixins/OxyServices.assets.js +16 -3
- package/lib/commonjs/core/mixins/OxyServices.assets.js.map +1 -1
- package/lib/commonjs/core/mixins/OxyServices.auth.js +73 -32
- package/lib/commonjs/core/mixins/OxyServices.auth.js.map +1 -1
- package/lib/commonjs/core/mixins/OxyServices.fedcm.js +289 -0
- package/lib/commonjs/core/mixins/OxyServices.fedcm.js.map +1 -0
- package/lib/commonjs/core/mixins/OxyServices.popup.js +352 -0
- package/lib/commonjs/core/mixins/OxyServices.popup.js.map +1 -0
- package/lib/commonjs/core/mixins/OxyServices.redirect.js +378 -0
- package/lib/commonjs/core/mixins/OxyServices.redirect.js.map +1 -0
- package/lib/commonjs/core/mixins/OxyServices.user.js +35 -24
- package/lib/commonjs/core/mixins/OxyServices.user.js.map +1 -1
- package/lib/commonjs/core/mixins/index.js +27 -15
- package/lib/commonjs/core/mixins/index.js.map +1 -1
- package/lib/commonjs/crypto/index.js +30 -0
- package/lib/commonjs/crypto/index.js.map +1 -1
- package/lib/commonjs/crypto/keyManager.js +902 -0
- package/lib/commonjs/crypto/keyManager.js.map +1 -0
- package/lib/commonjs/crypto/polyfill.js +14 -5
- package/lib/commonjs/crypto/polyfill.js.map +1 -1
- package/lib/commonjs/crypto/recoveryPhrase.js +152 -0
- package/lib/commonjs/crypto/recoveryPhrase.js.map +1 -0
- package/lib/commonjs/crypto/signatureService.js +289 -0
- package/lib/commonjs/crypto/signatureService.js.map +1 -0
- package/lib/commonjs/i18n/locales/en-US.json +1 -1
- package/lib/commonjs/index.js +40 -26
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/models/interfaces.js +0 -15
- package/lib/commonjs/models/interfaces.js.map +1 -1
- package/lib/commonjs/ui/components/BottomSheetRouter.js +9 -1
- package/lib/commonjs/ui/components/BottomSheetRouter.js.map +1 -1
- package/lib/commonjs/ui/components/Icon.js.map +1 -1
- package/lib/commonjs/ui/components/IconButton/utils.js.map +1 -1
- package/lib/commonjs/ui/components/OxyProvider.js +41 -11
- package/lib/commonjs/ui/components/OxyProvider.js.map +1 -1
- package/lib/commonjs/ui/components/TextField/Adornment/utils.js.map +1 -1
- package/lib/commonjs/ui/components/TextField/helpers.js.map +1 -1
- package/lib/commonjs/ui/components/TouchableRipple/utils.js.map +1 -1
- package/lib/commonjs/ui/components/Typography/AnimatedText.js.map +1 -1
- package/lib/commonjs/ui/context/OxyContext.js +110 -199
- package/lib/commonjs/ui/context/OxyContext.js.map +1 -1
- package/lib/commonjs/ui/context/hooks/useAuthOperations.js +150 -19
- package/lib/commonjs/ui/context/hooks/useAuthOperations.js.map +1 -1
- package/lib/commonjs/ui/context/hooks/useSessionManagement.js +279 -0
- package/lib/commonjs/ui/context/hooks/useSessionManagement.js.map +1 -0
- package/lib/commonjs/ui/hooks/mutations/useAccountMutations.js +79 -72
- package/lib/commonjs/ui/hooks/mutations/useAccountMutations.js.map +1 -1
- package/lib/commonjs/ui/hooks/queries/useAccountQueries.js +38 -51
- package/lib/commonjs/ui/hooks/queries/useAccountQueries.js.map +1 -1
- package/lib/commonjs/ui/hooks/queries/useSecurityQueries.js +3 -3
- package/lib/commonjs/ui/hooks/queries/useSecurityQueries.js.map +1 -1
- package/lib/commonjs/ui/hooks/queries/useServicesQueries.js +18 -12
- package/lib/commonjs/ui/hooks/queries/useServicesQueries.js.map +1 -1
- package/lib/commonjs/ui/hooks/useProfileEditing.js +3 -5
- package/lib/commonjs/ui/hooks/useProfileEditing.js.map +1 -1
- package/lib/commonjs/ui/hooks/useSessionManagement.js +4 -8
- package/lib/commonjs/ui/hooks/useSessionManagement.js.map +1 -1
- package/lib/commonjs/ui/hooks/useSessionSocket.js +162 -315
- package/lib/commonjs/ui/hooks/useSessionSocket.js.map +1 -1
- package/lib/commonjs/ui/hooks/useStorage.js +24 -58
- package/lib/commonjs/ui/hooks/useStorage.js.map +1 -1
- package/lib/commonjs/ui/index.js +50 -21
- package/lib/commonjs/ui/index.js.map +1 -1
- package/lib/commonjs/ui/navigation/routes.js +5 -1
- package/lib/commonjs/ui/navigation/routes.js.map +1 -1
- package/lib/commonjs/ui/screens/AccountCenterScreen.js +2 -2
- package/lib/commonjs/ui/screens/AccountCenterScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/AccountOverviewScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/AccountSettingsScreen.js +29 -24
- package/lib/commonjs/ui/screens/AccountSettingsScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/AccountSwitcherScreen.js +3 -3
- package/lib/commonjs/ui/screens/AccountSwitcherScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/OxyAuthScreen.js +134 -66
- package/lib/commonjs/ui/screens/OxyAuthScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/PrivacySettingsScreen.js +6 -13
- package/lib/commonjs/ui/screens/PrivacySettingsScreen.js.map +1 -1
- package/lib/commonjs/ui/stores/accountStore.js +2 -4
- package/lib/commonjs/ui/stores/accountStore.js.map +1 -1
- package/lib/commonjs/ui/stores/authStore.js +45 -32
- package/lib/commonjs/ui/stores/authStore.js.map +1 -1
- package/lib/commonjs/ui/styles/spacing.js +54 -2
- package/lib/commonjs/ui/styles/spacing.js.map +1 -1
- package/lib/commonjs/ui/utils/avatarUtils.js +37 -41
- package/lib/commonjs/ui/utils/avatarUtils.js.map +1 -1
- package/lib/commonjs/ui/utils/storageHelpers.js.map +1 -1
- package/lib/commonjs/utils/errorUtils.js +13 -0
- package/lib/commonjs/utils/errorUtils.js.map +1 -1
- package/lib/commonjs/utils/validationUtils.js +15 -1
- package/lib/commonjs/utils/validationUtils.js.map +1 -1
- package/lib/module/core/CrossDomainAuth.js +271 -0
- package/lib/module/core/CrossDomainAuth.js.map +1 -0
- package/lib/module/core/HttpService.js +82 -15
- package/lib/module/core/HttpService.js.map +1 -1
- package/lib/module/core/OxyServices.base.js +11 -4
- package/lib/module/core/OxyServices.base.js.map +1 -1
- package/lib/module/core/OxyServices.js +4 -1
- package/lib/module/core/OxyServices.js.map +1 -1
- package/lib/module/core/index.js +6 -1
- package/lib/module/core/index.js.map +1 -1
- package/lib/module/core/mixins/OxyServices.assets.js +16 -3
- package/lib/module/core/mixins/OxyServices.assets.js.map +1 -1
- package/lib/module/core/mixins/OxyServices.auth.js +73 -32
- package/lib/module/core/mixins/OxyServices.auth.js.map +1 -1
- package/lib/module/core/mixins/OxyServices.fedcm.js +286 -0
- package/lib/module/core/mixins/OxyServices.fedcm.js.map +1 -0
- package/lib/module/core/mixins/OxyServices.popup.js +349 -0
- package/lib/module/core/mixins/OxyServices.popup.js.map +1 -0
- package/lib/module/core/mixins/OxyServices.redirect.js +375 -0
- package/lib/module/core/mixins/OxyServices.redirect.js.map +1 -0
- package/lib/module/core/mixins/OxyServices.user.js +35 -24
- package/lib/module/core/mixins/OxyServices.user.js.map +1 -1
- package/lib/module/core/mixins/index.js +15 -3
- package/lib/module/core/mixins/index.js.map +1 -1
- package/lib/module/crypto/index.js +8 -4
- package/lib/module/crypto/index.js.map +1 -1
- package/lib/module/crypto/keyManager.js +899 -0
- package/lib/module/crypto/keyManager.js.map +1 -0
- package/lib/module/crypto/polyfill.js +6 -5
- package/lib/module/crypto/polyfill.js.map +1 -1
- package/lib/module/crypto/recoveryPhrase.js +147 -0
- package/lib/module/crypto/recoveryPhrase.js.map +1 -0
- package/lib/module/crypto/signatureService.js +286 -0
- package/lib/module/crypto/signatureService.js.map +1 -0
- package/lib/module/i18n/locales/en-US.json +1 -1
- package/lib/module/index.js +6 -9
- package/lib/module/index.js.map +1 -1
- package/lib/module/models/interfaces.js +0 -15
- package/lib/module/models/interfaces.js.map +1 -1
- package/lib/module/ui/components/BottomSheetRouter.js +6 -2
- package/lib/module/ui/components/BottomSheetRouter.js.map +1 -1
- package/lib/module/ui/components/Icon.js.map +1 -1
- package/lib/module/ui/components/IconButton/utils.js.map +1 -1
- package/lib/module/ui/components/OxyProvider.js +41 -11
- package/lib/module/ui/components/OxyProvider.js.map +1 -1
- package/lib/module/ui/components/TextField/Adornment/utils.js.map +1 -1
- package/lib/module/ui/components/TextField/helpers.js.map +1 -1
- package/lib/module/ui/components/TouchableRipple/utils.js.map +1 -1
- package/lib/module/ui/components/Typography/AnimatedText.js.map +1 -1
- package/lib/module/ui/context/OxyContext.js +112 -191
- package/lib/module/ui/context/OxyContext.js.map +1 -1
- package/lib/module/ui/context/hooks/useAuthOperations.js +150 -19
- package/lib/module/ui/context/hooks/useAuthOperations.js.map +1 -1
- package/lib/module/ui/context/hooks/useSessionManagement.js +274 -0
- package/lib/module/ui/context/hooks/useSessionManagement.js.map +1 -0
- package/lib/module/ui/hooks/mutations/useAccountMutations.js +80 -72
- package/lib/module/ui/hooks/mutations/useAccountMutations.js.map +1 -1
- package/lib/module/ui/hooks/queries/useAccountQueries.js +31 -44
- package/lib/module/ui/hooks/queries/useAccountQueries.js.map +1 -1
- package/lib/module/ui/hooks/queries/useSecurityQueries.js +1 -1
- package/lib/module/ui/hooks/queries/useSecurityQueries.js.map +1 -1
- package/lib/module/ui/hooks/queries/useServicesQueries.js +13 -7
- package/lib/module/ui/hooks/queries/useServicesQueries.js.map +1 -1
- package/lib/module/ui/hooks/useProfileEditing.js +3 -5
- package/lib/module/ui/hooks/useProfileEditing.js.map +1 -1
- package/lib/module/ui/hooks/useSessionManagement.js +4 -8
- package/lib/module/ui/hooks/useSessionManagement.js.map +1 -1
- package/lib/module/ui/hooks/useSessionSocket.js +162 -315
- package/lib/module/ui/hooks/useSessionSocket.js.map +1 -1
- package/lib/module/ui/hooks/useStorage.js +25 -59
- package/lib/module/ui/hooks/useStorage.js.map +1 -1
- package/lib/module/ui/index.js +15 -10
- package/lib/module/ui/index.js.map +1 -1
- package/lib/module/ui/navigation/routes.js +5 -1
- package/lib/module/ui/navigation/routes.js.map +1 -1
- package/lib/module/ui/screens/AccountCenterScreen.js +2 -2
- package/lib/module/ui/screens/AccountCenterScreen.js.map +1 -1
- package/lib/module/ui/screens/AccountOverviewScreen.js.map +1 -1
- package/lib/module/ui/screens/AccountSettingsScreen.js +29 -24
- package/lib/module/ui/screens/AccountSettingsScreen.js.map +1 -1
- package/lib/module/ui/screens/AccountSwitcherScreen.js +3 -3
- package/lib/module/ui/screens/AccountSwitcherScreen.js.map +1 -1
- package/lib/module/ui/screens/OxyAuthScreen.js +135 -68
- package/lib/module/ui/screens/OxyAuthScreen.js.map +1 -1
- package/lib/module/ui/screens/PrivacySettingsScreen.js +6 -13
- package/lib/module/ui/screens/PrivacySettingsScreen.js.map +1 -1
- package/lib/module/ui/stores/accountStore.js +2 -4
- package/lib/module/ui/stores/accountStore.js.map +1 -1
- package/lib/module/ui/stores/authStore.js +45 -32
- package/lib/module/ui/stores/authStore.js.map +1 -1
- package/lib/module/ui/styles/spacing.js +6 -2
- package/lib/module/ui/styles/spacing.js.map +1 -1
- package/lib/module/ui/utils/avatarUtils.js +37 -40
- package/lib/module/ui/utils/avatarUtils.js.map +1 -1
- package/lib/module/ui/utils/storageHelpers.js.map +1 -1
- package/lib/module/utils/errorUtils.js +7 -0
- package/lib/module/utils/errorUtils.js.map +1 -1
- package/lib/module/utils/validationUtils.js +13 -0
- package/lib/module/utils/validationUtils.js.map +1 -1
- package/lib/typescript/core/CrossDomainAuth.d.ts +161 -0
- package/lib/typescript/core/CrossDomainAuth.d.ts.map +1 -0
- package/lib/typescript/core/HttpService.d.ts +1 -1
- package/lib/typescript/core/HttpService.d.ts.map +1 -1
- package/lib/typescript/core/OxyServices.base.d.ts +0 -6
- package/lib/typescript/core/OxyServices.base.d.ts.map +1 -1
- package/lib/typescript/core/OxyServices.d.ts +5 -36
- package/lib/typescript/core/OxyServices.d.ts.map +1 -1
- package/lib/typescript/core/index.d.ts +4 -0
- package/lib/typescript/core/index.d.ts.map +1 -1
- package/lib/typescript/core/mixins/OxyServices.analytics.d.ts.map +1 -1
- package/lib/typescript/core/mixins/OxyServices.assets.d.ts.map +1 -1
- package/lib/typescript/core/mixins/OxyServices.auth.d.ts +40 -20
- package/lib/typescript/core/mixins/OxyServices.auth.d.ts.map +1 -1
- package/lib/typescript/core/mixins/OxyServices.developer.d.ts.map +1 -1
- package/lib/typescript/core/mixins/OxyServices.devices.d.ts.map +1 -1
- package/lib/typescript/core/mixins/OxyServices.fedcm.d.ts +195 -0
- package/lib/typescript/core/mixins/OxyServices.fedcm.d.ts.map +1 -0
- package/lib/typescript/core/mixins/OxyServices.karma.d.ts.map +1 -1
- package/lib/typescript/core/mixins/OxyServices.language.d.ts.map +1 -1
- package/lib/typescript/core/mixins/OxyServices.location.d.ts.map +1 -1
- package/lib/typescript/core/mixins/OxyServices.payment.d.ts.map +1 -1
- package/lib/typescript/core/mixins/OxyServices.popup.d.ts +206 -0
- package/lib/typescript/core/mixins/OxyServices.popup.d.ts.map +1 -0
- package/lib/typescript/core/mixins/OxyServices.privacy.d.ts.map +1 -1
- package/lib/typescript/core/mixins/OxyServices.redirect.d.ts +246 -0
- package/lib/typescript/core/mixins/OxyServices.redirect.d.ts.map +1 -0
- package/lib/typescript/core/mixins/OxyServices.security.d.ts.map +1 -1
- package/lib/typescript/core/mixins/OxyServices.user.d.ts +6 -4
- package/lib/typescript/core/mixins/OxyServices.user.d.ts.map +1 -1
- package/lib/typescript/core/mixins/OxyServices.utility.d.ts.map +1 -1
- package/lib/typescript/core/mixins/index.d.ts +220 -8
- package/lib/typescript/core/mixins/index.d.ts.map +1 -1
- package/lib/typescript/crypto/index.d.ts +6 -3
- package/lib/typescript/crypto/index.d.ts.map +1 -1
- package/lib/typescript/crypto/keyManager.d.ts +190 -0
- package/lib/typescript/crypto/keyManager.d.ts.map +1 -0
- package/lib/typescript/crypto/polyfill.d.ts +4 -3
- package/lib/typescript/crypto/polyfill.d.ts.map +1 -1
- package/lib/typescript/crypto/recoveryPhrase.d.ts +59 -0
- package/lib/typescript/crypto/recoveryPhrase.d.ts.map +1 -0
- package/lib/typescript/crypto/signatureService.d.ts +87 -0
- package/lib/typescript/crypto/signatureService.d.ts.map +1 -0
- package/lib/typescript/index.d.ts +5 -6
- package/lib/typescript/index.d.ts.map +1 -1
- package/lib/typescript/models/interfaces.d.ts +2 -14
- package/lib/typescript/models/interfaces.d.ts.map +1 -1
- package/lib/typescript/models/session.d.ts +0 -9
- package/lib/typescript/models/session.d.ts.map +1 -1
- package/lib/typescript/types/bip39.d.ts +32 -0
- package/lib/typescript/ui/components/BottomSheetRouter.d.ts +5 -0
- package/lib/typescript/ui/components/BottomSheetRouter.d.ts.map +1 -1
- package/lib/typescript/ui/components/IconButton/utils.d.ts +1 -1
- package/lib/typescript/ui/components/OxyProvider.d.ts.map +1 -1
- package/lib/typescript/ui/components/TextField/Addons/Outline.d.ts +2 -2
- package/lib/typescript/ui/components/TextField/Adornment/utils.d.ts +1 -1
- package/lib/typescript/ui/components/TextField/Adornment/utils.d.ts.map +1 -1
- package/lib/typescript/ui/components/TextField/helpers.d.ts +8 -8
- package/lib/typescript/ui/components/TextField/types.d.ts +1 -0
- package/lib/typescript/ui/components/TextField/types.d.ts.map +1 -1
- package/lib/typescript/ui/components/types.d.ts +4 -0
- package/lib/typescript/ui/components/types.d.ts.map +1 -1
- package/lib/typescript/ui/context/OxyContext.d.ts +57 -3
- package/lib/typescript/ui/context/OxyContext.d.ts.map +1 -1
- package/lib/typescript/ui/context/hooks/useAuthOperations.d.ts +10 -3
- package/lib/typescript/ui/context/hooks/useAuthOperations.d.ts.map +1 -1
- package/lib/typescript/ui/context/hooks/useSessionManagement.d.ts +41 -0
- package/lib/typescript/ui/context/hooks/useSessionManagement.d.ts.map +1 -0
- package/lib/typescript/ui/hooks/mutations/useAccountMutations.d.ts.map +1 -1
- package/lib/typescript/ui/hooks/queries/useAccountQueries.d.ts.map +1 -1
- package/lib/typescript/ui/hooks/queries/useServicesQueries.d.ts.map +1 -1
- package/lib/typescript/ui/hooks/useProfileEditing.d.ts.map +1 -1
- package/lib/typescript/ui/hooks/useSessionManagement.d.ts.map +1 -1
- package/lib/typescript/ui/hooks/useSessionSocket.d.ts +1 -2
- package/lib/typescript/ui/hooks/useSessionSocket.d.ts.map +1 -1
- package/lib/typescript/ui/hooks/useStorage.d.ts +3 -9
- package/lib/typescript/ui/hooks/useStorage.d.ts.map +1 -1
- package/lib/typescript/ui/index.d.ts +6 -2
- package/lib/typescript/ui/index.d.ts.map +1 -1
- package/lib/typescript/ui/navigation/routes.d.ts +1 -1
- package/lib/typescript/ui/navigation/routes.d.ts.map +1 -1
- package/lib/typescript/ui/screens/AccountSettingsScreen.d.ts.map +1 -1
- package/lib/typescript/ui/screens/OxyAuthScreen.d.ts +1 -1
- package/lib/typescript/ui/screens/OxyAuthScreen.d.ts.map +1 -1
- package/lib/typescript/ui/screens/PrivacySettingsScreen.d.ts.map +1 -1
- package/lib/typescript/ui/stores/accountStore.d.ts.map +1 -1
- package/lib/typescript/ui/stores/authStore.d.ts +8 -7
- package/lib/typescript/ui/stores/authStore.d.ts.map +1 -1
- package/lib/typescript/ui/styles/spacing.d.ts +5 -0
- package/lib/typescript/ui/styles/spacing.d.ts.map +1 -1
- package/lib/typescript/ui/types/navigation.d.ts +2 -1
- package/lib/typescript/ui/types/navigation.d.ts.map +1 -1
- package/lib/typescript/ui/utils/avatarUtils.d.ts +2 -13
- package/lib/typescript/ui/utils/avatarUtils.d.ts.map +1 -1
- package/lib/typescript/ui/utils/storageHelpers.d.ts +0 -3
- package/lib/typescript/ui/utils/storageHelpers.d.ts.map +1 -1
- package/lib/typescript/utils/errorUtils.d.ts +6 -0
- package/lib/typescript/utils/errorUtils.d.ts.map +1 -1
- package/lib/typescript/utils/validationUtils.d.ts +8 -0
- package/lib/typescript/utils/validationUtils.d.ts.map +1 -1
- package/package.json +8 -7
- package/src/core/CrossDomainAuth.ts +307 -0
- package/src/core/HttpService.ts +99 -16
- package/src/core/OxyServices.base.ts +20 -3
- package/src/core/OxyServices.ts +7 -3
- package/src/core/index.ts +9 -1
- package/src/core/mixins/OxyServices.assets.ts +14 -3
- package/src/core/mixins/OxyServices.auth.ts +105 -36
- package/src/core/mixins/OxyServices.fedcm.ts +315 -0
- package/src/core/mixins/OxyServices.popup.ts +402 -0
- package/src/core/mixins/OxyServices.redirect.ts +397 -0
- package/src/core/mixins/OxyServices.user.ts +39 -24
- package/src/core/mixins/index.ts +19 -3
- package/src/crypto/index.ts +16 -5
- package/src/crypto/keyManager.ts +966 -0
- package/src/crypto/polyfill.ts +6 -5
- package/src/crypto/recoveryPhrase.ts +166 -0
- package/src/crypto/signatureService.ts +323 -0
- package/src/i18n/locales/en-US.json +1 -1
- package/src/index.ts +19 -15
- package/src/models/interfaces.ts +4 -16
- package/src/models/session.ts +2 -11
- package/src/types/bip39.d.ts +32 -0
- package/src/ui/components/BottomSheetRouter.tsx +6 -1
- package/src/ui/components/Icon.tsx +1 -1
- package/src/ui/components/IconButton/utils.ts +1 -1
- package/src/ui/components/OxyProvider.tsx +44 -12
- package/src/ui/components/TextField/Addons/Outline.tsx +2 -2
- package/src/ui/components/TextField/Adornment/utils.ts +2 -2
- package/src/ui/components/TextField/helpers.tsx +10 -10
- package/src/ui/components/TextField/types.tsx +1 -1
- package/src/ui/components/TouchableRipple/utils.ts +2 -2
- package/src/ui/components/Typography/AnimatedText.tsx +2 -2
- package/src/ui/components/types.tsx +6 -0
- package/src/ui/context/OxyContext.tsx +173 -195
- package/src/ui/context/hooks/useAuthOperations.ts +177 -36
- package/src/ui/context/hooks/useSessionManagement.ts +399 -0
- package/src/ui/hooks/mutations/useAccountMutations.ts +83 -76
- package/src/ui/hooks/queries/useAccountQueries.ts +29 -35
- package/src/ui/hooks/queries/useSecurityQueries.ts +1 -1
- package/src/ui/hooks/queries/useServicesQueries.ts +14 -6
- package/src/ui/hooks/useProfileEditing.ts +3 -3
- package/src/ui/hooks/useSessionManagement.ts +5 -10
- package/src/ui/hooks/useSessionSocket.ts +46 -175
- package/src/ui/hooks/useStorage.ts +24 -76
- package/src/ui/index.ts +22 -13
- package/src/ui/navigation/routes.ts +6 -2
- package/src/ui/screens/AccountCenterScreen.tsx +2 -2
- package/src/ui/screens/AccountOverviewScreen.tsx +1 -1
- package/src/ui/screens/AccountSettingsScreen.tsx +34 -37
- package/src/ui/screens/AccountSwitcherScreen.tsx +4 -4
- package/src/ui/screens/OxyAuthScreen.tsx +138 -64
- package/src/ui/screens/PrivacySettingsScreen.tsx +6 -12
- package/src/ui/stores/accountStore.ts +1 -11
- package/src/ui/stores/authStore.ts +43 -44
- package/src/ui/styles/spacing.ts +15 -2
- package/src/ui/types/navigation.ts +2 -2
- package/src/ui/utils/avatarUtils.ts +39 -46
- package/src/ui/utils/storageHelpers.ts +0 -4
- package/src/utils/__tests__/validationUtils.test.ts +16 -1
- package/src/utils/errorUtils.ts +8 -1
- package/src/utils/validationUtils.ts +12 -0
- package/lib/commonjs/core/services/SessionService.js +0 -163
- package/lib/commonjs/core/services/SessionService.js.map +0 -1
- package/lib/commonjs/core/services/TokenService.js +0 -220
- package/lib/commonjs/core/services/TokenService.js.map +0 -1
- package/lib/commonjs/crypto/types.js +0 -2
- package/lib/commonjs/crypto/types.js.map +0 -1
- package/lib/commonjs/ui/context/OxyContextBase.js +0 -21
- package/lib/commonjs/ui/context/OxyContextBase.js.map +0 -1
- package/lib/commonjs/ui/context/hooks/useStorage.js +0 -79
- package/lib/commonjs/ui/context/hooks/useStorage.js.map +0 -1
- package/lib/commonjs/ui/hooks/useAvatarPicker.js +0 -56
- package/lib/commonjs/ui/hooks/useAvatarPicker.js.map +0 -1
- package/lib/module/core/services/SessionService.js +0 -159
- package/lib/module/core/services/SessionService.js.map +0 -1
- package/lib/module/core/services/TokenService.js +0 -217
- package/lib/module/core/services/TokenService.js.map +0 -1
- package/lib/module/crypto/types.js +0 -2
- package/lib/module/crypto/types.js.map +0 -1
- package/lib/module/ui/context/OxyContextBase.js +0 -16
- package/lib/module/ui/context/OxyContextBase.js.map +0 -1
- package/lib/module/ui/context/hooks/useStorage.js +0 -74
- package/lib/module/ui/context/hooks/useStorage.js.map +0 -1
- package/lib/module/ui/hooks/useAvatarPicker.js +0 -50
- package/lib/module/ui/hooks/useAvatarPicker.js.map +0 -1
- package/lib/typescript/core/services/SessionService.d.ts +0 -78
- package/lib/typescript/core/services/SessionService.d.ts.map +0 -1
- package/lib/typescript/core/services/TokenService.d.ts +0 -72
- package/lib/typescript/core/services/TokenService.d.ts.map +0 -1
- package/lib/typescript/crypto/types.d.ts +0 -22
- package/lib/typescript/crypto/types.d.ts.map +0 -1
- package/lib/typescript/ui/context/OxyContextBase.d.ts +0 -63
- package/lib/typescript/ui/context/OxyContextBase.d.ts.map +0 -1
- package/lib/typescript/ui/context/hooks/useStorage.d.ts +0 -22
- package/lib/typescript/ui/context/hooks/useStorage.d.ts.map +0 -1
- package/lib/typescript/ui/hooks/useAvatarPicker.d.ts +0 -19
- package/lib/typescript/ui/hooks/useAvatarPicker.d.ts.map +0 -1
- package/src/core/services/SessionService.ts +0 -173
- package/src/core/services/TokenService.ts +0 -237
- package/src/crypto/types.ts +0 -23
- package/src/ui/context/OxyContextBase.tsx +0 -78
- package/src/ui/context/hooks/useStorage.ts +0 -104
- package/src/ui/hooks/useAvatarPicker.ts +0 -61
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["useCallback","useEffect","useRef","useState","createPlatformStorage","extractErrorMessage","DEFAULT_ERROR_CODE","useStorage","onError","logger","errorCode","storage","setStorage","error","setError","initializingRef","notifyError","err","message","code","status","createStorageInstance","platformStorage","refresh","current","finally","catch","withStorage","callback","resolvedStorage","isReady","Boolean"],"sourceRoot":"../../../../../src","sources":["ui/context/hooks/useStorage.ts"],"mappings":";;AAAA,SAASA,WAAW,EAAEC,SAAS,EAAEC,MAAM,EAAEC,QAAQ,QAAQ,OAAO;AAEhE,SAASC,qBAAqB,QAA+B,4BAA4B;AACzF,SAASC,mBAAmB,QAAQ,2BAA2B;AAgB/D,MAAMC,kBAAkB,GAAG,oBAAoB;;AAE/C;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,UAAU,GAAGA,CAAC;EACzBC,OAAO;EACPC,MAAM;EACNC,SAAS,GAAGJ;AACK,CAAC,GAAG,CAAC,CAAC,KAAuB;EAC9C,MAAM,CAACK,OAAO,EAAEC,UAAU,CAAC,GAAGT,QAAQ,CAA0B,IAAI,CAAC;EACrE,MAAM,CAACU,KAAK,EAAEC,QAAQ,CAAC,GAAGX,QAAQ,CAAgB,IAAI,CAAC;EACvD,MAAMY,eAAe,GAAGb,MAAM,CAA0C,IAAI,CAAC;EAE7E,MAAMc,WAAW,GAAGhB,WAAW,CAC5BiB,GAAY,IAAK;IAChB,MAAMC,OAAO,GAAGb,mBAAmB,CAACY,GAAG,EAAE,8BAA8B,CAAC;IACxEH,QAAQ,CAACI,OAAO,CAAC;IAEjB,IAAIT,MAAM,EAAE;MACVA,MAAM,CAACS,OAAO,EAAED,GAAG,CAAC;IACtB;IAEAT,OAAO,GAAG;MACRU,OAAO;MACPC,IAAI,EAAET,SAAS;MACfU,MAAM,EAAE;IACV,CAAC,CAAC;EACJ,CAAC,EACD,CAACV,SAAS,EAAED,MAAM,EAAED,OAAO,CAC7B,CAAC;EAED,MAAMa,qBAAqB,GAAGrB,WAAW,CAAC,YAA8C;IACtF,IAAI;MACF,MAAMsB,eAAe,GAAG,MAAMlB,qBAAqB,CAAC,CAAC;MACrDQ,UAAU,CAACU,eAAe,CAAC;MAC3BR,QAAQ,CAAC,IAAI,CAAC;MACd,OAAOQ,eAAe;IACxB,CAAC,CAAC,OAAOL,GAAG,EAAE;MACZD,WAAW,CAACC,GAAG,CAAC;MAChBL,UAAU,CAAC,IAAI,CAAC;MAChB,OAAO,IAAI;IACb;EACF,CAAC,EAAE,CAACI,WAAW,CAAC,CAAC;EAEjB,MAAMO,OAAO,GAAGvB,WAAW,CAAC,YAA8C;IACxE,IAAI,CAACe,eAAe,CAACS,OAAO,EAAE;MAC5BT,eAAe,CAACS,OAAO,GAAGH,qBAAqB,CAAC,CAAC,CAACI,OAAO,CAAC,MAAM;QAC9DV,eAAe,CAACS,OAAO,GAAG,IAAI;MAChC,CAAC,CAAC;IACJ;IAEA,OAAOT,eAAe,CAACS,OAAO;EAChC,CAAC,EAAE,CAACH,qBAAqB,CAAC,CAAC;EAE3BpB,SAAS,CAAC,MAAM;IACdsB,OAAO,CAAC,CAAC,CAACG,KAAK,CAAET,GAAG,IAAK;MACvBD,WAAW,CAACC,GAAG,CAAC;IAClB,CAAC,CAAC;EACJ,CAAC,EAAE,CAACM,OAAO,EAAEP,WAAW,CAAC,CAAC;EAE1B,MAAMW,WAAW,GAAG3B,WAAW,CAC7B,MAAW4B,QAA2D,IAAwB;IAC5F,MAAMC,eAAe,GAAGlB,OAAO,KAAK,MAAMY,OAAO,CAAC,CAAC,CAAC;IACpD,IAAI,CAACM,eAAe,EAAE;MACpB,OAAO,IAAI;IACb;IACA,OAAOD,QAAQ,CAACC,eAAe,CAAC;EAClC,CAAC,EACD,CAACN,OAAO,EAAEZ,OAAO,CACnB,CAAC;EAED,OAAO;IACLA,OAAO;IACPmB,OAAO,EAAEC,OAAO,CAACpB,OAAO,CAAC,IAAI,CAACE,KAAK;IACnCA,KAAK;IACLU,OAAO;IACPI;EACF,CAAC;AACH,CAAC","ignoreList":[]}
|
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Provides avatar picker action wired to bottom sheet selection and profile update.
|
|
5
|
-
*/
|
|
6
|
-
import { useCallback } from 'react';
|
|
7
|
-
import { toast } from '../../lib/sonner';
|
|
8
|
-
import { translate } from '../../i18n';
|
|
9
|
-
import { updateAvatarVisibility, updateProfileWithAvatar } from '../utils/avatarUtils';
|
|
10
|
-
export const useAvatarPicker = ({
|
|
11
|
-
oxyServices,
|
|
12
|
-
currentLanguage,
|
|
13
|
-
activeSessionId,
|
|
14
|
-
currentDeviceId,
|
|
15
|
-
queryClient,
|
|
16
|
-
showBottomSheet
|
|
17
|
-
}) => {
|
|
18
|
-
const openAvatarPicker = useCallback(() => {
|
|
19
|
-
showBottomSheet({
|
|
20
|
-
screen: 'FileManagement',
|
|
21
|
-
props: {
|
|
22
|
-
selectMode: true,
|
|
23
|
-
multiSelect: false,
|
|
24
|
-
disabledMimeTypes: ['video/', 'audio/', 'application/pdf'],
|
|
25
|
-
afterSelect: 'none',
|
|
26
|
-
onSelect: async file => {
|
|
27
|
-
if (!file.contentType.startsWith('image/')) {
|
|
28
|
-
toast.error(translate(currentLanguage, 'editProfile.toasts.selectImage') || 'Please select an image file');
|
|
29
|
-
return;
|
|
30
|
-
}
|
|
31
|
-
try {
|
|
32
|
-
await updateAvatarVisibility(file.id, oxyServices, 'OxyContext');
|
|
33
|
-
await updateProfileWithAvatar({
|
|
34
|
-
avatar: file.id
|
|
35
|
-
}, oxyServices, activeSessionId, queryClient, {
|
|
36
|
-
deviceId: currentDeviceId || undefined
|
|
37
|
-
});
|
|
38
|
-
toast.success(translate(currentLanguage, 'editProfile.toasts.avatarUpdated') || 'Avatar updated');
|
|
39
|
-
} catch (e) {
|
|
40
|
-
toast.error(e.message || translate(currentLanguage, 'editProfile.toasts.updateAvatarFailed') || 'Failed to update avatar');
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
});
|
|
45
|
-
}, [activeSessionId, currentDeviceId, currentLanguage, oxyServices, queryClient, showBottomSheet]);
|
|
46
|
-
return {
|
|
47
|
-
openAvatarPicker
|
|
48
|
-
};
|
|
49
|
-
};
|
|
50
|
-
//# sourceMappingURL=useAvatarPicker.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["useCallback","toast","translate","updateAvatarVisibility","updateProfileWithAvatar","useAvatarPicker","oxyServices","currentLanguage","activeSessionId","currentDeviceId","queryClient","showBottomSheet","openAvatarPicker","screen","props","selectMode","multiSelect","disabledMimeTypes","afterSelect","onSelect","file","contentType","startsWith","error","id","avatar","deviceId","undefined","success","e","message"],"sourceRoot":"../../../../src","sources":["ui/hooks/useAvatarPicker.ts"],"mappings":";;AAAA;AACA;AACA;AACA,SAASA,WAAW,QAAQ,OAAO;AAEnC,SAASC,KAAK,QAAQ,kBAAkB;AACxC,SAASC,SAAS,QAAQ,YAAY;AACtC,SAASC,sBAAsB,EAAEC,uBAAuB,QAAQ,sBAAsB;AAatF,OAAO,MAAMC,eAAe,GAAGA,CAAC;EAC9BC,WAAW;EACXC,eAAe;EACfC,eAAe;EACfC,eAAe;EACfC,WAAW;EACXC;AACsB,CAAC,KAAK;EAC5B,MAAMC,gBAAgB,GAAGZ,WAAW,CAAC,MAAM;IACzCW,eAAe,CAAC;MACdE,MAAM,EAAE,gBAA6B;MACrCC,KAAK,EAAE;QACLC,UAAU,EAAE,IAAI;QAChBC,WAAW,EAAE,KAAK;QAClBC,iBAAiB,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,iBAAiB,CAAC;QAC1DC,WAAW,EAAE,MAAM;QACnBC,QAAQ,EAAE,MAAOC,IAAS,IAAK;UAC7B,IAAI,CAACA,IAAI,CAACC,WAAW,CAACC,UAAU,CAAC,QAAQ,CAAC,EAAE;YAC1CrB,KAAK,CAACsB,KAAK,CAACrB,SAAS,CAACK,eAAe,EAAE,gCAAgC,CAAC,IAAI,6BAA6B,CAAC;YAC1G;UACF;UACA,IAAI;YACF,MAAMJ,sBAAsB,CAACiB,IAAI,CAACI,EAAE,EAAElB,WAAW,EAAE,YAAY,CAAC;YAChE,MAAMF,uBAAuB,CAC3B;cAAEqB,MAAM,EAAEL,IAAI,CAACI;YAAG,CAAC,EACnBlB,WAAW,EACXE,eAAe,EACfE,WAAW,EACX;cAAEgB,QAAQ,EAAEjB,eAAe,IAAIkB;YAAU,CAC3C,CAAC;YACD1B,KAAK,CAAC2B,OAAO,CAAC1B,SAAS,CAACK,eAAe,EAAE,kCAAkC,CAAC,IAAI,gBAAgB,CAAC;UACnG,CAAC,CAAC,OAAOsB,CAAM,EAAE;YACf5B,KAAK,CAACsB,KAAK,CAACM,CAAC,CAACC,OAAO,IAAI5B,SAAS,CAACK,eAAe,EAAE,uCAAuC,CAAC,IAAI,yBAAyB,CAAC;UAC5H;QACF;MACF;IACF,CAAC,CAAC;EACJ,CAAC,EAAE,CAACC,eAAe,EAAEC,eAAe,EAAEF,eAAe,EAAED,WAAW,EAAEI,WAAW,EAAEC,eAAe,CAAC,CAAC;EAElG,OAAO;IAAEC;EAAiB,CAAC;AAC7B,CAAC","ignoreList":[]}
|
|
@@ -1,78 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* SessionService - Single Source of Truth for Session Management
|
|
3
|
-
*
|
|
4
|
-
* Handles all session operations: creation, validation, refresh, invalidation.
|
|
5
|
-
* Manages active session state and provides session data to other services.
|
|
6
|
-
*
|
|
7
|
-
* Architecture:
|
|
8
|
-
* - Single source of truth for session operations
|
|
9
|
-
* - Handles both online and offline sessions
|
|
10
|
-
* - Integrates with TokenService for token management
|
|
11
|
-
* - userId is always MongoDB ObjectId, never publicKey
|
|
12
|
-
*/
|
|
13
|
-
import type { OxyServices } from '../OxyServices';
|
|
14
|
-
import type { User } from '../../models/interfaces';
|
|
15
|
-
export interface Session {
|
|
16
|
-
sessionId: string;
|
|
17
|
-
deviceId: string;
|
|
18
|
-
userId: string;
|
|
19
|
-
expiresAt: string;
|
|
20
|
-
lastActive: string;
|
|
21
|
-
isCurrent: boolean;
|
|
22
|
-
isOffline?: boolean;
|
|
23
|
-
}
|
|
24
|
-
/**
|
|
25
|
-
* SessionService - Singleton pattern for global session management
|
|
26
|
-
*/
|
|
27
|
-
declare class SessionService {
|
|
28
|
-
private static instance;
|
|
29
|
-
private oxyServices;
|
|
30
|
-
private activeSession;
|
|
31
|
-
private sessions;
|
|
32
|
-
private constructor();
|
|
33
|
-
static getInstance(): SessionService;
|
|
34
|
-
/**
|
|
35
|
-
* Initialize SessionService with OxyServices instance
|
|
36
|
-
*/
|
|
37
|
-
initialize(oxyServices: OxyServices): void;
|
|
38
|
-
/**
|
|
39
|
-
* Get active session
|
|
40
|
-
*/
|
|
41
|
-
getActiveSession(): Session | null;
|
|
42
|
-
/**
|
|
43
|
-
* Get all sessions
|
|
44
|
-
*/
|
|
45
|
-
getAllSessions(): Session[];
|
|
46
|
-
/**
|
|
47
|
-
* Create a new session (sign in)
|
|
48
|
-
* @param publicKey - User's public key for authentication
|
|
49
|
-
* @returns User object and session data
|
|
50
|
-
*/
|
|
51
|
-
createSession(publicKey: string): Promise<{
|
|
52
|
-
user: User;
|
|
53
|
-
session: Session;
|
|
54
|
-
}>;
|
|
55
|
-
/**
|
|
56
|
-
* Refresh current session
|
|
57
|
-
*/
|
|
58
|
-
refreshSession(): Promise<Session>;
|
|
59
|
-
/**
|
|
60
|
-
* Validate current session
|
|
61
|
-
*/
|
|
62
|
-
validateSession(): Promise<boolean>;
|
|
63
|
-
/**
|
|
64
|
-
* Invalidate current session (sign out)
|
|
65
|
-
*/
|
|
66
|
-
invalidateSession(): Promise<void>;
|
|
67
|
-
/**
|
|
68
|
-
* Set active session (internal use)
|
|
69
|
-
*/
|
|
70
|
-
setActiveSession(session: Session): void;
|
|
71
|
-
/**
|
|
72
|
-
* Clear all sessions (logout all)
|
|
73
|
-
*/
|
|
74
|
-
clearAllSessions(): void;
|
|
75
|
-
}
|
|
76
|
-
export declare const sessionService: SessionService;
|
|
77
|
-
export {};
|
|
78
|
-
//# sourceMappingURL=SessionService.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"SessionService.d.ts","sourceRoot":"","sources":["../../../../src/core/services/SessionService.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAGlD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,yBAAyB,CAAC;AAEpD,MAAM,WAAW,OAAO;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED;;GAEG;AACH,cAAM,cAAc;IAClB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAiB;IACxC,OAAO,CAAC,WAAW,CAA4B;IAC/C,OAAO,CAAC,aAAa,CAAwB;IAC7C,OAAO,CAAC,QAAQ,CAAiB;IAEjC,OAAO;IAEP,MAAM,CAAC,WAAW,IAAI,cAAc;IAOpC;;OAEG;IACH,UAAU,CAAC,WAAW,EAAE,WAAW,GAAG,IAAI;IAI1C;;OAEG;IACH,gBAAgB,IAAI,OAAO,GAAG,IAAI;IAIlC;;OAEG;IACH,cAAc,IAAI,OAAO,EAAE;IAI3B;;;;OAIG;IACG,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,IAAI,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC;IAUjF;;OAEG;IACG,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC;IAaxC;;OAEG;IACG,eAAe,IAAI,OAAO,CAAC,OAAO,CAAC;IAoBzC;;OAEG;IACG,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC;IAqBxC;;OAEG;IACH,gBAAgB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAYxC;;OAEG;IACH,gBAAgB,IAAI,IAAI;CAKzB;AAGD,eAAO,MAAM,cAAc,gBAA+B,CAAC"}
|
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* TokenService - Single Source of Truth for Token Management
|
|
3
|
-
*
|
|
4
|
-
* Handles all token storage, retrieval, refresh, and validation.
|
|
5
|
-
* Used by HttpService, SocketService, and other services that need tokens.
|
|
6
|
-
*
|
|
7
|
-
* Architecture:
|
|
8
|
-
* - Single storage location (no duplication)
|
|
9
|
-
* - Automatic token refresh when expiring soon
|
|
10
|
-
* - Type-safe token payload handling
|
|
11
|
-
* - userId is always MongoDB ObjectId, never publicKey
|
|
12
|
-
*/
|
|
13
|
-
/**
|
|
14
|
-
* TokenService - Singleton pattern for global token management
|
|
15
|
-
*/
|
|
16
|
-
declare class TokenService {
|
|
17
|
-
private static instance;
|
|
18
|
-
private tokenStore;
|
|
19
|
-
private refreshPromise;
|
|
20
|
-
private baseURL;
|
|
21
|
-
private constructor();
|
|
22
|
-
static getInstance(): TokenService;
|
|
23
|
-
/**
|
|
24
|
-
* Initialize TokenService with base URL for refresh requests
|
|
25
|
-
*/
|
|
26
|
-
initialize(baseURL: string): void;
|
|
27
|
-
/**
|
|
28
|
-
* Get current access token
|
|
29
|
-
*/
|
|
30
|
-
getAccessToken(): string | null;
|
|
31
|
-
/**
|
|
32
|
-
* Get current refresh token
|
|
33
|
-
*/
|
|
34
|
-
getRefreshToken(): string | null;
|
|
35
|
-
/**
|
|
36
|
-
* Set tokens (called after login or token refresh)
|
|
37
|
-
*/
|
|
38
|
-
setTokens(accessToken: string, refreshToken?: string): void;
|
|
39
|
-
/**
|
|
40
|
-
* Clear all tokens (called on logout)
|
|
41
|
-
*/
|
|
42
|
-
clearTokens(): void;
|
|
43
|
-
/**
|
|
44
|
-
* Check if access token exists
|
|
45
|
-
*/
|
|
46
|
-
hasAccessToken(): boolean;
|
|
47
|
-
/**
|
|
48
|
-
* Check if token is expiring soon (within 60 seconds)
|
|
49
|
-
*/
|
|
50
|
-
isTokenExpiringSoon(): boolean;
|
|
51
|
-
/**
|
|
52
|
-
* Get userId from current access token
|
|
53
|
-
* Returns MongoDB ObjectId (never publicKey)
|
|
54
|
-
*/
|
|
55
|
-
getUserIdFromToken(): string | null;
|
|
56
|
-
/**
|
|
57
|
-
* Refresh access token if expiring soon
|
|
58
|
-
* Returns promise that resolves when token is refreshed (or already valid)
|
|
59
|
-
*/
|
|
60
|
-
refreshTokenIfNeeded(): Promise<void>;
|
|
61
|
-
/**
|
|
62
|
-
* Perform token refresh
|
|
63
|
-
*/
|
|
64
|
-
private _performRefresh;
|
|
65
|
-
/**
|
|
66
|
-
* Get authorization header with automatic refresh
|
|
67
|
-
*/
|
|
68
|
-
getAuthHeader(): Promise<string | null>;
|
|
69
|
-
}
|
|
70
|
-
export declare const tokenService: TokenService;
|
|
71
|
-
export {};
|
|
72
|
-
//# sourceMappingURL=TokenService.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"TokenService.d.ts","sourceRoot":"","sources":["../../../../src/core/services/TokenService.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAsBH;;GAEG;AACH,cAAM,YAAY;IAChB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAe;IACtC,OAAO,CAAC,UAAU,CAGhB;IACF,OAAO,CAAC,cAAc,CAA8B;IACpD,OAAO,CAAC,OAAO,CAAuB;IAEtC,OAAO;IAEP,MAAM,CAAC,WAAW,IAAI,YAAY;IAOlC;;OAEG;IACH,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAIjC;;OAEG;IACH,cAAc,IAAI,MAAM,GAAG,IAAI;IAI/B;;OAEG;IACH,eAAe,IAAI,MAAM,GAAG,IAAI;IAIhC;;OAEG;IACH,SAAS,CAAC,WAAW,EAAE,MAAM,EAAE,YAAY,GAAE,MAAW,GAAG,IAAI;IAK/D;;OAEG;IACH,WAAW,IAAI,IAAI;IAMnB;;OAEG;IACH,cAAc,IAAI,OAAO;IAIzB;;OAEG;IACH,mBAAmB,IAAI,OAAO;IAe9B;;;OAGG;IACH,kBAAkB,IAAI,MAAM,GAAG,IAAI;IAYnC;;;OAGG;IACG,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC;IAmC3C;;OAEG;YACW,eAAe;IA8C7B;;OAEG;IACG,aAAa,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;CAS9C;AAGD,eAAO,MAAM,YAAY,cAA6B,CAAC"}
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Cryptographic types for authentication and backup
|
|
3
|
-
*/
|
|
4
|
-
/**
|
|
5
|
-
* Encrypted backup data structure
|
|
6
|
-
* Used for identity backup files
|
|
7
|
-
*/
|
|
8
|
-
export interface BackupData {
|
|
9
|
-
/** Base64-encoded encrypted private key */
|
|
10
|
-
encrypted: string;
|
|
11
|
-
/** Hex-encoded salt used for key derivation */
|
|
12
|
-
salt: string;
|
|
13
|
-
/** Hex-encoded initialization vector */
|
|
14
|
-
iv: string;
|
|
15
|
-
/** Public key associated with the encrypted private key */
|
|
16
|
-
publicKey: string;
|
|
17
|
-
/** Encryption algorithm used (optional, for backward compatibility) */
|
|
18
|
-
algorithm?: 'xor' | 'aes-256-gcm';
|
|
19
|
-
/** Format version (optional, for backward compatibility) */
|
|
20
|
-
version?: string;
|
|
21
|
-
}
|
|
22
|
-
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/crypto/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;GAGG;AACH,MAAM,WAAW,UAAU;IACzB,2CAA2C;IAC3C,SAAS,EAAE,MAAM,CAAC;IAClB,+CAA+C;IAC/C,IAAI,EAAE,MAAM,CAAC;IACb,wCAAwC;IACxC,EAAE,EAAE,MAAM,CAAC;IACX,2DAA2D;IAC3D,SAAS,EAAE,MAAM,CAAC;IAClB,uEAAuE;IACvE,SAAS,CAAC,EAAE,KAAK,GAAG,aAAa,CAAC;IAClC,4DAA4D;IAC5D,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB"}
|
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
import type { ReactNode } from 'react';
|
|
2
|
-
import type { OxyServices } from '../../core';
|
|
3
|
-
import type { User, ApiError } from '../../models/interfaces';
|
|
4
|
-
import type { ClientSession, SessionLoginResponse } from '../../models/session';
|
|
5
|
-
import type { UseFollowHook } from '../hooks/useFollow.types';
|
|
6
|
-
import type { useLanguageManagement } from '../hooks/useLanguageManagement';
|
|
7
|
-
import type { RouteName } from '../navigation/routes';
|
|
8
|
-
export interface OxyContextState {
|
|
9
|
-
user: User | null;
|
|
10
|
-
sessions: ClientSession[];
|
|
11
|
-
activeSessionId: string | null;
|
|
12
|
-
currentDeviceId: string | null;
|
|
13
|
-
isAuthenticated: boolean;
|
|
14
|
-
isLoading: boolean;
|
|
15
|
-
isTokenReady: boolean;
|
|
16
|
-
isStorageReady: boolean;
|
|
17
|
-
error: string | null;
|
|
18
|
-
currentLanguage: string;
|
|
19
|
-
currentLanguageMetadata: ReturnType<typeof useLanguageManagement>['metadata'];
|
|
20
|
-
currentLanguageName: string;
|
|
21
|
-
currentNativeLanguageName: string;
|
|
22
|
-
completeSignIn: (sessionResponse: SessionLoginResponse) => Promise<User>;
|
|
23
|
-
logout: (targetSessionId?: string) => Promise<void>;
|
|
24
|
-
logoutAll: () => Promise<void>;
|
|
25
|
-
switchSession: (sessionId: string) => Promise<void>;
|
|
26
|
-
removeSession: (sessionId: string) => Promise<void>;
|
|
27
|
-
refreshSessions: () => Promise<void>;
|
|
28
|
-
setLanguage: (languageId: string) => Promise<void>;
|
|
29
|
-
getDeviceSessions: () => Promise<Array<{
|
|
30
|
-
sessionId: string;
|
|
31
|
-
deviceId: string;
|
|
32
|
-
deviceName?: string;
|
|
33
|
-
lastActive?: string;
|
|
34
|
-
expiresAt?: string;
|
|
35
|
-
}>>;
|
|
36
|
-
logoutAllDeviceSessions: () => Promise<void>;
|
|
37
|
-
updateDeviceName: (deviceName: string) => Promise<void>;
|
|
38
|
-
clearSessionState: () => Promise<void>;
|
|
39
|
-
clearAllAccountData: () => Promise<void>;
|
|
40
|
-
oxyServices: OxyServices;
|
|
41
|
-
useFollow?: UseFollowHook;
|
|
42
|
-
showBottomSheet?: (screenOrConfig: RouteName | {
|
|
43
|
-
screen: RouteName;
|
|
44
|
-
props?: Record<string, unknown>;
|
|
45
|
-
}) => void;
|
|
46
|
-
openAvatarPicker: () => void;
|
|
47
|
-
updateProfile: (updates: Partial<User>) => Promise<User>;
|
|
48
|
-
}
|
|
49
|
-
export declare const OxyContext: import("react").Context<OxyContextState | null>;
|
|
50
|
-
export interface OxyContextProviderProps {
|
|
51
|
-
children: ReactNode;
|
|
52
|
-
oxyServices?: OxyServices;
|
|
53
|
-
baseURL?: string;
|
|
54
|
-
storageKeyPrefix?: string;
|
|
55
|
-
onAuthStateChange?: (user: User | null) => void;
|
|
56
|
-
onError?: (error: ApiError) => void;
|
|
57
|
-
}
|
|
58
|
-
/**
|
|
59
|
-
* Hook to access the Oxy context.
|
|
60
|
-
* Must be used within an OxyContextProvider.
|
|
61
|
-
*/
|
|
62
|
-
export declare const useOxy: () => OxyContextState;
|
|
63
|
-
//# sourceMappingURL=OxyContextBase.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"OxyContextBase.d.ts","sourceRoot":"","sources":["../../../../src/ui/context/OxyContextBase.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,KAAK,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAChF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AAC5E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEtD,MAAM,WAAW,eAAe;IAC5B,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC;IAClB,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,eAAe,EAAE,OAAO,CAAC;IACzB,SAAS,EAAE,OAAO,CAAC;IACnB,YAAY,EAAE,OAAO,CAAC;IACtB,cAAc,EAAE,OAAO,CAAC;IACxB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,uBAAuB,EAAE,UAAU,CAAC,OAAO,qBAAqB,CAAC,CAAC,UAAU,CAAC,CAAC;IAC9E,mBAAmB,EAAE,MAAM,CAAC;IAC5B,yBAAyB,EAAE,MAAM,CAAC;IAKlC,cAAc,EAAE,CAAC,eAAe,EAAE,oBAAoB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAGzE,MAAM,EAAE,CAAC,eAAe,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACpD,SAAS,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/B,aAAa,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACpD,aAAa,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACpD,eAAe,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACrC,WAAW,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACnD,iBAAiB,EAAE,MAAM,OAAO,CAC5B,KAAK,CAAC;QACF,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,EAAE,MAAM,CAAC;QACjB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,SAAS,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC,CACL,CAAC;IACF,uBAAuB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7C,gBAAgB,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACxD,iBAAiB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACvC,mBAAmB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACzC,WAAW,EAAE,WAAW,CAAC;IACzB,SAAS,CAAC,EAAE,aAAa,CAAC;IAC1B,eAAe,CAAC,EAAE,CAAC,cAAc,EAAE,SAAS,GAAG;QAAE,MAAM,EAAE,SAAS,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,KAAK,IAAI,CAAC;IAC/G,gBAAgB,EAAE,MAAM,IAAI,CAAC;IAC7B,aAAa,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5D;AAED,eAAO,MAAM,UAAU,iDAA8C,CAAC;AAEtE,MAAM,WAAW,uBAAuB;IACpC,QAAQ,EAAE,SAAS,CAAC;IACpB,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,iBAAiB,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,KAAK,IAAI,CAAC;IAChD,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,KAAK,IAAI,CAAC;CACvC;AAED;;;GAGG;AACH,eAAO,MAAM,MAAM,QAAO,eAMzB,CAAC"}
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import type { ApiError } from '../../../models/interfaces';
|
|
2
|
-
import { type StorageInterface } from '../../utils/storageHelpers';
|
|
3
|
-
export interface UseStorageOptions {
|
|
4
|
-
onError?: (error: ApiError) => void;
|
|
5
|
-
logger?: (message: string, error?: unknown) => void;
|
|
6
|
-
errorCode?: string;
|
|
7
|
-
}
|
|
8
|
-
export interface UseStorageResult {
|
|
9
|
-
storage: StorageInterface | null;
|
|
10
|
-
isReady: boolean;
|
|
11
|
-
error: string | null;
|
|
12
|
-
refresh: () => Promise<StorageInterface | null>;
|
|
13
|
-
withStorage: <T>(callback: (storage: StorageInterface) => Promise<T>) => Promise<T | null>;
|
|
14
|
-
}
|
|
15
|
-
/**
|
|
16
|
-
* React hook that exposes a platform-agnostic storage reference.
|
|
17
|
-
* Handles initialization, error propagation, and lazy re-initialization.
|
|
18
|
-
*
|
|
19
|
-
* @param options - Optional configuration for error reporting and logging
|
|
20
|
-
*/
|
|
21
|
-
export declare const useStorage: ({ onError, logger, errorCode, }?: UseStorageOptions) => UseStorageResult;
|
|
22
|
-
//# sourceMappingURL=useStorage.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useStorage.d.ts","sourceRoot":"","sources":["../../../../../src/ui/context/hooks/useStorage.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAyB,KAAK,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAG1F,MAAM,WAAW,iBAAiB;IAChC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,KAAK,IAAI,CAAC;IACpC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IACpD,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACjC,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,OAAO,EAAE,MAAM,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAAC;IAChD,WAAW,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,OAAO,EAAE,gBAAgB,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;CAC5F;AAID;;;;;GAKG;AACH,eAAO,MAAM,UAAU,GAAI,kCAIxB,iBAAsB,KAAG,gBAsE3B,CAAC"}
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import type { QueryClient } from '@tanstack/react-query';
|
|
2
|
-
import type { OxyServices } from '../../core';
|
|
3
|
-
import type { RouteName } from '../navigation/routes';
|
|
4
|
-
interface UseAvatarPickerOptions {
|
|
5
|
-
oxyServices: OxyServices;
|
|
6
|
-
currentLanguage: string;
|
|
7
|
-
activeSessionId: string | null;
|
|
8
|
-
currentDeviceId: string | null;
|
|
9
|
-
queryClient: QueryClient;
|
|
10
|
-
showBottomSheet: (screenOrConfig: RouteName | {
|
|
11
|
-
screen: RouteName;
|
|
12
|
-
props?: Record<string, unknown>;
|
|
13
|
-
}) => void;
|
|
14
|
-
}
|
|
15
|
-
export declare const useAvatarPicker: ({ oxyServices, currentLanguage, activeSessionId, currentDeviceId, queryClient, showBottomSheet, }: UseAvatarPickerOptions) => {
|
|
16
|
-
openAvatarPicker: () => void;
|
|
17
|
-
};
|
|
18
|
-
export {};
|
|
19
|
-
//# sourceMappingURL=useAvatarPicker.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useAvatarPicker.d.ts","sourceRoot":"","sources":["../../../../src/ui/hooks/useAvatarPicker.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAIzD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEtD,UAAU,sBAAsB;IAC9B,WAAW,EAAE,WAAW,CAAC;IACzB,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,WAAW,EAAE,WAAW,CAAC;IACzB,eAAe,EAAE,CAAC,cAAc,EAAE,SAAS,GAAG;QAAE,MAAM,EAAE,SAAS,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,KAAK,IAAI,CAAC;CAC/G;AAED,eAAO,MAAM,eAAe,GAAI,mGAO7B,sBAAsB;;CAiCxB,CAAC"}
|
|
@@ -1,173 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* SessionService - Single Source of Truth for Session Management
|
|
3
|
-
*
|
|
4
|
-
* Handles all session operations: creation, validation, refresh, invalidation.
|
|
5
|
-
* Manages active session state and provides session data to other services.
|
|
6
|
-
*
|
|
7
|
-
* Architecture:
|
|
8
|
-
* - Single source of truth for session operations
|
|
9
|
-
* - Handles both online and offline sessions
|
|
10
|
-
* - Integrates with TokenService for token management
|
|
11
|
-
* - userId is always MongoDB ObjectId, never publicKey
|
|
12
|
-
*/
|
|
13
|
-
|
|
14
|
-
import type { OxyServices } from '../OxyServices';
|
|
15
|
-
import { tokenService } from './TokenService';
|
|
16
|
-
import type { ClientSession, SessionLoginResponse } from '../../models/session';
|
|
17
|
-
import type { User } from '../../models/interfaces';
|
|
18
|
-
|
|
19
|
-
export interface Session {
|
|
20
|
-
sessionId: string;
|
|
21
|
-
deviceId: string;
|
|
22
|
-
userId: string; // MongoDB ObjectId - PRIMARY IDENTIFIER
|
|
23
|
-
expiresAt: string;
|
|
24
|
-
lastActive: string;
|
|
25
|
-
isCurrent: boolean;
|
|
26
|
-
isOffline?: boolean;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
/**
|
|
30
|
-
* SessionService - Singleton pattern for global session management
|
|
31
|
-
*/
|
|
32
|
-
class SessionService {
|
|
33
|
-
private static instance: SessionService;
|
|
34
|
-
private oxyServices: OxyServices | null = null;
|
|
35
|
-
private activeSession: Session | null = null;
|
|
36
|
-
private sessions: Session[] = [];
|
|
37
|
-
|
|
38
|
-
private constructor() {}
|
|
39
|
-
|
|
40
|
-
static getInstance(): SessionService {
|
|
41
|
-
if (!SessionService.instance) {
|
|
42
|
-
SessionService.instance = new SessionService();
|
|
43
|
-
}
|
|
44
|
-
return SessionService.instance;
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
/**
|
|
48
|
-
* Initialize SessionService with OxyServices instance
|
|
49
|
-
*/
|
|
50
|
-
initialize(oxyServices: OxyServices): void {
|
|
51
|
-
this.oxyServices = oxyServices;
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
/**
|
|
55
|
-
* Get active session
|
|
56
|
-
*/
|
|
57
|
-
getActiveSession(): Session | null {
|
|
58
|
-
return this.activeSession;
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
/**
|
|
62
|
-
* Get all sessions
|
|
63
|
-
*/
|
|
64
|
-
getAllSessions(): Session[] {
|
|
65
|
-
return [...this.sessions];
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
/**
|
|
69
|
-
* Create a new session (sign in)
|
|
70
|
-
* @param publicKey - User's public key for authentication
|
|
71
|
-
* @returns User object and session data
|
|
72
|
-
*/
|
|
73
|
-
async createSession(publicKey: string): Promise<{ user: User; session: Session }> {
|
|
74
|
-
if (!this.oxyServices) {
|
|
75
|
-
throw new Error('SessionService not initialized with OxyServices');
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
// This will be implemented by delegating to existing sign-in logic
|
|
79
|
-
// For now, this is a placeholder that shows the interface
|
|
80
|
-
throw new Error('SessionService.createSession not yet implemented - use existing signIn flow');
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
/**
|
|
84
|
-
* Refresh current session
|
|
85
|
-
*/
|
|
86
|
-
async refreshSession(): Promise<Session> {
|
|
87
|
-
if (!this.activeSession) {
|
|
88
|
-
throw new Error('No active session to refresh');
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
// Refresh token first
|
|
92
|
-
await tokenService.refreshTokenIfNeeded();
|
|
93
|
-
|
|
94
|
-
// Then refresh session data from server
|
|
95
|
-
// Implementation will be added
|
|
96
|
-
return this.activeSession;
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
/**
|
|
100
|
-
* Validate current session
|
|
101
|
-
*/
|
|
102
|
-
async validateSession(): Promise<boolean> {
|
|
103
|
-
if (!this.activeSession) {
|
|
104
|
-
return false;
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
// Check if session expired
|
|
108
|
-
if (new Date(this.activeSession.expiresAt) < new Date()) {
|
|
109
|
-
return false;
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
// Check if token is valid
|
|
113
|
-
const token = tokenService.getAccessToken();
|
|
114
|
-
if (!token) {
|
|
115
|
-
return false;
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
// Additional validation can be added here
|
|
119
|
-
return true;
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
/**
|
|
123
|
-
* Invalidate current session (sign out)
|
|
124
|
-
*/
|
|
125
|
-
async invalidateSession(): Promise<void> {
|
|
126
|
-
if (!this.activeSession || !this.oxyServices) {
|
|
127
|
-
return;
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
try {
|
|
131
|
-
// Call API to invalidate session on server
|
|
132
|
-
await this.oxyServices.makeRequest('POST', `/api/session/${this.activeSession.sessionId}/logout`, undefined, { cache: false });
|
|
133
|
-
} catch (error) {
|
|
134
|
-
// Continue with local cleanup even if API call fails
|
|
135
|
-
console.warn('Failed to invalidate session on server:', error);
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
// Clear tokens
|
|
139
|
-
tokenService.clearTokens();
|
|
140
|
-
|
|
141
|
-
// Clear active session
|
|
142
|
-
this.activeSession = null;
|
|
143
|
-
this.sessions = this.sessions.filter(s => s.sessionId !== this.activeSession?.sessionId);
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
/**
|
|
147
|
-
* Set active session (internal use)
|
|
148
|
-
*/
|
|
149
|
-
setActiveSession(session: Session): void {
|
|
150
|
-
this.activeSession = session;
|
|
151
|
-
|
|
152
|
-
// Update sessions list
|
|
153
|
-
const existingIndex = this.sessions.findIndex(s => s.sessionId === session.sessionId);
|
|
154
|
-
if (existingIndex >= 0) {
|
|
155
|
-
this.sessions[existingIndex] = session;
|
|
156
|
-
} else {
|
|
157
|
-
this.sessions.push(session);
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
/**
|
|
162
|
-
* Clear all sessions (logout all)
|
|
163
|
-
*/
|
|
164
|
-
clearAllSessions(): void {
|
|
165
|
-
this.activeSession = null;
|
|
166
|
-
this.sessions = [];
|
|
167
|
-
tokenService.clearTokens();
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
|
|
171
|
-
// Export singleton instance
|
|
172
|
-
export const sessionService = SessionService.getInstance();
|
|
173
|
-
|