@oxyhq/services 5.17.17 → 5.18.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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.features.js +372 -0
- package/lib/commonjs/core/mixins/OxyServices.features.js.map +1 -0
- 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 +28 -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/GroupedItem.js +11 -1
- package/lib/commonjs/ui/components/GroupedItem.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/SettingRow.js +17 -4
- package/lib/commonjs/ui/components/SettingRow.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/components/feedback/FormInput.js +72 -0
- package/lib/commonjs/ui/components/feedback/FormInput.js.map +1 -0
- package/lib/commonjs/ui/components/feedback/ProgressIndicator.js +33 -0
- package/lib/commonjs/ui/components/feedback/ProgressIndicator.js.map +1 -0
- package/lib/commonjs/ui/components/feedback/constants.js +59 -0
- package/lib/commonjs/ui/components/feedback/constants.js.map +1 -0
- package/lib/commonjs/ui/components/feedback/feedbackStyles.js +262 -0
- package/lib/commonjs/ui/components/feedback/feedbackStyles.js.map +1 -0
- package/lib/commonjs/ui/components/feedback/index.js +54 -0
- package/lib/commonjs/ui/components/feedback/index.js.map +1 -0
- package/lib/commonjs/ui/components/feedback/types.js +6 -0
- package/lib/commonjs/ui/components/feedback/types.js.map +1 -0
- package/lib/commonjs/ui/components/feedback/useFeedbackForm.js +52 -0
- package/lib/commonjs/ui/components/feedback/useFeedbackForm.js.map +1 -0
- package/lib/commonjs/ui/components/modals/DeleteAccountModal.js +282 -0
- package/lib/commonjs/ui/components/modals/DeleteAccountModal.js.map +1 -0
- package/lib/commonjs/ui/components/modals/index.js +14 -0
- package/lib/commonjs/ui/components/modals/index.js.map +1 -0
- package/lib/commonjs/ui/components/payment/PaymentDetailsStep.js +309 -0
- package/lib/commonjs/ui/components/payment/PaymentDetailsStep.js.map +1 -0
- package/lib/commonjs/ui/components/payment/PaymentMethodStep.js +79 -0
- package/lib/commonjs/ui/components/payment/PaymentMethodStep.js.map +1 -0
- package/lib/commonjs/ui/components/payment/PaymentReviewStep.js +108 -0
- package/lib/commonjs/ui/components/payment/PaymentReviewStep.js.map +1 -0
- package/lib/commonjs/ui/components/payment/PaymentSuccessStep.js +79 -0
- package/lib/commonjs/ui/components/payment/PaymentSuccessStep.js.map +1 -0
- package/lib/commonjs/ui/components/payment/PaymentSummaryStep.js +176 -0
- package/lib/commonjs/ui/components/payment/PaymentSummaryStep.js.map +1 -0
- package/lib/commonjs/ui/components/payment/constants.js +53 -0
- package/lib/commonjs/ui/components/payment/constants.js.map +1 -0
- package/lib/commonjs/ui/components/payment/index.js +80 -0
- package/lib/commonjs/ui/components/payment/index.js.map +1 -0
- package/lib/commonjs/ui/components/payment/paymentStyles.js +409 -0
- package/lib/commonjs/ui/components/payment/paymentStyles.js.map +1 -0
- package/lib/commonjs/ui/components/payment/types.js +6 -0
- package/lib/commonjs/ui/components/payment/types.js.map +1 -0
- 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/index.js +26 -0
- package/lib/commonjs/ui/hooks/index.js.map +1 -1
- 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/useAsyncAction.js +95 -0
- package/lib/commonjs/ui/hooks/useAsyncAction.js.map +1 -0
- 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/useSettingToggle.js +126 -0
- package/lib/commonjs/ui/hooks/useSettingToggle.js.map +1 -0
- 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 +6 -1
- package/lib/commonjs/ui/navigation/routes.js.map +1 -1
- package/lib/commonjs/ui/screens/AccountCenterScreen.js +6 -4
- package/lib/commonjs/ui/screens/AccountCenterScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/AccountOverviewScreen.js +33 -30
- 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/FAQScreen.js +315 -0
- package/lib/commonjs/ui/screens/FAQScreen.js.map +1 -0
- package/lib/commonjs/ui/screens/FeedbackScreen.js +73 -590
- package/lib/commonjs/ui/screens/FeedbackScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/HelpSupportScreen.js +8 -7
- package/lib/commonjs/ui/screens/HelpSupportScreen.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/PaymentGatewayScreen.js +67 -1395
- package/lib/commonjs/ui/screens/PaymentGatewayScreen.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/screens/ProfileScreen.js +13 -5
- package/lib/commonjs/ui/screens/ProfileScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/SavesCollectionsScreen.js +16 -10
- package/lib/commonjs/ui/screens/SavesCollectionsScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/karma/KarmaCenterScreen.js +23 -11
- package/lib/commonjs/ui/screens/karma/KarmaCenterScreen.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.features.js +369 -0
- package/lib/module/core/mixins/OxyServices.features.js.map +1 -0
- 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 +16 -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/GroupedItem.js +11 -1
- package/lib/module/ui/components/GroupedItem.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/SettingRow.js +17 -4
- package/lib/module/ui/components/SettingRow.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/components/feedback/FormInput.js +67 -0
- package/lib/module/ui/components/feedback/FormInput.js.map +1 -0
- package/lib/module/ui/components/feedback/ProgressIndicator.js +28 -0
- package/lib/module/ui/components/feedback/ProgressIndicator.js.map +1 -0
- package/lib/module/ui/components/feedback/constants.js +55 -0
- package/lib/module/ui/components/feedback/constants.js.map +1 -0
- package/lib/module/ui/components/feedback/feedbackStyles.js +257 -0
- package/lib/module/ui/components/feedback/feedbackStyles.js.map +1 -0
- package/lib/module/ui/components/feedback/index.js +8 -0
- package/lib/module/ui/components/feedback/index.js.map +1 -0
- package/lib/module/ui/components/feedback/types.js +4 -0
- package/lib/module/ui/components/feedback/types.js.map +1 -0
- package/lib/module/ui/components/feedback/useFeedbackForm.js +47 -0
- package/lib/module/ui/components/feedback/useFeedbackForm.js.map +1 -0
- package/lib/module/ui/components/modals/DeleteAccountModal.js +276 -0
- package/lib/module/ui/components/modals/DeleteAccountModal.js.map +1 -0
- package/lib/module/ui/components/modals/index.js +4 -0
- package/lib/module/ui/components/modals/index.js.map +1 -0
- package/lib/module/ui/components/payment/PaymentDetailsStep.js +303 -0
- package/lib/module/ui/components/payment/PaymentDetailsStep.js.map +1 -0
- package/lib/module/ui/components/payment/PaymentMethodStep.js +73 -0
- package/lib/module/ui/components/payment/PaymentMethodStep.js.map +1 -0
- package/lib/module/ui/components/payment/PaymentReviewStep.js +102 -0
- package/lib/module/ui/components/payment/PaymentReviewStep.js.map +1 -0
- package/lib/module/ui/components/payment/PaymentSuccessStep.js +73 -0
- package/lib/module/ui/components/payment/PaymentSuccessStep.js.map +1 -0
- package/lib/module/ui/components/payment/PaymentSummaryStep.js +170 -0
- package/lib/module/ui/components/payment/PaymentSummaryStep.js.map +1 -0
- package/lib/module/ui/components/payment/constants.js +47 -0
- package/lib/module/ui/components/payment/constants.js.map +1 -0
- package/lib/module/ui/components/payment/index.js +10 -0
- package/lib/module/ui/components/payment/index.js.map +1 -0
- package/lib/module/ui/components/payment/paymentStyles.js +404 -0
- package/lib/module/ui/components/payment/paymentStyles.js.map +1 -0
- package/lib/module/ui/components/payment/types.js +4 -0
- package/lib/module/ui/components/payment/types.js.map +1 -0
- 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/index.js +2 -0
- package/lib/module/ui/hooks/index.js.map +1 -1
- 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/useAsyncAction.js +89 -0
- package/lib/module/ui/hooks/useAsyncAction.js.map +1 -0
- 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/useSettingToggle.js +120 -0
- package/lib/module/ui/hooks/useSettingToggle.js.map +1 -0
- 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 +6 -1
- package/lib/module/ui/navigation/routes.js.map +1 -1
- package/lib/module/ui/screens/AccountCenterScreen.js +6 -4
- package/lib/module/ui/screens/AccountCenterScreen.js.map +1 -1
- package/lib/module/ui/screens/AccountOverviewScreen.js +33 -30
- 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/FAQScreen.js +310 -0
- package/lib/module/ui/screens/FAQScreen.js.map +1 -0
- package/lib/module/ui/screens/FeedbackScreen.js +64 -581
- package/lib/module/ui/screens/FeedbackScreen.js.map +1 -1
- package/lib/module/ui/screens/HelpSupportScreen.js +8 -7
- package/lib/module/ui/screens/HelpSupportScreen.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/PaymentGatewayScreen.js +67 -1397
- package/lib/module/ui/screens/PaymentGatewayScreen.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/screens/ProfileScreen.js +13 -5
- package/lib/module/ui/screens/ProfileScreen.js.map +1 -1
- package/lib/module/ui/screens/SavesCollectionsScreen.js +16 -10
- package/lib/module/ui/screens/SavesCollectionsScreen.js.map +1 -1
- package/lib/module/ui/screens/karma/KarmaCenterScreen.js +23 -11
- package/lib/module/ui/screens/karma/KarmaCenterScreen.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.features.d.ts +229 -0
- package/lib/typescript/core/mixins/OxyServices.features.d.ts.map +1 -0
- 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 +291 -9
- 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/GroupedItem.d.ts +5 -1
- package/lib/typescript/ui/components/GroupedItem.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/SettingRow.d.ts +6 -0
- package/lib/typescript/ui/components/SettingRow.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/feedback/FormInput.d.ts +20 -0
- package/lib/typescript/ui/components/feedback/FormInput.d.ts.map +1 -0
- package/lib/typescript/ui/components/feedback/ProgressIndicator.d.ts +11 -0
- package/lib/typescript/ui/components/feedback/ProgressIndicator.d.ts.map +1 -0
- package/lib/typescript/ui/components/feedback/constants.d.ts +5 -0
- package/lib/typescript/ui/components/feedback/constants.d.ts.map +1 -0
- package/lib/typescript/ui/components/feedback/feedbackStyles.d.ts +280 -0
- package/lib/typescript/ui/components/feedback/feedbackStyles.d.ts.map +1 -0
- package/lib/typescript/ui/components/feedback/index.d.ts +7 -0
- package/lib/typescript/ui/components/feedback/index.d.ts.map +1 -0
- package/lib/typescript/ui/components/feedback/types.d.ts +46 -0
- package/lib/typescript/ui/components/feedback/types.d.ts.map +1 -0
- package/lib/typescript/ui/components/feedback/useFeedbackForm.d.ts +9 -0
- package/lib/typescript/ui/components/feedback/useFeedbackForm.d.ts.map +1 -0
- package/lib/typescript/ui/components/modals/DeleteAccountModal.d.ts +19 -0
- package/lib/typescript/ui/components/modals/DeleteAccountModal.d.ts.map +1 -0
- package/lib/typescript/ui/components/modals/index.d.ts +2 -0
- package/lib/typescript/ui/components/modals/index.d.ts.map +1 -0
- package/lib/typescript/ui/components/payment/PaymentDetailsStep.d.ts +21 -0
- package/lib/typescript/ui/components/payment/PaymentDetailsStep.d.ts.map +1 -0
- package/lib/typescript/ui/components/payment/PaymentMethodStep.d.ts +14 -0
- package/lib/typescript/ui/components/payment/PaymentMethodStep.d.ts.map +1 -0
- package/lib/typescript/ui/components/payment/PaymentReviewStep.d.ts +16 -0
- package/lib/typescript/ui/components/payment/PaymentReviewStep.d.ts.map +1 -0
- package/lib/typescript/ui/components/payment/PaymentSuccessStep.d.ts +10 -0
- package/lib/typescript/ui/components/payment/PaymentSuccessStep.d.ts.map +1 -0
- package/lib/typescript/ui/components/payment/PaymentSummaryStep.d.ts +15 -0
- package/lib/typescript/ui/components/payment/PaymentSummaryStep.d.ts.map +1 -0
- package/lib/typescript/ui/components/payment/constants.d.ts +7 -0
- package/lib/typescript/ui/components/payment/constants.d.ts.map +1 -0
- package/lib/typescript/ui/components/payment/index.d.ts +9 -0
- package/lib/typescript/ui/components/payment/index.d.ts.map +1 -0
- package/lib/typescript/ui/components/payment/paymentStyles.d.ts +396 -0
- package/lib/typescript/ui/components/payment/paymentStyles.d.ts.map +1 -0
- package/lib/typescript/ui/components/payment/types.d.ts +40 -0
- package/lib/typescript/ui/components/payment/types.d.ts.map +1 -0
- 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/index.d.ts +2 -0
- package/lib/typescript/ui/hooks/index.d.ts.map +1 -1
- 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/useAsyncAction.d.ts +51 -0
- package/lib/typescript/ui/hooks/useAsyncAction.d.ts.map +1 -0
- 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/useSettingToggle.d.ts +55 -0
- package/lib/typescript/ui/hooks/useSettingToggle.d.ts.map +1 -0
- 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/AccountOverviewScreen.d.ts.map +1 -1
- package/lib/typescript/ui/screens/AccountSettingsScreen.d.ts.map +1 -1
- package/lib/typescript/ui/screens/FAQScreen.d.ts +5 -0
- package/lib/typescript/ui/screens/FAQScreen.d.ts.map +1 -0
- package/lib/typescript/ui/screens/FeedbackScreen.d.ts.map +1 -1
- package/lib/typescript/ui/screens/HelpSupportScreen.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/PaymentGatewayScreen.d.ts +3 -15
- package/lib/typescript/ui/screens/PaymentGatewayScreen.d.ts.map +1 -1
- package/lib/typescript/ui/screens/PrivacySettingsScreen.d.ts.map +1 -1
- package/lib/typescript/ui/screens/ProfileScreen.d.ts.map +1 -1
- package/lib/typescript/ui/screens/SavesCollectionsScreen.d.ts.map +1 -1
- package/lib/typescript/ui/screens/karma/KarmaCenterScreen.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.features.ts +428 -0
- 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 +33 -14
- 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/GroupedItem.tsx +19 -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/SettingRow.tsx +26 -4
- 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/feedback/FormInput.tsx +84 -0
- package/src/ui/components/feedback/ProgressIndicator.tsx +35 -0
- package/src/ui/components/feedback/constants.ts +22 -0
- package/src/ui/components/feedback/feedbackStyles.ts +247 -0
- package/src/ui/components/feedback/index.ts +6 -0
- package/src/ui/components/feedback/types.ts +52 -0
- package/src/ui/components/feedback/useFeedbackForm.ts +44 -0
- package/src/ui/components/modals/DeleteAccountModal.tsx +294 -0
- package/src/ui/components/modals/index.ts +1 -0
- package/src/ui/components/payment/PaymentDetailsStep.tsx +222 -0
- package/src/ui/components/payment/PaymentMethodStep.tsx +89 -0
- package/src/ui/components/payment/PaymentReviewStep.tsx +126 -0
- package/src/ui/components/payment/PaymentSuccessStep.tsx +71 -0
- package/src/ui/components/payment/PaymentSummaryStep.tsx +159 -0
- package/src/ui/components/payment/constants.ts +39 -0
- package/src/ui/components/payment/index.ts +9 -0
- package/src/ui/components/payment/paymentStyles.ts +397 -0
- package/src/ui/components/payment/types.ts +45 -0
- 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/index.ts +3 -1
- 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/useAsyncAction.ts +129 -0
- 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/useSettingToggle.ts +147 -0
- package/src/ui/hooks/useStorage.ts +24 -76
- package/src/ui/index.ts +22 -13
- package/src/ui/navigation/routes.ts +8 -2
- package/src/ui/screens/AccountCenterScreen.tsx +4 -4
- package/src/ui/screens/AccountOverviewScreen.tsx +36 -38
- package/src/ui/screens/AccountSettingsScreen.tsx +34 -37
- package/src/ui/screens/AccountSwitcherScreen.tsx +4 -4
- package/src/ui/screens/FAQScreen.tsx +332 -0
- package/src/ui/screens/FeedbackScreen.tsx +91 -626
- package/src/ui/screens/HelpSupportScreen.tsx +7 -5
- package/src/ui/screens/OxyAuthScreen.tsx +138 -64
- package/src/ui/screens/PaymentGatewayScreen.tsx +96 -1275
- package/src/ui/screens/PrivacySettingsScreen.tsx +6 -12
- package/src/ui/screens/ProfileScreen.tsx +11 -6
- package/src/ui/screens/SavesCollectionsScreen.tsx +19 -10
- package/src/ui/screens/karma/KarmaCenterScreen.tsx +10 -10
- 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
|
@@ -44,4 +44,10 @@ export declare function validateRequiredFields(data: Record<string, unknown>, fi
|
|
|
44
44
|
* Safe error logging with context
|
|
45
45
|
*/
|
|
46
46
|
export declare function logError(error: unknown, context?: string): void;
|
|
47
|
+
/**
|
|
48
|
+
* Retry function with exponential backoff
|
|
49
|
+
* Re-exports retryAsync for backward compatibility
|
|
50
|
+
* @deprecated Use retryAsync from asyncUtils instead
|
|
51
|
+
*/
|
|
52
|
+
export { retryAsync as retryWithBackoff } from './asyncUtils';
|
|
47
53
|
//# sourceMappingURL=errorUtils.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errorUtils.d.ts","sourceRoot":"","sources":["../../../src/utils/errorUtils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAGrD;;GAEG;AAEH;;GAEG;AACH,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;CA0Bb,CAAC;AAEX;;GAEG;AACH,wBAAgB,cAAc,CAC5B,OAAO,EAAE,MAAM,EACf,IAAI,GAAE,MAAkC,EACxC,MAAM,SAAM,EACZ,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,QAAQ,CAOV;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,QAAQ,CA+FxD;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAqB7D;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAU5F;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAa/D"}
|
|
1
|
+
{"version":3,"file":"errorUtils.d.ts","sourceRoot":"","sources":["../../../src/utils/errorUtils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAGrD;;GAEG;AAEH;;GAEG;AACH,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;CA0Bb,CAAC;AAEX;;GAEG;AACH,wBAAgB,cAAc,CAC5B,OAAO,EAAE,MAAM,EACf,IAAI,GAAE,MAAkC,EACxC,MAAM,SAAM,EACZ,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,QAAQ,CAOV;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,QAAQ,CA+FxD;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAqB7D;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAU5F;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAa/D;AAED;;;;GAIG;AACH,OAAO,EAAE,UAAU,IAAI,gBAAgB,EAAE,MAAM,cAAc,CAAC"}
|
|
@@ -9,6 +9,10 @@ export declare const EMAIL_REGEX: RegExp;
|
|
|
9
9
|
* Username validation regex (alphanumeric, underscores, and hyphens, 3-30 chars)
|
|
10
10
|
*/
|
|
11
11
|
export declare const USERNAME_REGEX: RegExp;
|
|
12
|
+
/**
|
|
13
|
+
* Password validation regex (at least 8 chars, 1 uppercase, 1 lowercase, 1 number)
|
|
14
|
+
*/
|
|
15
|
+
export declare const PASSWORD_REGEX: RegExp;
|
|
12
16
|
/**
|
|
13
17
|
* Validate email format
|
|
14
18
|
*/
|
|
@@ -17,6 +21,10 @@ export declare function isValidEmail(email: string): boolean;
|
|
|
17
21
|
* Validate username format
|
|
18
22
|
*/
|
|
19
23
|
export declare function isValidUsername(username: string): boolean;
|
|
24
|
+
/**
|
|
25
|
+
* Validate password strength
|
|
26
|
+
*/
|
|
27
|
+
export declare function isValidPassword(password: string): boolean;
|
|
20
28
|
/**
|
|
21
29
|
* Validate required string
|
|
22
30
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validationUtils.d.ts","sourceRoot":"","sources":["../../../src/utils/validationUtils.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,eAAO,MAAM,WAAW,QAA+B,CAAC;AAExD;;GAEG;AACH,eAAO,MAAM,cAAc,QAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"validationUtils.d.ts","sourceRoot":"","sources":["../../../src/utils/validationUtils.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,eAAO,MAAM,WAAW,QAA+B,CAAC;AAExD;;GAEG;AACH,eAAO,MAAM,cAAc,QAA0B,CAAC;AAEtD;;GAEG;AAEH,eAAO,MAAM,cAAc,QAAY,CAAC;AAExC;;GAEG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAEnD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEzD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEzD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAExD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAExD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAEzD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAEpD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAErD;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAGjD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAO/C;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAGvD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAEtE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,OAAO,CAGjF;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAGpD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAOlD;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAOnD;AAED;;GAEG;AACH,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,GAAG,OAAO,GAAG,UAAU,GAAG,MAAM,GAAG,IAAI,CAiBjH"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@oxyhq/services",
|
|
3
|
-
"version": "5.
|
|
3
|
+
"version": "5.18.0",
|
|
4
4
|
"description": "Reusable OxyHQ module to handle authentication, user management, karma system, device-based session management and more 🚀",
|
|
5
5
|
"main": "lib/commonjs/index.js",
|
|
6
6
|
"module": "lib/module/index.js",
|
|
@@ -77,7 +77,7 @@
|
|
|
77
77
|
"scripts": {
|
|
78
78
|
"typescript": "tsc --skipLibCheck --noEmit",
|
|
79
79
|
"lint": "biome lint --error-on-warnings ./src",
|
|
80
|
-
"build": "bob build && npm run copy-assets && npm run copy-dts && npm run delete-dts.js && npm run delete-debug-view",
|
|
80
|
+
"build": "npx react-native-builder-bob build && npm run copy-assets && npm run copy-dts && npm run delete-dts.js && npm run delete-debug-view",
|
|
81
81
|
"test": "jest",
|
|
82
82
|
"test:watch": "jest --watch",
|
|
83
83
|
"test:coverage": "jest --coverage",
|
|
@@ -94,6 +94,7 @@
|
|
|
94
94
|
"@react-native-community/netinfo": "^11.4.1",
|
|
95
95
|
"@tanstack/react-query": "^5.59.0",
|
|
96
96
|
"axios": "^1.9.0",
|
|
97
|
+
"bip39": "^3.1.0",
|
|
97
98
|
"buffer": "^6.0.3",
|
|
98
99
|
"elliptic": "^6.6.1",
|
|
99
100
|
"expo-blur": "~15.0.8",
|
|
@@ -111,7 +112,10 @@
|
|
|
111
112
|
"sonner": "^2.0.4",
|
|
112
113
|
"sonner-native": "^0.20.0",
|
|
113
114
|
"zod": "^3.25.64",
|
|
114
|
-
"zustand": "^5.0.
|
|
115
|
+
"zustand": "^5.0.6",
|
|
116
|
+
"@types/react": "~19.1.0",
|
|
117
|
+
"copyfiles": "^2.4.1",
|
|
118
|
+
"typescript": "^5.9.2"
|
|
115
119
|
},
|
|
116
120
|
"devDependencies": {
|
|
117
121
|
"@biomejs/biome": "^1.9.4",
|
|
@@ -126,8 +130,6 @@
|
|
|
126
130
|
"@types/jest": "^29.5.14",
|
|
127
131
|
"@types/jwt-decode": "^2.2.1",
|
|
128
132
|
"@types/node": "^20.19.9",
|
|
129
|
-
"@types/react": "~19.1.0",
|
|
130
|
-
"copyfiles": "^2.4.1",
|
|
131
133
|
"expo-file-system": "~19.0.0",
|
|
132
134
|
"expo-font": "~14.0.9",
|
|
133
135
|
"expo-haptics": "~14.0.0",
|
|
@@ -142,8 +144,7 @@
|
|
|
142
144
|
"react-native-safe-area-context": "~5.6.0",
|
|
143
145
|
"react-native-svg": "15.11.2",
|
|
144
146
|
"release-it": "^19.0.6",
|
|
145
|
-
"ts-jest": "^29.4.0"
|
|
146
|
-
"typescript": "^5.9.2"
|
|
147
|
+
"ts-jest": "^29.4.0"
|
|
147
148
|
},
|
|
148
149
|
"peerDependencies": {
|
|
149
150
|
"@expo/vector-icons": "^15.0.3",
|
|
@@ -0,0 +1,307 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cross-Domain Authentication Helper
|
|
3
|
+
*
|
|
4
|
+
* Provides a simplified API for cross-domain SSO authentication that automatically
|
|
5
|
+
* selects the best authentication method based on browser capabilities:
|
|
6
|
+
*
|
|
7
|
+
* 1. FedCM (if supported) - Modern, Google-style browser-native auth
|
|
8
|
+
* 2. Popup (fallback) - OAuth2-style popup window
|
|
9
|
+
* 3. Redirect (final fallback) - Traditional full-page redirect
|
|
10
|
+
*
|
|
11
|
+
* Usage:
|
|
12
|
+
* ```typescript
|
|
13
|
+
* import { CrossDomainAuth } from '@oxyhq/services';
|
|
14
|
+
*
|
|
15
|
+
* const auth = new CrossDomainAuth(oxyServices);
|
|
16
|
+
*
|
|
17
|
+
* // Automatic method selection
|
|
18
|
+
* const session = await auth.signIn();
|
|
19
|
+
*
|
|
20
|
+
* // Or use specific method
|
|
21
|
+
* const session = await auth.signInWithPopup();
|
|
22
|
+
* ```
|
|
23
|
+
*/
|
|
24
|
+
|
|
25
|
+
import type { OxyServices } from './OxyServices';
|
|
26
|
+
import type { SessionLoginResponse } from '../models/session';
|
|
27
|
+
|
|
28
|
+
export interface CrossDomainAuthOptions {
|
|
29
|
+
/**
|
|
30
|
+
* Preferred authentication method
|
|
31
|
+
* - 'auto': Automatically select best method (default)
|
|
32
|
+
* - 'fedcm': Use FedCM (browser-native)
|
|
33
|
+
* - 'popup': Use popup window
|
|
34
|
+
* - 'redirect': Use full-page redirect
|
|
35
|
+
*/
|
|
36
|
+
method?: 'auto' | 'fedcm' | 'popup' | 'redirect';
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Custom redirect URI (for redirect method)
|
|
40
|
+
*/
|
|
41
|
+
redirectUri?: string;
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Whether to open signup page instead of login
|
|
45
|
+
*/
|
|
46
|
+
isSignup?: boolean;
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Popup window dimensions (for popup method)
|
|
50
|
+
*/
|
|
51
|
+
popupDimensions?: {
|
|
52
|
+
width?: number;
|
|
53
|
+
height?: number;
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Callback when auth method is selected
|
|
58
|
+
*/
|
|
59
|
+
onMethodSelected?: (method: 'fedcm' | 'popup' | 'redirect') => void;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
export class CrossDomainAuth {
|
|
63
|
+
constructor(private oxyServices: OxyServices) {}
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* Sign in with automatic method selection
|
|
67
|
+
*
|
|
68
|
+
* Tries methods in this order:
|
|
69
|
+
* 1. FedCM (if supported and not in private browsing)
|
|
70
|
+
* 2. Popup (if not blocked)
|
|
71
|
+
* 3. Redirect (always works)
|
|
72
|
+
*
|
|
73
|
+
* @param options - Authentication options
|
|
74
|
+
* @returns Session with user data and access token
|
|
75
|
+
*/
|
|
76
|
+
async signIn(options: CrossDomainAuthOptions = {}): Promise<SessionLoginResponse | null> {
|
|
77
|
+
const method = options.method || 'auto';
|
|
78
|
+
|
|
79
|
+
// If specific method requested, use it directly
|
|
80
|
+
if (method === 'fedcm') {
|
|
81
|
+
return this.signInWithFedCM(options);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
if (method === 'popup') {
|
|
85
|
+
return this.signInWithPopup(options);
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
if (method === 'redirect') {
|
|
89
|
+
this.signInWithRedirect(options);
|
|
90
|
+
return null; // Redirect doesn't return immediately
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
// Auto mode: Try methods in order of preference
|
|
94
|
+
return this.autoSignIn(options);
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* Automatic sign-in with progressive enhancement
|
|
99
|
+
*
|
|
100
|
+
* @private
|
|
101
|
+
*/
|
|
102
|
+
private async autoSignIn(options: CrossDomainAuthOptions): Promise<SessionLoginResponse | null> {
|
|
103
|
+
// 1. Try FedCM first (best UX, most modern)
|
|
104
|
+
if (this.isFedCMSupported()) {
|
|
105
|
+
try {
|
|
106
|
+
options.onMethodSelected?.('fedcm');
|
|
107
|
+
return await this.signInWithFedCM(options);
|
|
108
|
+
} catch (error) {
|
|
109
|
+
console.warn('[CrossDomainAuth] FedCM failed, trying popup...', error);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
// 2. Try popup (good UX, widely supported)
|
|
114
|
+
try {
|
|
115
|
+
options.onMethodSelected?.('popup');
|
|
116
|
+
return await this.signInWithPopup(options);
|
|
117
|
+
} catch (error) {
|
|
118
|
+
console.warn('[CrossDomainAuth] Popup failed, falling back to redirect...', error);
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
// 3. Fallback to redirect (always works)
|
|
122
|
+
options.onMethodSelected?.('redirect');
|
|
123
|
+
this.signInWithRedirect(options);
|
|
124
|
+
return null;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
/**
|
|
128
|
+
* Sign in using FedCM (Federated Credential Management)
|
|
129
|
+
*
|
|
130
|
+
* Best method - browser-native, no popups, Google-like experience
|
|
131
|
+
*/
|
|
132
|
+
async signInWithFedCM(options: CrossDomainAuthOptions = {}): Promise<SessionLoginResponse> {
|
|
133
|
+
return (this.oxyServices as any).signInWithFedCM({
|
|
134
|
+
context: options.isSignup ? 'signup' : 'signin',
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
/**
|
|
139
|
+
* Sign in using popup window
|
|
140
|
+
*
|
|
141
|
+
* Good method - preserves app state, no full page reload
|
|
142
|
+
*/
|
|
143
|
+
async signInWithPopup(options: CrossDomainAuthOptions = {}): Promise<SessionLoginResponse> {
|
|
144
|
+
return (this.oxyServices as any).signInWithPopup({
|
|
145
|
+
mode: options.isSignup ? 'signup' : 'login',
|
|
146
|
+
width: options.popupDimensions?.width,
|
|
147
|
+
height: options.popupDimensions?.height,
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
/**
|
|
152
|
+
* Sign in using full-page redirect
|
|
153
|
+
*
|
|
154
|
+
* Fallback method - works everywhere but loses app state
|
|
155
|
+
*/
|
|
156
|
+
signInWithRedirect(options: CrossDomainAuthOptions = {}): void {
|
|
157
|
+
(this.oxyServices as any).signInWithRedirect({
|
|
158
|
+
redirectUri: options.redirectUri,
|
|
159
|
+
mode: options.isSignup ? 'signup' : 'login',
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
/**
|
|
164
|
+
* Handle redirect callback
|
|
165
|
+
*
|
|
166
|
+
* Call this on app startup to check if we're returning from auth redirect
|
|
167
|
+
*/
|
|
168
|
+
handleRedirectCallback(): SessionLoginResponse | null {
|
|
169
|
+
return (this.oxyServices as any).handleAuthCallback();
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
/**
|
|
173
|
+
* Silent sign-in (check for existing session)
|
|
174
|
+
*
|
|
175
|
+
* Tries to automatically sign in without user interaction.
|
|
176
|
+
* Works with both FedCM and popup/iframe methods.
|
|
177
|
+
*
|
|
178
|
+
* @returns Session if user is already signed in, null otherwise
|
|
179
|
+
*/
|
|
180
|
+
async silentSignIn(): Promise<SessionLoginResponse | null> {
|
|
181
|
+
// Try FedCM silent sign-in first (if supported)
|
|
182
|
+
if (this.isFedCMSupported()) {
|
|
183
|
+
try {
|
|
184
|
+
const session = await (this.oxyServices as any).silentSignInWithFedCM();
|
|
185
|
+
if (session) {
|
|
186
|
+
return session;
|
|
187
|
+
}
|
|
188
|
+
} catch (error) {
|
|
189
|
+
console.warn('[CrossDomainAuth] FedCM silent sign-in failed:', error);
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
// Fallback to iframe-based silent auth
|
|
194
|
+
try {
|
|
195
|
+
return await (this.oxyServices as any).silentSignIn();
|
|
196
|
+
} catch (error) {
|
|
197
|
+
console.warn('[CrossDomainAuth] Silent sign-in failed:', error);
|
|
198
|
+
return null;
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
/**
|
|
203
|
+
* Restore session from storage
|
|
204
|
+
*
|
|
205
|
+
* For redirect method - restores previously authenticated session from localStorage
|
|
206
|
+
*/
|
|
207
|
+
restoreSession(): boolean {
|
|
208
|
+
return (this.oxyServices as any).restoreSession?.() || false;
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
/**
|
|
212
|
+
* Check if FedCM is supported in current browser
|
|
213
|
+
*/
|
|
214
|
+
isFedCMSupported(): boolean {
|
|
215
|
+
return (this.oxyServices as any).constructor.isFedCMSupported?.() || false;
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
/**
|
|
219
|
+
* Get recommended authentication method for current environment
|
|
220
|
+
*
|
|
221
|
+
* @returns Recommended method name and reason
|
|
222
|
+
*/
|
|
223
|
+
getRecommendedMethod(): { method: 'fedcm' | 'popup' | 'redirect'; reason: string } {
|
|
224
|
+
if (this.isFedCMSupported()) {
|
|
225
|
+
return {
|
|
226
|
+
method: 'fedcm',
|
|
227
|
+
reason: 'FedCM is supported - provides best UX with browser-native auth',
|
|
228
|
+
};
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
if (typeof window !== 'undefined') {
|
|
232
|
+
return {
|
|
233
|
+
method: 'popup',
|
|
234
|
+
reason: 'Browser environment - popup preserves app state',
|
|
235
|
+
};
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
return {
|
|
239
|
+
method: 'redirect',
|
|
240
|
+
reason: 'Fallback method - works in all environments',
|
|
241
|
+
};
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
/**
|
|
245
|
+
* Initialize cross-domain auth on app startup
|
|
246
|
+
*
|
|
247
|
+
* This handles:
|
|
248
|
+
* 1. Redirect callback (if returning from auth.oxy.so)
|
|
249
|
+
* 2. Session restoration (from localStorage)
|
|
250
|
+
* 3. Silent sign-in (check for existing SSO session)
|
|
251
|
+
*
|
|
252
|
+
* @returns Session if user is authenticated, null otherwise
|
|
253
|
+
*/
|
|
254
|
+
async initialize(): Promise<SessionLoginResponse | null> {
|
|
255
|
+
// 1. Check if this is a redirect callback
|
|
256
|
+
const callbackSession = this.handleRedirectCallback();
|
|
257
|
+
if (callbackSession) {
|
|
258
|
+
return callbackSession;
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
// 2. Try to restore existing session from storage
|
|
262
|
+
const restored = this.restoreSession();
|
|
263
|
+
if (restored) {
|
|
264
|
+
// Verify session is still valid by fetching user
|
|
265
|
+
try {
|
|
266
|
+
const user = await (this.oxyServices as any).getCurrentUser();
|
|
267
|
+
if (user) {
|
|
268
|
+
return {
|
|
269
|
+
sessionId: (this.oxyServices as any).getStoredSessionId?.() || '',
|
|
270
|
+
deviceId: '',
|
|
271
|
+
expiresAt: new Date(Date.now() + 24 * 60 * 60 * 1000).toISOString(),
|
|
272
|
+
user,
|
|
273
|
+
};
|
|
274
|
+
}
|
|
275
|
+
} catch (error) {
|
|
276
|
+
console.warn('[CrossDomainAuth] Stored session invalid:', error);
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
// 3. Try silent sign-in (check for SSO session at auth.oxy.so)
|
|
281
|
+
return await this.silentSignIn();
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
/**
|
|
286
|
+
* Helper function to create CrossDomainAuth instance
|
|
287
|
+
*
|
|
288
|
+
* @example
|
|
289
|
+
* ```typescript
|
|
290
|
+
* import { createCrossDomainAuth } from '@oxyhq/services';
|
|
291
|
+
*
|
|
292
|
+
* const oxyServices = new OxyServices({ baseURL: 'https://api.oxy.so' });
|
|
293
|
+
* const auth = createCrossDomainAuth(oxyServices);
|
|
294
|
+
*
|
|
295
|
+
* // On app startup
|
|
296
|
+
* const session = await auth.initialize();
|
|
297
|
+
* if (session) {
|
|
298
|
+
* console.log('User is signed in:', session.user);
|
|
299
|
+
* }
|
|
300
|
+
*
|
|
301
|
+
* // Sign in button click
|
|
302
|
+
* const session = await auth.signIn();
|
|
303
|
+
* ```
|
|
304
|
+
*/
|
|
305
|
+
export function createCrossDomainAuth(oxyServices: OxyServices): CrossDomainAuth {
|
|
306
|
+
return new CrossDomainAuth(oxyServices);
|
|
307
|
+
}
|
package/src/core/HttpService.ts
CHANGED
|
@@ -17,8 +17,17 @@ import { TTLCache, registerCacheForCleanup } from '../utils/cache';
|
|
|
17
17
|
import { RequestDeduplicator, RequestQueue, SimpleLogger } from '../utils/requestUtils';
|
|
18
18
|
import { retryAsync } from '../utils/asyncUtils';
|
|
19
19
|
import { handleHttpError } from '../utils/errorUtils';
|
|
20
|
+
import { jwtDecode } from 'jwt-decode';
|
|
20
21
|
import type { OxyConfig } from '../models/interfaces';
|
|
21
22
|
|
|
23
|
+
interface JwtPayload {
|
|
24
|
+
exp?: number;
|
|
25
|
+
userId?: string;
|
|
26
|
+
id?: string;
|
|
27
|
+
sessionId?: string;
|
|
28
|
+
[key: string]: any;
|
|
29
|
+
}
|
|
30
|
+
|
|
22
31
|
export interface RequestOptions {
|
|
23
32
|
cache?: boolean;
|
|
24
33
|
cacheTTL?: number;
|
|
@@ -37,8 +46,45 @@ interface RequestConfig extends RequestOptions {
|
|
|
37
46
|
params?: Record<string, unknown>;
|
|
38
47
|
}
|
|
39
48
|
|
|
40
|
-
|
|
41
|
-
|
|
49
|
+
/**
|
|
50
|
+
* Token store for authentication (singleton)
|
|
51
|
+
*/
|
|
52
|
+
class TokenStore {
|
|
53
|
+
private static instance: TokenStore;
|
|
54
|
+
private accessToken: string | null = null;
|
|
55
|
+
private refreshToken: string | null = null;
|
|
56
|
+
|
|
57
|
+
private constructor() {}
|
|
58
|
+
|
|
59
|
+
static getInstance(): TokenStore {
|
|
60
|
+
if (!TokenStore.instance) {
|
|
61
|
+
TokenStore.instance = new TokenStore();
|
|
62
|
+
}
|
|
63
|
+
return TokenStore.instance;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
setTokens(accessToken: string, refreshToken = ''): void {
|
|
67
|
+
this.accessToken = accessToken;
|
|
68
|
+
this.refreshToken = refreshToken;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
getAccessToken(): string | null {
|
|
72
|
+
return this.accessToken;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
getRefreshToken(): string | null {
|
|
76
|
+
return this.refreshToken;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
clearTokens(): void {
|
|
80
|
+
this.accessToken = null;
|
|
81
|
+
this.refreshToken = null;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
hasAccessToken(): boolean {
|
|
85
|
+
return !!this.accessToken;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
42
88
|
|
|
43
89
|
/**
|
|
44
90
|
* Unified HTTP Service
|
|
@@ -48,6 +94,7 @@ import { tokenService } from './services/TokenService';
|
|
|
48
94
|
*/
|
|
49
95
|
export class HttpService {
|
|
50
96
|
private baseURL: string;
|
|
97
|
+
private tokenStore: TokenStore;
|
|
51
98
|
private cache: TTLCache<any>;
|
|
52
99
|
private deduplicator: RequestDeduplicator;
|
|
53
100
|
private requestQueue: RequestQueue;
|
|
@@ -67,9 +114,7 @@ export class HttpService {
|
|
|
67
114
|
constructor(config: OxyConfig) {
|
|
68
115
|
this.config = config;
|
|
69
116
|
this.baseURL = config.baseURL;
|
|
70
|
-
|
|
71
|
-
// Initialize TokenService with baseURL
|
|
72
|
-
tokenService.initialize(this.baseURL);
|
|
117
|
+
this.tokenStore = TokenStore.getInstance();
|
|
73
118
|
|
|
74
119
|
this.logger = new SimpleLogger(
|
|
75
120
|
config.enableLogging || false,
|
|
@@ -216,7 +261,7 @@ export class HttpService {
|
|
|
216
261
|
// Handle response
|
|
217
262
|
if (!response.ok) {
|
|
218
263
|
if (response.status === 401) {
|
|
219
|
-
|
|
264
|
+
this.tokenStore.clearTokens();
|
|
220
265
|
}
|
|
221
266
|
|
|
222
267
|
// Try to parse error response (handle empty/malformed JSON)
|
|
@@ -224,9 +269,12 @@ export class HttpService {
|
|
|
224
269
|
const contentType = response.headers.get('content-type');
|
|
225
270
|
if (contentType && contentType.includes('application/json')) {
|
|
226
271
|
try {
|
|
227
|
-
const errorData = await response.json() as { message?: string } | null;
|
|
272
|
+
const errorData = await response.json() as { message?: string; error?: string } | null;
|
|
273
|
+
// Check both 'message' and 'error' fields for backwards compatibility
|
|
228
274
|
if (errorData?.message) {
|
|
229
275
|
errorMessage = errorData.message;
|
|
276
|
+
} else if (errorData?.error) {
|
|
277
|
+
errorMessage = errorData.error;
|
|
230
278
|
}
|
|
231
279
|
} catch (parseError) {
|
|
232
280
|
// Malformed JSON or empty response - use status text
|
|
@@ -370,10 +418,45 @@ export class HttpService {
|
|
|
370
418
|
|
|
371
419
|
/**
|
|
372
420
|
* Get auth header with automatic token refresh
|
|
373
|
-
* Uses TokenService for all token operations
|
|
374
421
|
*/
|
|
375
422
|
private async getAuthHeader(): Promise<string | null> {
|
|
376
|
-
|
|
423
|
+
const accessToken = this.tokenStore.getAccessToken();
|
|
424
|
+
if (!accessToken) {
|
|
425
|
+
return null;
|
|
426
|
+
}
|
|
427
|
+
|
|
428
|
+
try {
|
|
429
|
+
const decoded = jwtDecode<JwtPayload>(accessToken);
|
|
430
|
+
const currentTime = Math.floor(Date.now() / 1000);
|
|
431
|
+
|
|
432
|
+
// If token expires in less than 60 seconds, refresh it
|
|
433
|
+
if (decoded.exp && decoded.exp - currentTime < 60 && decoded.sessionId) {
|
|
434
|
+
try {
|
|
435
|
+
const refreshUrl = `${this.baseURL}/api/session/token/${decoded.sessionId}`;
|
|
436
|
+
|
|
437
|
+
// Use AbortSignal.timeout for consistent timeout handling
|
|
438
|
+
const response = await fetch(refreshUrl, {
|
|
439
|
+
method: 'GET',
|
|
440
|
+
headers: { 'Accept': 'application/json' },
|
|
441
|
+
signal: AbortSignal.timeout(5000),
|
|
442
|
+
});
|
|
443
|
+
|
|
444
|
+
if (response.ok) {
|
|
445
|
+
const { accessToken: newToken } = await response.json();
|
|
446
|
+
this.tokenStore.setTokens(newToken);
|
|
447
|
+
this.logger.debug('Token refreshed');
|
|
448
|
+
return `Bearer ${newToken}`;
|
|
449
|
+
}
|
|
450
|
+
} catch (refreshError) {
|
|
451
|
+
this.logger.warn('Token refresh failed, using current token');
|
|
452
|
+
}
|
|
453
|
+
}
|
|
454
|
+
|
|
455
|
+
return `Bearer ${accessToken}`;
|
|
456
|
+
} catch (error) {
|
|
457
|
+
this.logger.error('Error processing token:', error);
|
|
458
|
+
return `Bearer ${accessToken}`;
|
|
459
|
+
}
|
|
377
460
|
}
|
|
378
461
|
|
|
379
462
|
/**
|
|
@@ -478,21 +561,21 @@ export class HttpService {
|
|
|
478
561
|
return { data: result as T };
|
|
479
562
|
}
|
|
480
563
|
|
|
481
|
-
// Token management
|
|
564
|
+
// Token management
|
|
482
565
|
setTokens(accessToken: string, refreshToken = ''): void {
|
|
483
|
-
|
|
566
|
+
this.tokenStore.setTokens(accessToken, refreshToken);
|
|
484
567
|
}
|
|
485
568
|
|
|
486
569
|
clearTokens(): void {
|
|
487
|
-
|
|
570
|
+
this.tokenStore.clearTokens();
|
|
488
571
|
}
|
|
489
572
|
|
|
490
573
|
getAccessToken(): string | null {
|
|
491
|
-
return
|
|
574
|
+
return this.tokenStore.getAccessToken();
|
|
492
575
|
}
|
|
493
576
|
|
|
494
577
|
hasAccessToken(): boolean {
|
|
495
|
-
return
|
|
578
|
+
return this.tokenStore.hasAccessToken();
|
|
496
579
|
}
|
|
497
580
|
|
|
498
581
|
getBaseURL(): string {
|
|
@@ -526,10 +609,10 @@ export class HttpService {
|
|
|
526
609
|
// Test-only utility
|
|
527
610
|
static __resetTokensForTests(): void {
|
|
528
611
|
try {
|
|
529
|
-
|
|
612
|
+
TokenStore.getInstance().clearTokens();
|
|
530
613
|
} catch (error) {
|
|
531
614
|
// Silently fail in test cleanup - this is expected behavior
|
|
532
|
-
//
|
|
615
|
+
// TokenStore might not be initialized in some test scenarios
|
|
533
616
|
}
|
|
534
617
|
}
|
|
535
618
|
}
|
|
@@ -3,16 +3,24 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Contains core infrastructure, HTTP client, request management, and error handling
|
|
5
5
|
*/
|
|
6
|
+
import { jwtDecode } from 'jwt-decode';
|
|
6
7
|
import type { OxyConfig as OxyConfigBase, ApiError, User } from '../models/interfaces';
|
|
7
8
|
import { handleHttpError } from '../utils/errorUtils';
|
|
8
9
|
import { HttpService, type RequestOptions } from './HttpService';
|
|
9
10
|
import { OxyAuthenticationError, OxyAuthenticationTimeoutError } from './OxyServices.errors';
|
|
10
|
-
import { tokenService } from './services/TokenService';
|
|
11
11
|
|
|
12
12
|
export interface OxyConfig extends OxyConfigBase {
|
|
13
13
|
cloudURL?: string;
|
|
14
14
|
}
|
|
15
15
|
|
|
16
|
+
interface JwtPayload {
|
|
17
|
+
exp?: number;
|
|
18
|
+
userId?: string;
|
|
19
|
+
id?: string;
|
|
20
|
+
sessionId?: string;
|
|
21
|
+
[key: string]: any;
|
|
22
|
+
}
|
|
23
|
+
|
|
16
24
|
/**
|
|
17
25
|
* Base class for OxyServices with core infrastructure
|
|
18
26
|
*/
|
|
@@ -127,10 +135,19 @@ export class OxyServicesBase {
|
|
|
127
135
|
|
|
128
136
|
/**
|
|
129
137
|
* Get the current user ID from the access token
|
|
130
|
-
* Returns MongoDB ObjectId (never publicKey)
|
|
131
138
|
*/
|
|
132
139
|
public getCurrentUserId(): string | null {
|
|
133
|
-
|
|
140
|
+
const accessToken = this.httpService.getAccessToken();
|
|
141
|
+
if (!accessToken) {
|
|
142
|
+
return null;
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
try {
|
|
146
|
+
const decoded = jwtDecode<JwtPayload>(accessToken);
|
|
147
|
+
return decoded.userId || decoded.id || null;
|
|
148
|
+
} catch (error) {
|
|
149
|
+
return null;
|
|
150
|
+
}
|
|
134
151
|
}
|
|
135
152
|
|
|
136
153
|
/**
|
package/src/core/OxyServices.ts
CHANGED
|
@@ -96,20 +96,24 @@ import { composeOxyServices } from './mixins';
|
|
|
96
96
|
* ```
|
|
97
97
|
*/
|
|
98
98
|
// Compose all mixins into the final OxyServices class
|
|
99
|
-
const OxyServicesComposed
|
|
99
|
+
const OxyServicesComposed = composeOxyServices();
|
|
100
100
|
|
|
101
101
|
// Export as a named class to avoid TypeScript issues with anonymous class types
|
|
102
|
-
export class OxyServices extends OxyServicesComposed {
|
|
102
|
+
export class OxyServices extends (OxyServicesComposed as any) {
|
|
103
103
|
constructor(config: OxyConfig) {
|
|
104
104
|
super(config);
|
|
105
105
|
}
|
|
106
106
|
}
|
|
107
107
|
|
|
108
|
+
// Type augmentation to expose mixin methods to TypeScript
|
|
109
|
+
// This allows proper type checking while avoiding complex mixin type inference
|
|
110
|
+
export interface OxyServices extends InstanceType<ReturnType<typeof composeOxyServices>> {}
|
|
111
|
+
|
|
108
112
|
// Re-export error classes for convenience
|
|
109
113
|
export { OxyAuthenticationError, OxyAuthenticationTimeoutError };
|
|
110
114
|
|
|
111
115
|
/**
|
|
112
|
-
*
|
|
116
|
+
* Export the default Oxy Cloud URL (for backward compatibility)
|
|
113
117
|
*/
|
|
114
118
|
export const OXY_CLOUD_URL = 'https://cloud.oxy.so';
|
|
115
119
|
|