@oxyhq/services 5.13.0 → 5.13.2
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 +71 -0
- package/lib/commonjs/core/HttpClient.js +238 -0
- package/lib/commonjs/core/HttpClient.js.map +1 -0
- package/lib/commonjs/core/OxyServices.js +530 -332
- package/lib/commonjs/core/OxyServices.js.map +1 -1
- package/lib/commonjs/core/RequestManager.js +199 -0
- package/lib/commonjs/core/RequestManager.js.map +1 -0
- package/lib/commonjs/core/index.js +38 -1
- package/lib/commonjs/core/index.js.map +1 -1
- package/lib/commonjs/i18n/index.js +37 -1
- package/lib/commonjs/i18n/index.js.map +1 -1
- package/lib/commonjs/i18n/locales/ar-SA.json +128 -0
- package/lib/commonjs/i18n/locales/ca-ES.json +128 -0
- package/lib/commonjs/i18n/locales/de-DE.json +128 -0
- package/lib/commonjs/i18n/locales/en-US.json +85 -12
- package/lib/commonjs/i18n/locales/es-ES.json +58 -6
- package/lib/commonjs/i18n/locales/fr-FR.json +128 -0
- package/lib/commonjs/i18n/locales/it-IT.json +128 -0
- package/lib/commonjs/i18n/locales/ja-JP.json +127 -0
- package/lib/commonjs/i18n/locales/ko-KR.json +128 -0
- package/lib/commonjs/i18n/locales/pt-PT.json +128 -0
- package/lib/commonjs/i18n/locales/zh-CN.json +128 -0
- package/lib/commonjs/index.js +36 -0
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/ui/components/Avatar.js +94 -27
- package/lib/commonjs/ui/components/Avatar.js.map +1 -1
- package/lib/commonjs/ui/components/FollowButton.js +1 -0
- package/lib/commonjs/ui/components/FollowButton.js.map +1 -1
- package/lib/commonjs/ui/components/FontLoader.js +22 -42
- package/lib/commonjs/ui/components/FontLoader.js.map +1 -1
- package/lib/commonjs/ui/components/OxyProvider.js +5 -8
- package/lib/commonjs/ui/components/OxyProvider.js.map +1 -1
- package/lib/commonjs/ui/components/StepBasedScreen.js +64 -44
- package/lib/commonjs/ui/components/StepBasedScreen.js.map +1 -1
- package/lib/commonjs/ui/components/internal/GroupedPillButtons.js +14 -35
- package/lib/commonjs/ui/components/internal/GroupedPillButtons.js.map +1 -1
- package/lib/commonjs/ui/components/internal/PinInput.js +2 -2
- package/lib/commonjs/ui/components/internal/PinInput.js.map +1 -1
- package/lib/commonjs/ui/components/internal/TextField.js +13 -8
- package/lib/commonjs/ui/components/internal/TextField.js.map +1 -1
- package/lib/commonjs/ui/context/OxyContext.js +443 -371
- package/lib/commonjs/ui/context/OxyContext.js.map +1 -1
- package/lib/commonjs/ui/hooks/useSessionSocket.js +80 -22
- package/lib/commonjs/ui/hooks/useSessionSocket.js.map +1 -1
- package/lib/commonjs/ui/index.js +4 -1
- package/lib/commonjs/ui/index.js.map +1 -1
- package/lib/commonjs/ui/screens/AccountSettingsScreen.js +32 -2
- package/lib/commonjs/ui/screens/AccountSettingsScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/AccountSwitcherScreen.js +101 -59
- package/lib/commonjs/ui/screens/AccountSwitcherScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/FileManagementScreen.js +3 -2
- package/lib/commonjs/ui/screens/FileManagementScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/LanguageSelectorScreen.js +75 -117
- package/lib/commonjs/ui/screens/LanguageSelectorScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/SignInScreen.js +43 -50
- package/lib/commonjs/ui/screens/SignInScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/SignUpScreen.js +14 -16
- package/lib/commonjs/ui/screens/SignUpScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/WelcomeNewUserScreen.js +188 -142
- package/lib/commonjs/ui/screens/WelcomeNewUserScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/internal/SignInPasswordStep.js +10 -10
- package/lib/commonjs/ui/screens/internal/SignInPasswordStep.js.map +1 -1
- package/lib/commonjs/ui/screens/internal/SignInUsernameStep.js +2 -4
- package/lib/commonjs/ui/screens/internal/SignInUsernameStep.js.map +1 -1
- package/lib/commonjs/ui/screens/steps/RecoverRequestStep.js +45 -25
- package/lib/commonjs/ui/screens/steps/RecoverRequestStep.js.map +1 -1
- package/lib/commonjs/ui/screens/steps/RecoverResetPasswordStep.js +88 -53
- package/lib/commonjs/ui/screens/steps/RecoverResetPasswordStep.js.map +1 -1
- package/lib/commonjs/ui/screens/steps/RecoverSuccessStep.js +79 -58
- package/lib/commonjs/ui/screens/steps/RecoverSuccessStep.js.map +1 -1
- package/lib/commonjs/ui/screens/steps/RecoverVerifyStep.js +61 -52
- package/lib/commonjs/ui/screens/steps/RecoverVerifyStep.js.map +1 -1
- package/lib/commonjs/ui/screens/steps/SignInPasswordStep.js +218 -39
- package/lib/commonjs/ui/screens/steps/SignInPasswordStep.js.map +1 -1
- package/lib/commonjs/ui/screens/steps/SignInTotpStep.js +77 -50
- package/lib/commonjs/ui/screens/steps/SignInTotpStep.js.map +1 -1
- package/lib/commonjs/ui/screens/steps/SignInUsernameStep.js +424 -71
- package/lib/commonjs/ui/screens/steps/SignInUsernameStep.js.map +1 -1
- package/lib/commonjs/ui/screens/steps/SignUpIdentityStep.js +55 -30
- package/lib/commonjs/ui/screens/steps/SignUpIdentityStep.js.map +1 -1
- package/lib/commonjs/ui/screens/steps/SignUpSecurityStep.js +64 -46
- package/lib/commonjs/ui/screens/steps/SignUpSecurityStep.js.map +1 -1
- package/lib/commonjs/ui/screens/steps/SignUpSummaryStep.js +84 -146
- package/lib/commonjs/ui/screens/steps/SignUpSummaryStep.js.map +1 -1
- package/lib/commonjs/ui/screens/steps/SignUpWelcomeStep.js +113 -34
- package/lib/commonjs/ui/screens/steps/SignUpWelcomeStep.js.map +1 -1
- package/lib/commonjs/ui/stores/accountStore.js +237 -0
- package/lib/commonjs/ui/stores/accountStore.js.map +1 -0
- package/lib/commonjs/ui/stores/authStore.js +17 -20
- package/lib/commonjs/ui/stores/authStore.js.map +1 -1
- package/lib/commonjs/ui/styles/authStyles.js +16 -8
- package/lib/commonjs/ui/styles/authStyles.js.map +1 -1
- package/lib/commonjs/ui/styles/index.js +11 -0
- package/lib/commonjs/ui/styles/index.js.map +1 -1
- package/lib/commonjs/ui/styles/spacing.js +51 -0
- package/lib/commonjs/ui/styles/spacing.js.map +1 -0
- package/lib/commonjs/utils/asyncUtils.js +9 -22
- package/lib/commonjs/utils/asyncUtils.js.map +1 -1
- package/lib/commonjs/utils/cache.js +259 -0
- package/lib/commonjs/utils/cache.js.map +1 -0
- package/lib/commonjs/utils/index.js +99 -0
- package/lib/commonjs/utils/index.js.map +1 -1
- package/lib/commonjs/utils/languageUtils.js +159 -0
- package/lib/commonjs/utils/languageUtils.js.map +1 -0
- package/lib/commonjs/utils/requestUtils.js +217 -0
- package/lib/commonjs/utils/requestUtils.js.map +1 -0
- package/lib/commonjs/utils/sessionUtils.js +191 -0
- package/lib/commonjs/utils/sessionUtils.js.map +1 -0
- package/lib/commonjs/utils/validationUtils.js +1 -1
- package/lib/module/core/HttpClient.js +232 -0
- package/lib/module/core/HttpClient.js.map +1 -0
- package/lib/module/core/OxyServices.js +528 -326
- package/lib/module/core/OxyServices.js.map +1 -1
- package/lib/module/core/RequestManager.js +194 -0
- package/lib/module/core/RequestManager.js.map +1 -0
- package/lib/module/core/index.js +2 -0
- package/lib/module/core/index.js.map +1 -1
- package/lib/module/i18n/index.js +37 -1
- package/lib/module/i18n/index.js.map +1 -1
- package/lib/module/i18n/locales/ar-SA.json +128 -0
- package/lib/module/i18n/locales/ca-ES.json +128 -0
- package/lib/module/i18n/locales/de-DE.json +128 -0
- package/lib/module/i18n/locales/en-US.json +85 -12
- package/lib/module/i18n/locales/es-ES.json +58 -6
- package/lib/module/i18n/locales/fr-FR.json +128 -0
- package/lib/module/i18n/locales/it-IT.json +128 -0
- package/lib/module/i18n/locales/ja-JP.json +127 -0
- package/lib/module/i18n/locales/ko-KR.json +128 -0
- package/lib/module/i18n/locales/pt-PT.json +128 -0
- package/lib/module/i18n/locales/zh-CN.json +128 -0
- package/lib/module/index.js +2 -0
- package/lib/module/index.js.map +1 -1
- package/lib/module/ui/components/Avatar.js +94 -27
- package/lib/module/ui/components/Avatar.js.map +1 -1
- package/lib/module/ui/components/FollowButton.js +1 -0
- package/lib/module/ui/components/FollowButton.js.map +1 -1
- package/lib/module/ui/components/FontLoader.js +23 -43
- package/lib/module/ui/components/FontLoader.js.map +1 -1
- package/lib/module/ui/components/OxyProvider.js +6 -8
- package/lib/module/ui/components/OxyProvider.js.map +1 -1
- package/lib/module/ui/components/StepBasedScreen.js +65 -45
- package/lib/module/ui/components/StepBasedScreen.js.map +1 -1
- package/lib/module/ui/components/internal/GroupedPillButtons.js +14 -35
- package/lib/module/ui/components/internal/GroupedPillButtons.js.map +1 -1
- package/lib/module/ui/components/internal/PinInput.js +2 -2
- package/lib/module/ui/components/internal/PinInput.js.map +1 -1
- package/lib/module/ui/components/internal/TextField.js +13 -8
- package/lib/module/ui/components/internal/TextField.js.map +1 -1
- package/lib/module/ui/context/OxyContext.js +442 -370
- package/lib/module/ui/context/OxyContext.js.map +1 -1
- package/lib/module/ui/hooks/useSessionSocket.js +80 -22
- package/lib/module/ui/hooks/useSessionSocket.js.map +1 -1
- package/lib/module/ui/index.js +4 -2
- package/lib/module/ui/index.js.map +1 -1
- package/lib/module/ui/screens/AccountSettingsScreen.js +33 -2
- package/lib/module/ui/screens/AccountSettingsScreen.js.map +1 -1
- package/lib/module/ui/screens/AccountSwitcherScreen.js +102 -60
- package/lib/module/ui/screens/AccountSwitcherScreen.js.map +1 -1
- package/lib/module/ui/screens/FileManagementScreen.js +3 -2
- package/lib/module/ui/screens/FileManagementScreen.js.map +1 -1
- package/lib/module/ui/screens/LanguageSelectorScreen.js +73 -117
- package/lib/module/ui/screens/LanguageSelectorScreen.js.map +1 -1
- package/lib/module/ui/screens/SignInScreen.js +44 -51
- package/lib/module/ui/screens/SignInScreen.js.map +1 -1
- package/lib/module/ui/screens/SignUpScreen.js +14 -16
- package/lib/module/ui/screens/SignUpScreen.js.map +1 -1
- package/lib/module/ui/screens/WelcomeNewUserScreen.js +187 -143
- package/lib/module/ui/screens/WelcomeNewUserScreen.js.map +1 -1
- package/lib/module/ui/screens/internal/SignInPasswordStep.js +10 -10
- package/lib/module/ui/screens/internal/SignInPasswordStep.js.map +1 -1
- package/lib/module/ui/screens/internal/SignInUsernameStep.js +2 -4
- package/lib/module/ui/screens/internal/SignInUsernameStep.js.map +1 -1
- package/lib/module/ui/screens/steps/RecoverRequestStep.js +45 -25
- package/lib/module/ui/screens/steps/RecoverRequestStep.js.map +1 -1
- package/lib/module/ui/screens/steps/RecoverResetPasswordStep.js +89 -54
- package/lib/module/ui/screens/steps/RecoverResetPasswordStep.js.map +1 -1
- package/lib/module/ui/screens/steps/RecoverSuccessStep.js +80 -59
- package/lib/module/ui/screens/steps/RecoverSuccessStep.js.map +1 -1
- package/lib/module/ui/screens/steps/RecoverVerifyStep.js +62 -53
- package/lib/module/ui/screens/steps/RecoverVerifyStep.js.map +1 -1
- package/lib/module/ui/screens/steps/SignInPasswordStep.js +219 -40
- package/lib/module/ui/screens/steps/SignInPasswordStep.js.map +1 -1
- package/lib/module/ui/screens/steps/SignInTotpStep.js +78 -51
- package/lib/module/ui/screens/steps/SignInTotpStep.js.map +1 -1
- package/lib/module/ui/screens/steps/SignInUsernameStep.js +426 -73
- package/lib/module/ui/screens/steps/SignInUsernameStep.js.map +1 -1
- package/lib/module/ui/screens/steps/SignUpIdentityStep.js +55 -30
- package/lib/module/ui/screens/steps/SignUpIdentityStep.js.map +1 -1
- package/lib/module/ui/screens/steps/SignUpSecurityStep.js +65 -47
- package/lib/module/ui/screens/steps/SignUpSecurityStep.js.map +1 -1
- package/lib/module/ui/screens/steps/SignUpSummaryStep.js +84 -146
- package/lib/module/ui/screens/steps/SignUpSummaryStep.js.map +1 -1
- package/lib/module/ui/screens/steps/SignUpWelcomeStep.js +114 -35
- package/lib/module/ui/screens/steps/SignUpWelcomeStep.js.map +1 -1
- package/lib/module/ui/stores/accountStore.js +229 -0
- package/lib/module/ui/stores/accountStore.js.map +1 -0
- package/lib/module/ui/stores/authStore.js +17 -20
- package/lib/module/ui/stores/authStore.js.map +1 -1
- package/lib/module/ui/styles/authStyles.js +16 -8
- package/lib/module/ui/styles/authStyles.js.map +1 -1
- package/lib/module/ui/styles/index.js +1 -0
- package/lib/module/ui/styles/index.js.map +1 -1
- package/lib/module/ui/styles/spacing.js +48 -0
- package/lib/module/ui/styles/spacing.js.map +1 -0
- package/lib/module/utils/asyncUtils.js +10 -22
- package/lib/module/utils/asyncUtils.js.map +1 -1
- package/lib/module/utils/cache.js +250 -0
- package/lib/module/utils/cache.js.map +1 -0
- package/lib/module/utils/index.js +7 -0
- package/lib/module/utils/index.js.map +1 -1
- package/lib/module/utils/languageUtils.js +151 -0
- package/lib/module/utils/languageUtils.js.map +1 -0
- package/lib/module/utils/requestUtils.js +210 -0
- package/lib/module/utils/requestUtils.js.map +1 -0
- package/lib/module/utils/sessionUtils.js +180 -0
- package/lib/module/utils/sessionUtils.js.map +1 -0
- package/lib/module/utils/validationUtils.js +1 -1
- package/lib/typescript/core/HttpClient.d.ts +64 -0
- package/lib/typescript/core/HttpClient.d.ts.map +1 -0
- package/lib/typescript/core/OxyServices.d.ts +86 -73
- package/lib/typescript/core/OxyServices.d.ts.map +1 -1
- package/lib/typescript/core/RequestManager.d.ts +67 -0
- package/lib/typescript/core/RequestManager.d.ts.map +1 -0
- package/lib/typescript/core/index.d.ts +2 -0
- package/lib/typescript/core/index.d.ts.map +1 -1
- package/lib/typescript/i18n/index.d.ts.map +1 -1
- package/lib/typescript/index.d.ts +2 -0
- package/lib/typescript/index.d.ts.map +1 -1
- package/lib/typescript/models/interfaces.d.ts +15 -0
- package/lib/typescript/models/interfaces.d.ts.map +1 -1
- package/lib/typescript/models/session.d.ts +1 -0
- package/lib/typescript/models/session.d.ts.map +1 -1
- package/lib/typescript/ui/components/Avatar.d.ts +6 -7
- package/lib/typescript/ui/components/Avatar.d.ts.map +1 -1
- package/lib/typescript/ui/components/FollowButton.d.ts.map +1 -1
- package/lib/typescript/ui/components/FontLoader.d.ts +3 -3
- package/lib/typescript/ui/components/FontLoader.d.ts.map +1 -1
- package/lib/typescript/ui/components/OxyProvider.d.ts +2 -2
- package/lib/typescript/ui/components/OxyProvider.d.ts.map +1 -1
- package/lib/typescript/ui/components/StepBasedScreen.d.ts.map +1 -1
- package/lib/typescript/ui/components/internal/GroupedPillButtons.d.ts.map +1 -1
- package/lib/typescript/ui/components/internal/TextField.d.ts.map +1 -1
- package/lib/typescript/ui/context/OxyContext.d.ts +5 -0
- package/lib/typescript/ui/context/OxyContext.d.ts.map +1 -1
- package/lib/typescript/ui/hooks/useSessionSocket.d.ts.map +1 -1
- package/lib/typescript/ui/index.d.ts +2 -2
- package/lib/typescript/ui/index.d.ts.map +1 -1
- package/lib/typescript/ui/screens/AccountSettingsScreen.d.ts.map +1 -1
- package/lib/typescript/ui/screens/AccountSwitcherScreen.d.ts.map +1 -1
- package/lib/typescript/ui/screens/LanguageSelectorScreen.d.ts +3 -3
- package/lib/typescript/ui/screens/LanguageSelectorScreen.d.ts.map +1 -1
- package/lib/typescript/ui/screens/SignInScreen.d.ts.map +1 -1
- package/lib/typescript/ui/screens/SignUpScreen.d.ts.map +1 -1
- package/lib/typescript/ui/screens/WelcomeNewUserScreen.d.ts.map +1 -1
- package/lib/typescript/ui/screens/internal/SignInPasswordStep.d.ts.map +1 -1
- package/lib/typescript/ui/screens/steps/RecoverRequestStep.d.ts.map +1 -1
- package/lib/typescript/ui/screens/steps/RecoverResetPasswordStep.d.ts.map +1 -1
- package/lib/typescript/ui/screens/steps/RecoverSuccessStep.d.ts.map +1 -1
- package/lib/typescript/ui/screens/steps/RecoverVerifyStep.d.ts.map +1 -1
- package/lib/typescript/ui/screens/steps/SignInPasswordStep.d.ts +2 -0
- package/lib/typescript/ui/screens/steps/SignInPasswordStep.d.ts.map +1 -1
- package/lib/typescript/ui/screens/steps/SignInTotpStep.d.ts.map +1 -1
- package/lib/typescript/ui/screens/steps/SignInUsernameStep.d.ts.map +1 -1
- package/lib/typescript/ui/screens/steps/SignUpIdentityStep.d.ts.map +1 -1
- package/lib/typescript/ui/screens/steps/SignUpSecurityStep.d.ts.map +1 -1
- package/lib/typescript/ui/screens/steps/SignUpSummaryStep.d.ts.map +1 -1
- package/lib/typescript/ui/screens/steps/SignUpWelcomeStep.d.ts.map +1 -1
- package/lib/typescript/ui/stores/accountStore.d.ts +34 -0
- package/lib/typescript/ui/stores/accountStore.d.ts.map +1 -0
- package/lib/typescript/ui/stores/authStore.d.ts +7 -3
- package/lib/typescript/ui/stores/authStore.d.ts.map +1 -1
- package/lib/typescript/ui/styles/authStyles.d.ts +19 -2
- package/lib/typescript/ui/styles/authStyles.d.ts.map +1 -1
- package/lib/typescript/ui/styles/index.d.ts +1 -0
- package/lib/typescript/ui/styles/index.d.ts.map +1 -1
- package/lib/typescript/ui/styles/spacing.d.ts +43 -0
- package/lib/typescript/ui/styles/spacing.d.ts.map +1 -0
- package/lib/typescript/utils/asyncUtils.d.ts +2 -0
- package/lib/typescript/utils/asyncUtils.d.ts.map +1 -1
- package/lib/typescript/utils/cache.d.ts +128 -0
- package/lib/typescript/utils/cache.d.ts.map +1 -0
- package/lib/typescript/utils/index.d.ts +4 -0
- package/lib/typescript/utils/index.d.ts.map +1 -1
- package/lib/typescript/utils/languageUtils.d.ts +38 -0
- package/lib/typescript/utils/languageUtils.d.ts.map +1 -0
- package/lib/typescript/utils/requestUtils.d.ts +122 -0
- package/lib/typescript/utils/requestUtils.d.ts.map +1 -0
- package/lib/typescript/utils/sessionUtils.d.ts +55 -0
- package/lib/typescript/utils/sessionUtils.d.ts.map +1 -0
- package/lib/typescript/utils/validationUtils.d.ts +1 -1
- package/package.json +1 -1
- package/src/core/HttpClient.ts +277 -0
- package/src/core/OxyServices.ts +461 -352
- package/src/core/RequestManager.ts +240 -0
- package/src/core/index.ts +10 -0
- package/src/i18n/index.ts +36 -0
- package/src/i18n/locales/ar-SA.json +128 -0
- package/src/i18n/locales/ca-ES.json +128 -0
- package/src/i18n/locales/de-DE.json +128 -0
- package/src/i18n/locales/en-US.json +85 -12
- package/src/i18n/locales/es-ES.json +58 -6
- package/src/i18n/locales/fr-FR.json +128 -0
- package/src/i18n/locales/it-IT.json +128 -0
- package/src/i18n/locales/ja-JP.json +127 -0
- package/src/i18n/locales/ko-KR.json +128 -0
- package/src/i18n/locales/pt-PT.json +128 -0
- package/src/i18n/locales/zh-CN.json +128 -0
- package/src/index.ts +10 -0
- package/src/models/interfaces.ts +19 -0
- package/src/models/session.ts +1 -1
- package/src/ui/components/Avatar.tsx +151 -35
- package/src/ui/components/FollowButton.tsx +1 -0
- package/src/ui/components/FontLoader.tsx +17 -37
- package/src/ui/components/OxyProvider.tsx +14 -13
- package/src/ui/components/StepBasedScreen.tsx +66 -43
- package/src/ui/components/internal/GroupedPillButtons.tsx +15 -31
- package/src/ui/components/internal/PinInput.tsx +2 -2
- package/src/ui/components/internal/TextField.tsx +7 -6
- package/src/ui/context/OxyContext.tsx +441 -326
- package/src/ui/hooks/useSessionSocket.ts +72 -18
- package/src/ui/index.ts +4 -1
- package/src/ui/screens/AccountSettingsScreen.tsx +34 -2
- package/src/ui/screens/AccountSwitcherScreen.tsx +102 -68
- package/src/ui/screens/FileManagementScreen.tsx +16 -16
- package/src/ui/screens/LanguageSelectorScreen.tsx +86 -143
- package/src/ui/screens/SignInScreen.tsx +59 -43
- package/src/ui/screens/SignUpScreen.tsx +14 -15
- package/src/ui/screens/WelcomeNewUserScreen.tsx +153 -105
- package/src/ui/screens/internal/SignInPasswordStep.tsx +4 -6
- package/src/ui/screens/internal/SignInUsernameStep.tsx +1 -1
- package/src/ui/screens/steps/RecoverRequestStep.tsx +34 -24
- package/src/ui/screens/steps/RecoverResetPasswordStep.tsx +65 -36
- package/src/ui/screens/steps/RecoverSuccessStep.tsx +71 -47
- package/src/ui/screens/steps/RecoverVerifyStep.tsx +60 -50
- package/src/ui/screens/steps/SignInPasswordStep.tsx +190 -32
- package/src/ui/screens/steps/SignInTotpStep.tsx +68 -34
- package/src/ui/screens/steps/SignInUsernameStep.tsx +446 -63
- package/src/ui/screens/steps/SignUpIdentityStep.tsx +49 -35
- package/src/ui/screens/steps/SignUpSecurityStep.tsx +56 -39
- package/src/ui/screens/steps/SignUpSummaryStep.tsx +99 -89
- package/src/ui/screens/steps/SignUpWelcomeStep.tsx +88 -20
- package/src/ui/stores/accountStore.ts +285 -0
- package/src/ui/stores/authStore.ts +16 -19
- package/src/ui/styles/authStyles.ts +16 -8
- package/src/ui/styles/index.ts +1 -0
- package/src/ui/styles/spacing.ts +46 -0
- package/src/utils/asyncUtils.ts +10 -24
- package/src/utils/cache.ts +264 -0
- package/src/utils/index.ts +19 -0
- package/src/utils/languageUtils.ts +174 -0
- package/src/utils/requestUtils.ts +234 -0
- package/src/utils/sessionUtils.ts +206 -0
- package/src/utils/validationUtils.ts +1 -1
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Request Manager
|
|
3
|
+
*
|
|
4
|
+
* Handles request-level optimizations: caching, deduplication, queuing, and retry.
|
|
5
|
+
* Works on top of HttpClient to add performance features.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import type { AxiosInstance } from 'axios';
|
|
9
|
+
import { TTLCache, registerCacheForCleanup } from '../utils/cache';
|
|
10
|
+
import { RequestDeduplicator, RequestQueue, SimpleLogger } from '../utils/requestUtils';
|
|
11
|
+
import { retryWithBackoff } from '../utils/errorUtils';
|
|
12
|
+
import type { OxyConfig } from '../models/interfaces';
|
|
13
|
+
|
|
14
|
+
export interface RequestOptions {
|
|
15
|
+
cache?: boolean;
|
|
16
|
+
cacheTTL?: number;
|
|
17
|
+
deduplicate?: boolean;
|
|
18
|
+
retry?: boolean;
|
|
19
|
+
maxRetries?: number;
|
|
20
|
+
timeout?: number;
|
|
21
|
+
signal?: AbortSignal;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Request Manager
|
|
26
|
+
*
|
|
27
|
+
* Manages request-level optimizations while delegating actual HTTP calls to HttpClient.
|
|
28
|
+
*/
|
|
29
|
+
export class RequestManager {
|
|
30
|
+
private cache: TTLCache<any>;
|
|
31
|
+
private deduplicator: RequestDeduplicator;
|
|
32
|
+
private requestQueue: RequestQueue;
|
|
33
|
+
private logger: SimpleLogger;
|
|
34
|
+
private config: OxyConfig;
|
|
35
|
+
private httpClient: { request: (config: any) => Promise<any> };
|
|
36
|
+
|
|
37
|
+
// Performance monitoring
|
|
38
|
+
private requestMetrics = {
|
|
39
|
+
totalRequests: 0,
|
|
40
|
+
successfulRequests: 0,
|
|
41
|
+
failedRequests: 0,
|
|
42
|
+
cacheHits: 0,
|
|
43
|
+
cacheMisses: 0,
|
|
44
|
+
averageResponseTime: 0,
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
constructor(
|
|
48
|
+
httpClient: { request: (config: any) => Promise<any> },
|
|
49
|
+
config: OxyConfig
|
|
50
|
+
) {
|
|
51
|
+
this.httpClient = httpClient;
|
|
52
|
+
this.config = config;
|
|
53
|
+
|
|
54
|
+
// Initialize performance infrastructure
|
|
55
|
+
this.cache = new TTLCache<any>(config.cacheTTL || 5 * 60 * 1000);
|
|
56
|
+
registerCacheForCleanup(this.cache);
|
|
57
|
+
this.deduplicator = new RequestDeduplicator();
|
|
58
|
+
this.requestQueue = new RequestQueue(
|
|
59
|
+
config.maxConcurrentRequests || 10,
|
|
60
|
+
config.requestQueueSize || 100
|
|
61
|
+
);
|
|
62
|
+
this.logger = new SimpleLogger(
|
|
63
|
+
config.enableLogging || false,
|
|
64
|
+
config.logLevel || 'error',
|
|
65
|
+
'RequestManager'
|
|
66
|
+
);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* Make a request with all performance optimizations
|
|
71
|
+
*/
|
|
72
|
+
async request<T>(
|
|
73
|
+
method: 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE',
|
|
74
|
+
url: string,
|
|
75
|
+
data?: any,
|
|
76
|
+
options: RequestOptions = {}
|
|
77
|
+
): Promise<T> {
|
|
78
|
+
const {
|
|
79
|
+
cache = method === 'GET', // Cache GET requests by default
|
|
80
|
+
cacheTTL,
|
|
81
|
+
deduplicate = true,
|
|
82
|
+
retry = this.config.enableRetry !== false,
|
|
83
|
+
maxRetries = this.config.maxRetries || 3,
|
|
84
|
+
timeout,
|
|
85
|
+
signal,
|
|
86
|
+
} = options;
|
|
87
|
+
|
|
88
|
+
// Generate cache key
|
|
89
|
+
const cacheKey = cache ? `${method}:${url}:${JSON.stringify(data || {})}` : null;
|
|
90
|
+
|
|
91
|
+
// Check cache first
|
|
92
|
+
if (cache && cacheKey) {
|
|
93
|
+
const cached = this.cache.get(cacheKey) as T | null;
|
|
94
|
+
if (cached !== null) {
|
|
95
|
+
this.requestMetrics.cacheHits++;
|
|
96
|
+
this.logger.debug('Cache hit:', url);
|
|
97
|
+
return cached;
|
|
98
|
+
}
|
|
99
|
+
this.requestMetrics.cacheMisses++;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
// Request function that uses HttpClient
|
|
103
|
+
const requestFn = async (): Promise<T> => {
|
|
104
|
+
const startTime = Date.now();
|
|
105
|
+
try {
|
|
106
|
+
const result = await this.httpClient.request({
|
|
107
|
+
method,
|
|
108
|
+
url,
|
|
109
|
+
data: method !== 'GET' ? data : undefined,
|
|
110
|
+
params: method === 'GET' ? data : undefined,
|
|
111
|
+
timeout: timeout || this.config.requestTimeout || 5000,
|
|
112
|
+
signal,
|
|
113
|
+
});
|
|
114
|
+
|
|
115
|
+
const duration = Date.now() - startTime;
|
|
116
|
+
this.updateMetrics(true, duration);
|
|
117
|
+
this.config.onRequestEnd?.(url, method, duration, true);
|
|
118
|
+
|
|
119
|
+
return result as T;
|
|
120
|
+
} catch (error: any) {
|
|
121
|
+
const duration = Date.now() - startTime;
|
|
122
|
+
this.updateMetrics(false, duration);
|
|
123
|
+
this.config.onRequestEnd?.(url, method, duration, false);
|
|
124
|
+
this.config.onRequestError?.(url, method, error);
|
|
125
|
+
throw error;
|
|
126
|
+
}
|
|
127
|
+
};
|
|
128
|
+
|
|
129
|
+
// Wrap with retry if enabled
|
|
130
|
+
const requestWithRetry = retry
|
|
131
|
+
? () => this.retryWithBackoff(requestFn, maxRetries)
|
|
132
|
+
: requestFn;
|
|
133
|
+
|
|
134
|
+
// Wrap with deduplication if enabled
|
|
135
|
+
const dedupeKey = deduplicate ? `${method}:${url}:${JSON.stringify(data || {})}` : null;
|
|
136
|
+
const finalRequest = dedupeKey
|
|
137
|
+
? () => this.deduplicator.deduplicate(dedupeKey, requestWithRetry)
|
|
138
|
+
: requestWithRetry;
|
|
139
|
+
|
|
140
|
+
// Execute request (with queue if needed)
|
|
141
|
+
const result = await this.requestQueue.enqueue(finalRequest);
|
|
142
|
+
|
|
143
|
+
// Cache the result if caching is enabled
|
|
144
|
+
if (cache && cacheKey && result) {
|
|
145
|
+
this.cache.set(cacheKey, result, cacheTTL);
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
return result;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
/**
|
|
152
|
+
* Exponential backoff retry logic with 4xx error handling
|
|
153
|
+
*/
|
|
154
|
+
private async retryWithBackoff<T>(
|
|
155
|
+
fn: () => Promise<T>,
|
|
156
|
+
maxRetries: number = 3,
|
|
157
|
+
baseDelay: number = 1000
|
|
158
|
+
): Promise<T> {
|
|
159
|
+
let lastError: any;
|
|
160
|
+
|
|
161
|
+
for (let attempt = 0; attempt <= maxRetries; attempt++) {
|
|
162
|
+
try {
|
|
163
|
+
return await fn();
|
|
164
|
+
} catch (error: any) {
|
|
165
|
+
lastError = error;
|
|
166
|
+
|
|
167
|
+
// Don't retry on 4xx errors (client errors)
|
|
168
|
+
if (error.response?.status >= 400 && error.response?.status < 500) {
|
|
169
|
+
throw error;
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
// Don't retry on last attempt
|
|
173
|
+
if (attempt === maxRetries) {
|
|
174
|
+
break;
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
// Calculate delay with exponential backoff and jitter
|
|
178
|
+
const delay = baseDelay * Math.pow(2, attempt) + Math.random() * 1000;
|
|
179
|
+
this.logger.debug(`Retry attempt ${attempt + 1}/${maxRetries} after ${delay}ms`);
|
|
180
|
+
await new Promise(resolve => setTimeout(resolve, delay));
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
throw lastError;
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
/**
|
|
188
|
+
* Update request metrics
|
|
189
|
+
*/
|
|
190
|
+
private updateMetrics(success: boolean, duration: number): void {
|
|
191
|
+
this.requestMetrics.totalRequests++;
|
|
192
|
+
if (success) {
|
|
193
|
+
this.requestMetrics.successfulRequests++;
|
|
194
|
+
} else {
|
|
195
|
+
this.requestMetrics.failedRequests++;
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
// Update average response time (exponential moving average)
|
|
199
|
+
const alpha = 0.1; // Smoothing factor
|
|
200
|
+
this.requestMetrics.averageResponseTime =
|
|
201
|
+
this.requestMetrics.averageResponseTime * (1 - alpha) + duration * alpha;
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
/**
|
|
205
|
+
* Get performance metrics
|
|
206
|
+
*/
|
|
207
|
+
getMetrics(): typeof this.requestMetrics {
|
|
208
|
+
return { ...this.requestMetrics };
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
/**
|
|
212
|
+
* Clear request cache
|
|
213
|
+
*/
|
|
214
|
+
clearCache(): void {
|
|
215
|
+
this.cache.clear();
|
|
216
|
+
this.logger.debug('Cache cleared');
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
/**
|
|
220
|
+
* Clear specific cache entry
|
|
221
|
+
*/
|
|
222
|
+
clearCacheEntry(key: string): void {
|
|
223
|
+
this.cache.delete(key);
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
/**
|
|
227
|
+
* Get cache statistics
|
|
228
|
+
*/
|
|
229
|
+
getCacheStats(): { size: number; hits: number; misses: number; hitRate: number } {
|
|
230
|
+
const cacheStats = this.cache.getStats();
|
|
231
|
+
const total = this.requestMetrics.cacheHits + this.requestMetrics.cacheMisses;
|
|
232
|
+
return {
|
|
233
|
+
size: cacheStats.size,
|
|
234
|
+
hits: this.requestMetrics.cacheHits,
|
|
235
|
+
misses: this.requestMetrics.cacheMisses,
|
|
236
|
+
hitRate: total > 0 ? this.requestMetrics.cacheHits / total : 0,
|
|
237
|
+
};
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
|
package/src/core/index.ts
CHANGED
|
@@ -17,6 +17,16 @@ export * from '../models/session';
|
|
|
17
17
|
export { DeviceManager } from '../utils/deviceManager';
|
|
18
18
|
export type { DeviceFingerprint, StoredDeviceInfo } from '../utils/deviceManager';
|
|
19
19
|
|
|
20
|
+
// Export language utilities
|
|
21
|
+
export {
|
|
22
|
+
SUPPORTED_LANGUAGES,
|
|
23
|
+
getLanguageMetadata,
|
|
24
|
+
getLanguageName,
|
|
25
|
+
getNativeLanguageName,
|
|
26
|
+
normalizeLanguageCode
|
|
27
|
+
} from '../utils/languageUtils';
|
|
28
|
+
export type { LanguageMetadata } from '../utils/languageUtils';
|
|
29
|
+
|
|
20
30
|
// Import for default export
|
|
21
31
|
import { OxyServices } from './OxyServices';
|
|
22
32
|
|
package/src/i18n/index.ts
CHANGED
|
@@ -3,6 +3,24 @@
|
|
|
3
3
|
const enUS = require('./locales/en-US.json') as Record<string, any>;
|
|
4
4
|
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
5
5
|
const esES = require('./locales/es-ES.json') as Record<string, any>;
|
|
6
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
7
|
+
const caES = require('./locales/ca-ES.json') as Record<string, any>;
|
|
8
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
9
|
+
const frFR = require('./locales/fr-FR.json') as Record<string, any>;
|
|
10
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
11
|
+
const deDE = require('./locales/de-DE.json') as Record<string, any>;
|
|
12
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
13
|
+
const itIT = require('./locales/it-IT.json') as Record<string, any>;
|
|
14
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
15
|
+
const ptPT = require('./locales/pt-PT.json') as Record<string, any>;
|
|
16
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
17
|
+
const jaJP = require('./locales/ja-JP.json') as Record<string, any>;
|
|
18
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
19
|
+
const koKR = require('./locales/ko-KR.json') as Record<string, any>;
|
|
20
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
21
|
+
const zhCN = require('./locales/zh-CN.json') as Record<string, any>;
|
|
22
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
23
|
+
const arSA = require('./locales/ar-SA.json') as Record<string, any>;
|
|
6
24
|
|
|
7
25
|
export type LocaleDict = Record<string, any>;
|
|
8
26
|
|
|
@@ -11,6 +29,24 @@ const DICTS: Record<string, LocaleDict> = {
|
|
|
11
29
|
'en-US': enUS as LocaleDict,
|
|
12
30
|
'es': esES as LocaleDict,
|
|
13
31
|
'es-ES': esES as LocaleDict,
|
|
32
|
+
'ca': caES as LocaleDict,
|
|
33
|
+
'ca-ES': caES as LocaleDict,
|
|
34
|
+
'fr': frFR as LocaleDict,
|
|
35
|
+
'fr-FR': frFR as LocaleDict,
|
|
36
|
+
'de': deDE as LocaleDict,
|
|
37
|
+
'de-DE': deDE as LocaleDict,
|
|
38
|
+
'it': itIT as LocaleDict,
|
|
39
|
+
'it-IT': itIT as LocaleDict,
|
|
40
|
+
'pt': ptPT as LocaleDict,
|
|
41
|
+
'pt-PT': ptPT as LocaleDict,
|
|
42
|
+
'ja': jaJP as LocaleDict,
|
|
43
|
+
'ja-JP': jaJP as LocaleDict,
|
|
44
|
+
'ko': koKR as LocaleDict,
|
|
45
|
+
'ko-KR': koKR as LocaleDict,
|
|
46
|
+
'zh': zhCN as LocaleDict,
|
|
47
|
+
'zh-CN': zhCN as LocaleDict,
|
|
48
|
+
'ar': arSA as LocaleDict,
|
|
49
|
+
'ar-SA': arSA as LocaleDict,
|
|
14
50
|
};
|
|
15
51
|
|
|
16
52
|
const FALLBACK = 'en-US';
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
{
|
|
2
|
+
"signin": {
|
|
3
|
+
"title": "تسجيل الدخول",
|
|
4
|
+
"subtitle": "سجل الدخول للمتابعة",
|
|
5
|
+
"addAccountTitle": "إضافة حساب آخر",
|
|
6
|
+
"addAccountSubtitle": "تسجيل الدخول بحساب آخر",
|
|
7
|
+
"username": {
|
|
8
|
+
"label": "اسم المستخدم",
|
|
9
|
+
"placeholder": "أدخل اسم المستخدم",
|
|
10
|
+
"helper": "3-30 حرفًا، أحرف وأرقام فقط",
|
|
11
|
+
"required": "يرجى إدخال اسم المستخدم.",
|
|
12
|
+
"minLength": "يجب أن يكون اسم المستخدم 3 أحرف على الأقل."
|
|
13
|
+
},
|
|
14
|
+
"password": {
|
|
15
|
+
"label": "كلمة المرور",
|
|
16
|
+
"placeholder": "أدخل كلمة المرور",
|
|
17
|
+
"required": "يرجى إدخال كلمة المرور.",
|
|
18
|
+
"hint": "أدخل كلمة المرور لتسجيل الدخول"
|
|
19
|
+
},
|
|
20
|
+
"actions": {
|
|
21
|
+
"continue": "متابعة",
|
|
22
|
+
"back": "رجوع",
|
|
23
|
+
"signIn": "تسجيل الدخول",
|
|
24
|
+
"verify": "التحقق",
|
|
25
|
+
"openAccountSwitcher": "التبديل إلى حساب آخر",
|
|
26
|
+
"openAccountSwitcherSubtitle": "{{count}} حسابات أخرى متاحة",
|
|
27
|
+
"openAccountSwitcherSubtitle_singular": "حساب آخر واحد متاح",
|
|
28
|
+
"openAccountSwitcherSubtitle_zero": "راجع حساباتك المحفوظة",
|
|
29
|
+
"manageAccounts": "إدارة الحسابات المحفوظة",
|
|
30
|
+
"manageAccountsSubtitle": "مراجعة الجلسات أو إزالتها أو تسجيل الخروج",
|
|
31
|
+
"loadingOtherAccounts": "جاري تحميل الحسابات الأخرى…",
|
|
32
|
+
"switchAccountFailed": "لم نتمكن من التبديل بين الحسابات. يرجى المحاولة مرة أخرى."
|
|
33
|
+
},
|
|
34
|
+
"forgotPrompt": "نسيت كلمة المرور؟",
|
|
35
|
+
"security": {
|
|
36
|
+
"dataSecure": "بياناتك مشفرة وآمنة"
|
|
37
|
+
},
|
|
38
|
+
"currentlySignedInAs": "مسجل الدخول حاليًا كـ",
|
|
39
|
+
"alreadySignedInWith": "مسجل الدخول بالفعل بـ",
|
|
40
|
+
"alreadySignedIn": "مسجل الدخول بالفعل",
|
|
41
|
+
"alreadySignedInMessage": "هذا الحساب مسجل الدخول بالفعل. المتابعة بهذا الحساب؟",
|
|
42
|
+
"continueWithAccount": "متابعة",
|
|
43
|
+
"currentAccount": "الحالي",
|
|
44
|
+
"or": "أو",
|
|
45
|
+
"viewAllAccounts": "عرض {{count}} المزيد",
|
|
46
|
+
"status": {
|
|
47
|
+
"accountSwitched": "استخدام {{name}} الآن"
|
|
48
|
+
},
|
|
49
|
+
"totp": {
|
|
50
|
+
"title": "رمز المصادقة الثنائية",
|
|
51
|
+
"subtitle": "أدخل الرمز المكون من 6 أرقام من تطبيق المصادقة الخاص بك لـ @{{username}}",
|
|
52
|
+
"invalidCode": "رمز غير صالح. يرجى المحاولة مرة أخرى.",
|
|
53
|
+
"noAccess": "لا يمكن الوصول إلى تطبيق المصادقة؟",
|
|
54
|
+
"useBackupCode": "استخدام رمز النسخ الاحتياطي",
|
|
55
|
+
"useRecoveryKey": "استخدام مفتاح الاسترداد"
|
|
56
|
+
}
|
|
57
|
+
},
|
|
58
|
+
"signup": {
|
|
59
|
+
"welcome": {
|
|
60
|
+
"title": "مرحبًا بك في Oxy!",
|
|
61
|
+
"subtitle": "أنشئ حسابك في خطوات قليلة",
|
|
62
|
+
"haveAccount": "لديك حساب بالفعل؟",
|
|
63
|
+
"signInCta": "تسجيل الدخول"
|
|
64
|
+
},
|
|
65
|
+
"identity": {
|
|
66
|
+
"title": "من أنت؟",
|
|
67
|
+
"subtitle": "اختر اسم المستخدم وأدخل بريدك الإلكتروني"
|
|
68
|
+
},
|
|
69
|
+
"username": {
|
|
70
|
+
"helper": "3-30 حرفًا، أحرف وأرقام فقط",
|
|
71
|
+
"required": "يرجى إدخال اسم مستخدم",
|
|
72
|
+
"minLength": "يجب أن يكون اسم المستخدم 3 أحرف على الأقل"
|
|
73
|
+
},
|
|
74
|
+
"email": {
|
|
75
|
+
"required": "يرجى إدخال عنوان بريد إلكتروني",
|
|
76
|
+
"invalid": "يرجى إدخال عنوان بريد إلكتروني صالح",
|
|
77
|
+
"helper": "لن نشارك بريدك الإلكتروني أبدًا"
|
|
78
|
+
},
|
|
79
|
+
"security": {
|
|
80
|
+
"title": "أمّن حسابك",
|
|
81
|
+
"subtitle": "أنشئ كلمة مرور قوية لحماية حسابك"
|
|
82
|
+
},
|
|
83
|
+
"password": {
|
|
84
|
+
"helper": "8 أحرف على الأقل",
|
|
85
|
+
"required": "يرجى إدخال كلمة مرور",
|
|
86
|
+
"minLength": "يجب أن تكون كلمة المرور 8 أحرف على الأقل",
|
|
87
|
+
"confirmRequired": "يرجى تأكيد كلمة المرور",
|
|
88
|
+
"mismatch": "كلمات المرور غير متطابقة",
|
|
89
|
+
"confirmHint": "أعد إدخال كلمة المرور للتأكيد"
|
|
90
|
+
},
|
|
91
|
+
"summary": {
|
|
92
|
+
"title": "أوشكت على الانتهاء!",
|
|
93
|
+
"subtitle": "راجع معلوماتك وأنشئ حسابك",
|
|
94
|
+
"sectionTitle": "معلومات الحساب",
|
|
95
|
+
"fields": {
|
|
96
|
+
"username": "اسم المستخدم",
|
|
97
|
+
"email": "البريد الإلكتروني",
|
|
98
|
+
"password": "كلمة المرور"
|
|
99
|
+
},
|
|
100
|
+
"notSet": "غير محدد",
|
|
101
|
+
"securityTip": "لمزيد من الأمان، قم بتمكين المصادقة الثنائية (TOTP) من إعدادات الحساب بعد إنشاء حسابك.",
|
|
102
|
+
"legalReminder": "بإنشاء حساب، فإنك توافق على شروط الخدمة وسياسة الخصوصية الخاصة بنا."
|
|
103
|
+
}
|
|
104
|
+
},
|
|
105
|
+
"common": {
|
|
106
|
+
"actions": {
|
|
107
|
+
"back": "رجوع",
|
|
108
|
+
"continue": "متابعة",
|
|
109
|
+
"next": "التالي",
|
|
110
|
+
"getStarted": "ابدأ",
|
|
111
|
+
"createAccount": "إنشاء حساب",
|
|
112
|
+
"signIn": "تسجيل الدخول",
|
|
113
|
+
"verify": "التحقق",
|
|
114
|
+
"resetPassword": "إعادة تعيين كلمة المرور"
|
|
115
|
+
},
|
|
116
|
+
"links": {
|
|
117
|
+
"recoverAccount": "استعادة حسابك",
|
|
118
|
+
"signUp": "التسجيل"
|
|
119
|
+
},
|
|
120
|
+
"labels": {
|
|
121
|
+
"username": "اسم المستخدم",
|
|
122
|
+
"email": "البريد الإلكتروني",
|
|
123
|
+
"password": "كلمة المرور",
|
|
124
|
+
"confirmPassword": "تأكيد كلمة المرور"
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
{
|
|
2
|
+
"signin": {
|
|
3
|
+
"title": "Iniciar sessió",
|
|
4
|
+
"subtitle": "Inicia sessió per continuar",
|
|
5
|
+
"addAccountTitle": "Afegir un altre compte",
|
|
6
|
+
"addAccountSubtitle": "Inicia sessió amb un altre compte",
|
|
7
|
+
"username": {
|
|
8
|
+
"label": "Nom d'usuari",
|
|
9
|
+
"placeholder": "Introdueix el teu nom d'usuari",
|
|
10
|
+
"helper": "3-30 caràcters, només lletres i números",
|
|
11
|
+
"required": "Si us plau, introdueix el teu nom d'usuari.",
|
|
12
|
+
"minLength": "El nom d'usuari ha de tenir almenys 3 caràcters."
|
|
13
|
+
},
|
|
14
|
+
"password": {
|
|
15
|
+
"label": "Contrasenya",
|
|
16
|
+
"placeholder": "Introdueix la teva contrasenya",
|
|
17
|
+
"required": "Si us plau, introdueix la teva contrasenya.",
|
|
18
|
+
"hint": "Introdueix la teva contrasenya per iniciar sessió"
|
|
19
|
+
},
|
|
20
|
+
"actions": {
|
|
21
|
+
"continue": "Continuar",
|
|
22
|
+
"back": "Enrere",
|
|
23
|
+
"signIn": "Iniciar sessió",
|
|
24
|
+
"verify": "Verificar",
|
|
25
|
+
"openAccountSwitcher": "Canviar a un altre compte",
|
|
26
|
+
"openAccountSwitcherSubtitle": "{{count}} altres comptes disponibles",
|
|
27
|
+
"openAccountSwitcherSubtitle_singular": "1 altre compte disponible",
|
|
28
|
+
"openAccountSwitcherSubtitle_zero": "Revisa els teus comptes guardats",
|
|
29
|
+
"manageAccounts": "Gestionar comptes guardats",
|
|
30
|
+
"manageAccountsSubtitle": "Revisar sessions, eliminar o tancar sessió",
|
|
31
|
+
"loadingOtherAccounts": "Carregant altres comptes…",
|
|
32
|
+
"switchAccountFailed": "No hem pogut canviar de compte. Torna-ho a intentar."
|
|
33
|
+
},
|
|
34
|
+
"forgotPrompt": "Has oblidat la teva contrasenya?",
|
|
35
|
+
"security": {
|
|
36
|
+
"dataSecure": "Les teves dades estan xifrades i segures"
|
|
37
|
+
},
|
|
38
|
+
"currentlySignedInAs": "Actualment has iniciat sessió com",
|
|
39
|
+
"alreadySignedInWith": "Ja has iniciat sessió amb",
|
|
40
|
+
"alreadySignedIn": "Ja has iniciat sessió",
|
|
41
|
+
"alreadySignedInMessage": "Aquest compte ja ha iniciat sessió. Continuar amb aquest compte?",
|
|
42
|
+
"continueWithAccount": "Continuar",
|
|
43
|
+
"currentAccount": "Actual",
|
|
44
|
+
"or": "o",
|
|
45
|
+
"viewAllAccounts": "Veure {{count}} més",
|
|
46
|
+
"status": {
|
|
47
|
+
"accountSwitched": "Ara utilitzant {{name}}"
|
|
48
|
+
},
|
|
49
|
+
"totp": {
|
|
50
|
+
"title": "Codi de dos factors",
|
|
51
|
+
"subtitle": "Introdueix el codi de 6 dígits de la teva app autenticadora per @{{username}}",
|
|
52
|
+
"invalidCode": "Codi invàlid. Torna-ho a intentar.",
|
|
53
|
+
"noAccess": "Sense accés al teu autenticador?",
|
|
54
|
+
"useBackupCode": "Utilitzar codi de còpia de seguretat",
|
|
55
|
+
"useRecoveryKey": "Utilitzar clau de recuperació"
|
|
56
|
+
}
|
|
57
|
+
},
|
|
58
|
+
"signup": {
|
|
59
|
+
"welcome": {
|
|
60
|
+
"title": "Benvingut a Oxy!",
|
|
61
|
+
"subtitle": "Crea el teu compte en pocs passos",
|
|
62
|
+
"haveAccount": "Ja tens un compte?",
|
|
63
|
+
"signInCta": "Inicia sessió"
|
|
64
|
+
},
|
|
65
|
+
"identity": {
|
|
66
|
+
"title": "Qui ets?",
|
|
67
|
+
"subtitle": "Tria el teu nom d'usuari i introdueix el teu correu"
|
|
68
|
+
},
|
|
69
|
+
"username": {
|
|
70
|
+
"helper": "3-30 caràcters, només lletres i números",
|
|
71
|
+
"required": "Si us plau, introdueix un nom d'usuari",
|
|
72
|
+
"minLength": "El nom d'usuari ha de tenir almenys 3 caràcters"
|
|
73
|
+
},
|
|
74
|
+
"email": {
|
|
75
|
+
"required": "Si us plau, introdueix una adreça de correu electrònic",
|
|
76
|
+
"invalid": "Si us plau, introdueix una adreça de correu electrònic vàlida",
|
|
77
|
+
"helper": "Mai compartirem el teu correu"
|
|
78
|
+
},
|
|
79
|
+
"security": {
|
|
80
|
+
"title": "Protegeix el teu compte",
|
|
81
|
+
"subtitle": "Crea una contrasenya forta per protegir el teu compte"
|
|
82
|
+
},
|
|
83
|
+
"password": {
|
|
84
|
+
"helper": "Almenys 8 caràcters",
|
|
85
|
+
"required": "Si us plau, introdueix una contrasenya",
|
|
86
|
+
"minLength": "La contrasenya ha de tenir almenys 8 caràcters",
|
|
87
|
+
"confirmRequired": "Si us plau, confirma la teva contrasenya",
|
|
88
|
+
"mismatch": "Les contrasenyes no coincideixen",
|
|
89
|
+
"confirmHint": "Torna a introduir la teva contrasenya per confirmar"
|
|
90
|
+
},
|
|
91
|
+
"summary": {
|
|
92
|
+
"title": "Gairebé allà!",
|
|
93
|
+
"subtitle": "Revisa la teva informació i crea el teu compte",
|
|
94
|
+
"sectionTitle": "Informació del compte",
|
|
95
|
+
"fields": {
|
|
96
|
+
"username": "Nom d'usuari",
|
|
97
|
+
"email": "Correu electrònic",
|
|
98
|
+
"password": "Contrasenya"
|
|
99
|
+
},
|
|
100
|
+
"notSet": "No definit",
|
|
101
|
+
"securityTip": "Per a una major seguretat, habilita l'Autenticació de Dos Factors (TOTP) des de Configuració del compte després de crear el teu compte.",
|
|
102
|
+
"legalReminder": "En crear un compte, acceptes els nostres Termes de servei i Política de privacitat."
|
|
103
|
+
}
|
|
104
|
+
},
|
|
105
|
+
"common": {
|
|
106
|
+
"actions": {
|
|
107
|
+
"back": "Enrere",
|
|
108
|
+
"continue": "Continuar",
|
|
109
|
+
"next": "Següent",
|
|
110
|
+
"getStarted": "Començar",
|
|
111
|
+
"createAccount": "Crear compte",
|
|
112
|
+
"signIn": "Iniciar sessió",
|
|
113
|
+
"verify": "Verificar",
|
|
114
|
+
"resetPassword": "Restablir contrasenya"
|
|
115
|
+
},
|
|
116
|
+
"links": {
|
|
117
|
+
"recoverAccount": "Recuperar el teu compte",
|
|
118
|
+
"signUp": "Registrar-se"
|
|
119
|
+
},
|
|
120
|
+
"labels": {
|
|
121
|
+
"username": "Nom d'usuari",
|
|
122
|
+
"email": "Correu electrònic",
|
|
123
|
+
"password": "Contrasenya",
|
|
124
|
+
"confirmPassword": "Confirmar contrasenya"
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
|