@vertesia/ui 1.5.0-dev.20260804.124748Z → 1.5.0-dev.20260807.073259Z
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/lib/core/components/ComboBox.d.ts.map +1 -1
- package/lib/core/components/ComboBox.js +4 -4
- package/lib/core/components/ComboBox.js.map +1 -1
- package/lib/core/components/FileUpload.js.map +1 -1
- package/lib/core/components/MenuList.d.ts +2 -1
- package/lib/core/components/MenuList.d.ts.map +1 -1
- package/lib/core/components/TagsInput.js +1 -1
- package/lib/core/components/popup/PopupController.d.ts.map +1 -1
- package/lib/core/components/popup/PopupController.js.map +1 -1
- package/lib/core/components/popup/position.js.map +1 -1
- package/lib/core/components/popup/utils.js.map +1 -1
- package/lib/core/components/shadcn/LanguageSwitcher.js.map +1 -1
- package/lib/core/components/shadcn/MessageBox.js.map +1 -1
- package/lib/core/components/shadcn/Panel.js +1 -1
- package/lib/core/components/shadcn/badge.d.ts +2 -2
- package/lib/core/components/shadcn/button.d.ts +2 -2
- package/lib/core/components/shadcn/button.js +1 -1
- package/lib/core/components/shadcn/command.d.ts +4 -4
- package/lib/core/components/shadcn/command.d.ts.map +1 -1
- package/lib/core/components/shadcn/filters/DynamicLabel.js +1 -1
- package/lib/core/components/shadcn/filters/comboBox/DateCombobox.d.ts.map +1 -1
- package/lib/core/components/shadcn/filters/comboBox/DateCombobox.js +1 -1
- package/lib/core/components/shadcn/filters/comboBox/SelectCombobox.d.ts.map +1 -1
- package/lib/core/components/shadcn/filters/comboBox/SelectCombobox.js +1 -1
- package/lib/core/components/shadcn/filters/comboBox/StringListCombobox.d.ts.map +1 -1
- package/lib/core/components/shadcn/filters/comboBox/TextCombobox.d.ts.map +1 -1
- package/lib/core/components/shadcn/filters/filter/dateFilter.js +1 -1
- package/lib/core/components/shadcn/filters/filterBar.d.ts.map +1 -1
- package/lib/core/components/shadcn/filters/filters.js.map +1 -1
- package/lib/core/components/shadcn/input.d.ts +2 -2
- package/lib/core/components/shadcn/modal/dialog.d.ts.map +1 -1
- package/lib/core/components/shadcn/popover.d.ts +1 -1
- package/lib/core/components/shadcn/popover.d.ts.map +1 -1
- package/lib/core/components/shadcn/popover.js.map +1 -1
- package/lib/core/components/shadcn/radioGroup.d.ts.map +1 -1
- package/lib/core/components/shadcn/selectBox.js +1 -1
- package/lib/core/components/shadcn/tabs.d.ts.map +1 -1
- package/lib/core/components/shadcn/tabs.js +1 -1
- package/lib/core/components/shadcn/text.d.ts +2 -2
- package/lib/core/components/shadcn/theme/ThemeSwitcher.js.map +1 -1
- package/lib/core/components/toast/ToastProvider.js +1 -1
- package/lib/core/hooks/CompositeState.d.ts +1 -1
- package/lib/core/hooks/CompositeState.d.ts.map +1 -1
- package/lib/core/hooks/CompositeState.js.map +1 -1
- package/lib/core/hooks/SharedState.d.ts.map +1 -1
- package/lib/core/hooks/useFetch.d.ts.map +1 -1
- package/lib/core/hooks/useFetch.js +2 -1
- package/lib/core/hooks/useFetch.js.map +1 -1
- package/lib/core/hooks/useFlag.d.ts.map +1 -1
- package/lib/core/hooks/useIntersectionObserver.js.map +1 -1
- package/lib/core/hooks/useSafeLayoutEffect.d.ts +2 -2
- package/lib/core/hooks/useSafeLayoutEffect.d.ts.map +1 -1
- package/lib/core/hooks/useScrollableSearch.js.map +1 -1
- package/lib/core/hooks/useSharedValue.d.ts.map +1 -1
- package/lib/core/hooks/useSharedValue.js.map +1 -1
- package/lib/core/utils/a11y.d.ts.map +1 -1
- package/lib/env/index.d.ts.map +1 -1
- package/lib/env/index.js.map +1 -1
- package/lib/features/agent/PayloadBuilder.d.ts +1 -1
- package/lib/features/agent/PayloadBuilder.d.ts.map +1 -1
- package/lib/features/agent/PayloadBuilder.js.map +1 -1
- package/lib/features/agent/chat/ArtifactsTab.js +1 -1
- package/lib/features/agent/chat/AskUserWidget.js +1 -1
- package/lib/features/agent/chat/DocumentEditingActionCard.js +1 -1
- package/lib/features/agent/chat/ModernAgentConversation.d.ts.map +1 -1
- package/lib/features/agent/chat/ModernAgentConversation.js +26 -3
- package/lib/features/agent/chat/ModernAgentConversation.js.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/ActiveWorkstreamsSummary.js +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/AgentMarkdownAnchor.d.ts.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/AgentMarkdownAnchor.js.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/AllMessagesMixed.d.ts.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/AllMessagesMixed.js +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/AttachmentPreview.d.ts +7 -0
- package/lib/features/agent/chat/ModernAgentOutput/AttachmentPreview.d.ts.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/AttachmentPreview.js +25 -0
- package/lib/features/agent/chat/ModernAgentOutput/AttachmentPreview.js.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/BatchProgressPanel.d.ts.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/InlineSlidingPlanPanel.d.ts.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/MessageItem.d.ts.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/ResourceChip.js +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/SlideInPanel.js +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/StreamingMessage.d.ts.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/SummaryConversation.d.ts.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/SummaryConversation.js +8 -0
- package/lib/features/agent/chat/ModernAgentOutput/SummaryConversation.js.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/ToolCallGroup.d.ts.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/ToolCallGroup.js +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/WorkstreamTabs.js +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/utils.d.ts.map +1 -1
- package/lib/features/agent/chat/SlidingThinkingIndicator.js +1 -1
- package/lib/features/agent/chat/VegaLiteChart.js +1 -1
- package/lib/features/agent/chat/VegaLiteChart.js.map +1 -1
- package/lib/features/agent/chat/hooks/useAgentStream.d.ts.map +1 -1
- package/lib/features/agent/chat/hooks/useAgentStream.js +26 -0
- package/lib/features/agent/chat/hooks/useAgentStream.js.map +1 -1
- package/lib/features/agent/chat/hooks/useFileProcessing.d.ts +8 -1
- package/lib/features/agent/chat/hooks/useFileProcessing.d.ts.map +1 -1
- package/lib/features/agent/chat/hooks/useFileProcessing.js +31 -2
- package/lib/features/agent/chat/hooks/useFileProcessing.js.map +1 -1
- package/lib/features/agent/chat/useArtifactUrlCache.js.map +1 -1
- package/lib/features/agent/chat/workstreams.d.ts +1 -1
- package/lib/features/facets/AgentRunnerFacetsNav.d.ts.map +1 -1
- package/lib/features/facets/CollectionsFacetsNav.d.ts.map +1 -1
- package/lib/features/facets/DocumentsFacetsNav.d.ts.map +1 -1
- package/lib/features/facets/InteractionsFacetsNav.d.ts.map +1 -1
- package/lib/features/facets/PromptsFacetsNav.d.ts.map +1 -1
- package/lib/features/facets/RunsFacetsNav.d.ts.map +1 -1
- package/lib/features/facets/WorkflowExecutionsFacetsNav.d.ts.map +1 -1
- package/lib/features/magic-pdf/GroundedExtractionView.js +1 -1
- package/lib/features/magic-pdf/MagicPdfProvider.d.ts.map +1 -1
- package/lib/features/magic-pdf/MagicPdfProvider.js.map +1 -1
- package/lib/features/oauth/McpConnectionsButton.js +1 -1
- package/lib/features/oauth/OAuthProviderConnectButton.js +1 -1
- package/lib/features/oauth/RemoteMcpConnectionButton.js +1 -1
- package/lib/features/pdf-viewer/PdfPageRenderer.js +1 -1
- package/lib/features/pdf-viewer/PdfPageSlider.js +1 -1
- package/lib/features/permissions/UserPermissionsProvider.d.ts.map +1 -1
- package/lib/features/permissions/UserPermissionsProvider.js.map +1 -1
- package/lib/features/store/collections/CollectionsTable.js +2 -2
- package/lib/features/store/collections/CollectionsTable.js.map +1 -1
- package/lib/features/store/collections/CreateCollection.js +1 -1
- package/lib/features/store/collections/EditCollectionView.js +1 -1
- package/lib/features/store/objects/DocumentQuickFilter.js +1 -1
- package/lib/features/store/objects/DocumentSelectionProvider.d.ts.map +1 -1
- package/lib/features/store/objects/DocumentSelectionProvider.js.map +1 -1
- package/lib/features/store/objects/components/ContentDispositionButton.d.ts +2 -1
- package/lib/features/store/objects/components/ContentDispositionButton.d.ts.map +1 -1
- package/lib/features/store/objects/components/ContentOverview.js +1 -1
- package/lib/features/store/objects/components/DocumentEditingPanel.js +1 -1
- package/lib/features/store/objects/components/PropertiesEditorModal.js +1 -1
- package/lib/features/store/objects/components/TextEditorPanel.js +1 -1
- package/lib/features/store/objects/components/documentEditingTarget.d.ts.map +1 -1
- package/lib/features/store/objects/components/useContentPanelHooks.d.ts +2 -2
- package/lib/features/store/objects/components/useContentPanelHooks.d.ts.map +1 -1
- package/lib/features/store/objects/layout/DocumentTableColumn.d.ts +1 -1
- package/lib/features/store/objects/layout/DocumentTableColumn.d.ts.map +1 -1
- package/lib/features/store/objects/layout/DocumentTableColumn.js.map +1 -1
- package/lib/features/store/objects/layout/documentLayout.js +1 -1
- package/lib/features/store/objects/layout/renderers.d.ts.map +1 -1
- package/lib/features/store/objects/search/DocumentSearchContext.d.ts +25 -25
- package/lib/features/store/objects/search/DocumentSearchContext.d.ts.map +1 -1
- package/lib/features/store/objects/search/DocumentSearchContext.js.map +1 -1
- package/lib/features/store/objects/selection/ObjectsActionContextClass.d.ts.map +1 -1
- package/lib/features/store/objects/selection/ObjectsActionContextClass.js.map +1 -1
- package/lib/features/store/objects/selection/SelectionActions.js +1 -1
- package/lib/features/store/objects/selection/actions/ConfirmAction.js +1 -1
- package/lib/features/store/objects/selection/actions/DeleteObjectsAction.js +1 -1
- package/lib/features/store/objects/selection/actions/StartWorkflowButton.js +1 -1
- package/lib/features/store/objects/upload/DocumentUploadModal.js +1 -1
- package/lib/features/store/objects/upload/useSmartFileUploadProcessing.d.ts.map +1 -1
- package/lib/features/store/objects/upload/useUploadHandler.d.ts.map +1 -1
- package/lib/features/store/types/ContentObjectTypesSearch.js +1 -1
- package/lib/features/store/types/IntakePolicyEditor.js +1 -1
- package/lib/features/store/types/TypeRegistry.d.ts +240 -180
- package/lib/features/store/types/TypeRegistry.d.ts.map +1 -1
- package/lib/features/store/types/TypeRegistry.js.map +1 -1
- package/lib/features/store/types/search/ObjectTypeSearchContext.d.ts +239 -179
- package/lib/features/store/types/search/ObjectTypeSearchContext.d.ts.map +1 -1
- package/lib/features/store/types/search/ObjectTypeSearchContext.js.map +1 -1
- package/lib/features/user/UserInfo.d.ts +14 -14
- package/lib/features/user/UserInfo.js +1 -1
- package/lib/features/user/UserInfo.js.map +1 -1
- package/lib/features/utils/mimeType.d.ts.map +1 -1
- package/lib/features/utils/rendition.js.map +1 -1
- package/lib/features/utils/text.js.map +1 -1
- package/lib/i18n/locales/ar.json +25 -0
- package/lib/i18n/locales/de.json +25 -0
- package/lib/i18n/locales/en.json +25 -0
- package/lib/i18n/locales/es.json +25 -0
- package/lib/i18n/locales/fr.json +25 -0
- package/lib/i18n/locales/it.json +25 -0
- package/lib/i18n/locales/ja.json +25 -0
- package/lib/i18n/locales/ko.json +25 -0
- package/lib/i18n/locales/pt.json +25 -0
- package/lib/i18n/locales/ru.json +25 -0
- package/lib/i18n/locales/tr.json +25 -0
- package/lib/i18n/locales/zh-TW.json +25 -0
- package/lib/i18n/locales/zh.json +25 -0
- package/lib/i18n/rtl.d.ts +1 -1
- package/lib/i18n/rtl.d.ts.map +1 -1
- package/lib/layout/FullHeightLayout.d.ts +7 -6
- package/lib/layout/FullHeightLayout.d.ts.map +1 -1
- package/lib/layout/Sidebar.d.ts +1 -1
- package/lib/layout/Sidebar.js +1 -1
- package/lib/rich-text/EditorToolbar.js +1 -1
- package/lib/router/HistoryNavigator.d.ts +2 -2
- package/lib/router/HistoryNavigator.d.ts.map +1 -1
- package/lib/router/HistoryNavigator.js.map +1 -1
- package/lib/router/PathMatcher.d.ts.map +1 -1
- package/lib/router/PathMatcher.js.map +1 -1
- package/lib/router/PathWithParams.d.ts.map +1 -1
- package/lib/router/Redirect.js.map +1 -1
- package/lib/router/Route404.js +1 -1
- package/lib/router/Router.d.ts.map +1 -1
- package/lib/router/Router.js.map +1 -1
- package/lib/session/UserSession.d.ts +1 -1
- package/lib/session/UserSession.d.ts.map +1 -1
- package/lib/session/UserSession.js.map +1 -1
- package/lib/session/UserSessionProvider.d.ts +2 -0
- package/lib/session/UserSessionProvider.d.ts.map +1 -1
- package/lib/session/UserSessionProvider.js +81 -53
- package/lib/session/UserSessionProvider.js.map +1 -1
- package/lib/session/auth/composable.d.ts +49 -1
- package/lib/session/auth/composable.d.ts.map +1 -1
- package/lib/session/auth/composable.js +179 -53
- package/lib/session/auth/composable.js.map +1 -1
- package/lib/shell/VertesiaShell.js +1 -1
- package/lib/shell/apps/AppInstallationProvider.d.ts +58 -50
- package/lib/shell/apps/AppInstallationProvider.d.ts.map +1 -1
- package/lib/shell/apps/AppProjectSelector.js +1 -1
- package/lib/shell/login/SignInEmailStep.js +1 -1
- package/lib/shell/login/SignInPrimitives.d.ts +21 -20
- package/lib/shell/login/SignInPrimitives.d.ts.map +1 -1
- package/lib/shell/login/SignInPrimitives.js.map +1 -1
- package/lib/shell/login/SignInRecoveryStep.d.ts +22 -0
- package/lib/shell/login/SignInRecoveryStep.d.ts.map +1 -0
- package/lib/shell/login/SignInRecoveryStep.js +59 -0
- package/lib/shell/login/SignInRecoveryStep.js.map +1 -0
- package/lib/shell/login/SigninScreen.d.ts.map +1 -1
- package/lib/shell/login/SigninScreen.js +84 -11
- package/lib/shell/login/SigninScreen.js.map +1 -1
- package/lib/shell/login/SignupForm.js +1 -1
- package/lib/shell/login/TerminalLogin.js +1 -1
- package/lib/shell/login/UserSessionMenu.js +1 -1
- package/lib/vertesia-ui-core.js.map +1 -1
- package/lib/vertesia-ui-features.js +26 -26
- package/lib/vertesia-ui-features.js.map +1 -1
- package/lib/vertesia-ui-i18n.js +13 -13
- package/lib/vertesia-ui-layout.js.map +1 -1
- package/lib/vertesia-ui-rich-text.js.map +1 -1
- package/lib/vertesia-ui-router.js.map +1 -1
- package/lib/vertesia-ui-session.js +1 -1
- package/lib/vertesia-ui-session.js.map +1 -1
- package/lib/vertesia-ui-shell.js +1 -1
- package/lib/vertesia-ui-shell.js.map +1 -1
- package/lib/vertesia-ui-widgets.js.map +1 -1
- package/lib/widgets/form/FormContext.d.ts.map +1 -1
- package/lib/widgets/form/FormContext.js.map +1 -1
- package/lib/widgets/form/ManagedObject.d.ts +2 -2
- package/lib/widgets/form/ManagedObject.d.ts.map +1 -1
- package/lib/widgets/form/ManagedObject.js.map +1 -1
- package/lib/widgets/form/schema.d.ts.map +1 -1
- package/lib/widgets/form/schema.js.map +1 -1
- package/lib/widgets/json-view/JSONCode.js +1 -1
- package/lib/widgets/json-view/JSONTable.js +1 -1
- package/lib/widgets/markdown/ArtifactContentRenderer.js.map +1 -1
- package/lib/widgets/markdown/CodeBlockPlaceholder.d.ts +1 -1
- package/lib/widgets/markdown/CodeBlockPlaceholder.d.ts.map +1 -1
- package/lib/widgets/markdown/CodeBlockPlaceholder.js +1 -1
- package/lib/widgets/markdown/CodeBlockRendering.d.ts.map +1 -1
- package/lib/widgets/markdown/CollaborativeMarkdownRenderer.js +1 -1
- package/lib/widgets/markdown/remarkDirectiveHandler.d.ts.map +1 -1
- package/lib/widgets/markdown/textDiff.js.map +1 -1
- package/lib/widgets/monacoEditor/MonacoEditor.d.ts.map +1 -1
- package/lib/widgets/monacoEditor/MonacoEditor.js.map +1 -1
- package/lib/widgets/schema-editor/ManagedSchema.d.ts.map +1 -1
- package/lib/widgets/schema-editor/editor/PropertyEditor.js +1 -1
- package/lib/widgets/schema-editor/json-schema4-utils.js.map +1 -1
- package/lib/widgets/xml-viewer/components/Elements/index.js +1 -1
- package/lib/widgets/xml-viewer/components/Tag/index.js +1 -1
- package/lib/widgets/xml-viewer/constants/index.d.ts.map +1 -1
- package/lib/widgets/xml-viewer/helpers/index.d.ts +1 -1
- package/lib/widgets/xml-viewer/hooks/useCollapsible.d.ts +1 -1
- package/lib/widgets/xml-viewer/hooks/useCollapsible.d.ts.map +1 -1
- package/package.json +11 -11
- package/src/core/hooks/useFetch.ts +2 -1
- package/src/features/agent/chat/ModernAgentConversation.test.tsx +13 -0
- package/src/features/agent/chat/ModernAgentConversation.tsx +24 -3
- package/src/features/agent/chat/ModernAgentOutput/AttachmentPreview.test.ts +38 -0
- package/src/features/agent/chat/ModernAgentOutput/AttachmentPreview.tsx +26 -0
- package/src/features/agent/chat/ModernAgentOutput/SummaryConversation.ts +9 -0
- package/src/features/agent/chat/ModernAgentOutput/utils.test.ts +21 -0
- package/src/features/agent/chat/hooks/useAgentStream.test.tsx +116 -1
- package/src/features/agent/chat/hooks/useAgentStream.ts +26 -0
- package/src/features/agent/chat/hooks/useFileProcessing.test.tsx +87 -0
- package/src/features/agent/chat/hooks/useFileProcessing.ts +32 -1
- package/src/features/store/collections/CollectionsTable.tsx +1 -1
- package/src/i18n/locales/ar.json +25 -0
- package/src/i18n/locales/de.json +25 -0
- package/src/i18n/locales/en.json +25 -0
- package/src/i18n/locales/es.json +25 -0
- package/src/i18n/locales/fr.json +25 -0
- package/src/i18n/locales/it.json +25 -0
- package/src/i18n/locales/ja.json +25 -0
- package/src/i18n/locales/ko.json +25 -0
- package/src/i18n/locales/pt.json +25 -0
- package/src/i18n/locales/ru.json +25 -0
- package/src/i18n/locales/tr.json +25 -0
- package/src/i18n/locales/zh-TW.json +25 -0
- package/src/i18n/locales/zh.json +25 -0
- package/src/session/UserSessionProvider.test.ts +69 -0
- package/src/session/UserSessionProvider.tsx +96 -60
- package/src/session/auth/composable.scope.test.ts +88 -0
- package/src/session/auth/composable.test.ts +205 -0
- package/src/session/auth/composable.ts +227 -58
- package/src/shell/login/SignInPrimitives.tsx +1 -0
- package/src/shell/login/SignInRecoveryStep.test.tsx +112 -0
- package/src/shell/login/SignInRecoveryStep.tsx +177 -0
- package/src/shell/login/SigninScreen.tsx +145 -27
package/src/i18n/locales/es.json
CHANGED
|
@@ -246,6 +246,31 @@
|
|
|
246
246
|
"auth.providers.bodyConsumer": "Elige uno de los siguientes proveedores para continuar.",
|
|
247
247
|
"auth.providers.eyebrow": "Elige cómo iniciar sesión",
|
|
248
248
|
"auth.providers.title": "Un paso más",
|
|
249
|
+
"auth.recovery.continue": "Continuar a Vertesia",
|
|
250
|
+
"auth.recovery.credential.body": "No pudimos verificar tu inicio de sesión. Inicia sesión de nuevo para continuar.",
|
|
251
|
+
"auth.recovery.credential.eyebrow": "Inicio de sesión requerido",
|
|
252
|
+
"auth.recovery.credential.title": "No se pudo verificar tu inicio de sesión",
|
|
253
|
+
"auth.recovery.errorCode": "Código de error",
|
|
254
|
+
"auth.recovery.errorMessage": "Mensaje de error",
|
|
255
|
+
"auth.recovery.httpStatus": "Estado HTTP",
|
|
256
|
+
"auth.recovery.noAccessibleAccount.body": "Has iniciado sesión, pero no hay ninguna cuenta de Vertesia disponible para esta identidad.",
|
|
257
|
+
"auth.recovery.noAccessibleAccount.eyebrow": "Cuenta requerida",
|
|
258
|
+
"auth.recovery.noAccessibleAccount.title": "No hay ninguna cuenta disponible",
|
|
259
|
+
"auth.recovery.requestedAccount": "Cuenta solicitada",
|
|
260
|
+
"auth.recovery.requestedProject": "Proyecto solicitado",
|
|
261
|
+
"auth.recovery.scopeAccount.body": "Has iniciado sesión, pero la cuenta de este enlace no está disponible. Puede que el enlace esté desactualizado o que no tengas acceso.",
|
|
262
|
+
"auth.recovery.scopeAccount.eyebrow": "Enlace no disponible",
|
|
263
|
+
"auth.recovery.scopeAccount.title": "Cuenta no disponible",
|
|
264
|
+
"auth.recovery.scopeProject.body": "Has iniciado sesión, pero el proyecto de este enlace no está disponible. Puede que el enlace esté desactualizado o que no tengas acceso.",
|
|
265
|
+
"auth.recovery.scopeProject.eyebrow": "Enlace no disponible",
|
|
266
|
+
"auth.recovery.scopeProject.title": "Proyecto no disponible",
|
|
267
|
+
"auth.recovery.service.body": "El servicio de autenticación no está disponible temporalmente. Inténtalo de nuevo o usa otra cuenta.",
|
|
268
|
+
"auth.recovery.service.eyebrow": "Servicio no disponible",
|
|
269
|
+
"auth.recovery.service.title": "No pudimos completar el inicio de sesión",
|
|
270
|
+
"auth.recovery.supportPrefix": "Si necesitas ayuda, contacta con",
|
|
271
|
+
"auth.recovery.technicalDetails": "Detalles técnicos",
|
|
272
|
+
"auth.recovery.tryAgain": "Intentar de nuevo",
|
|
273
|
+
"auth.recovery.useDifferentAccount": "Usar otra cuenta",
|
|
249
274
|
"auth.restricted.autoRedirect": "Redirigiendo al sitio principal en {{seconds}} s…",
|
|
250
275
|
"auth.restricted.body": "Este sitio está restringido a usuarios con acceso anticipado a nuevas funciones y correcciones. Continúa al sitio principal o contacta con Vertesia sobre el acceso anticipado a este sitio.",
|
|
251
276
|
"auth.restricted.calloutMeta": "Contacta con Vertesia para obtener acceso anticipado",
|
package/src/i18n/locales/fr.json
CHANGED
|
@@ -246,6 +246,31 @@
|
|
|
246
246
|
"auth.providers.bodyConsumer": "Choisissez l'un des fournisseurs ci-dessous pour continuer.",
|
|
247
247
|
"auth.providers.eyebrow": "Choisir comment se connecter",
|
|
248
248
|
"auth.providers.title": "Encore une étape",
|
|
249
|
+
"auth.recovery.continue": "Continuer vers Vertesia",
|
|
250
|
+
"auth.recovery.credential.body": "Nous n’avons pas pu vérifier votre connexion. Reconnectez-vous pour continuer.",
|
|
251
|
+
"auth.recovery.credential.eyebrow": "Connexion requise",
|
|
252
|
+
"auth.recovery.credential.title": "Votre connexion n’a pas pu être vérifiée",
|
|
253
|
+
"auth.recovery.errorCode": "Code d’erreur",
|
|
254
|
+
"auth.recovery.errorMessage": "Message d’erreur",
|
|
255
|
+
"auth.recovery.httpStatus": "Statut HTTP",
|
|
256
|
+
"auth.recovery.noAccessibleAccount.body": "Vous êtes connecté, mais aucun compte Vertesia n’est disponible pour cette identité.",
|
|
257
|
+
"auth.recovery.noAccessibleAccount.eyebrow": "Compte requis",
|
|
258
|
+
"auth.recovery.noAccessibleAccount.title": "Aucun compte disponible",
|
|
259
|
+
"auth.recovery.requestedAccount": "Compte demandé",
|
|
260
|
+
"auth.recovery.requestedProject": "Projet demandé",
|
|
261
|
+
"auth.recovery.scopeAccount.body": "Vous êtes connecté, mais le compte indiqué dans ce lien n’est pas disponible. Le lien est peut-être obsolète ou vous n’avez peut-être pas accès.",
|
|
262
|
+
"auth.recovery.scopeAccount.eyebrow": "Lien indisponible",
|
|
263
|
+
"auth.recovery.scopeAccount.title": "Compte indisponible",
|
|
264
|
+
"auth.recovery.scopeProject.body": "Vous êtes connecté, mais le projet indiqué dans ce lien n’est pas disponible. Le lien est peut-être obsolète ou vous n’avez peut-être pas accès.",
|
|
265
|
+
"auth.recovery.scopeProject.eyebrow": "Lien indisponible",
|
|
266
|
+
"auth.recovery.scopeProject.title": "Projet indisponible",
|
|
267
|
+
"auth.recovery.service.body": "Le service d’authentification est temporairement indisponible. Réessayez ou utilisez un autre compte.",
|
|
268
|
+
"auth.recovery.service.eyebrow": "Service indisponible",
|
|
269
|
+
"auth.recovery.service.title": "Nous n’avons pas pu terminer la connexion",
|
|
270
|
+
"auth.recovery.supportPrefix": "Si vous avez besoin d’aide, contactez",
|
|
271
|
+
"auth.recovery.technicalDetails": "Détails techniques",
|
|
272
|
+
"auth.recovery.tryAgain": "Réessayer",
|
|
273
|
+
"auth.recovery.useDifferentAccount": "Utiliser un autre compte",
|
|
249
274
|
"auth.restricted.autoRedirect": "Redirection vers le site principal dans {{seconds}} s…",
|
|
250
275
|
"auth.restricted.body": "Ce site est réservé aux utilisateurs disposant d'un accès anticipé aux nouvelles fonctionnalités et corrections. Veuillez continuer vers le site principal, ou contactez Vertesia au sujet de l'accès anticipé à ce site.",
|
|
251
276
|
"auth.restricted.calloutMeta": "Contactez Vertesia pour un accès anticipé",
|
package/src/i18n/locales/it.json
CHANGED
|
@@ -246,6 +246,31 @@
|
|
|
246
246
|
"auth.providers.bodyConsumer": "Scegli uno dei provider qui sotto per continuare.",
|
|
247
247
|
"auth.providers.eyebrow": "Scegli come accedere",
|
|
248
248
|
"auth.providers.title": "Un altro passaggio",
|
|
249
|
+
"auth.recovery.continue": "Continua su Vertesia",
|
|
250
|
+
"auth.recovery.credential.body": "Non è stato possibile verificare l’accesso. Accedi di nuovo per continuare.",
|
|
251
|
+
"auth.recovery.credential.eyebrow": "Accesso richiesto",
|
|
252
|
+
"auth.recovery.credential.title": "Non è stato possibile verificare l’accesso",
|
|
253
|
+
"auth.recovery.errorCode": "Codice errore",
|
|
254
|
+
"auth.recovery.errorMessage": "Messaggio di errore",
|
|
255
|
+
"auth.recovery.httpStatus": "Stato HTTP",
|
|
256
|
+
"auth.recovery.noAccessibleAccount.body": "Hai effettuato l’accesso, ma non è disponibile alcun account Vertesia per questa identità.",
|
|
257
|
+
"auth.recovery.noAccessibleAccount.eyebrow": "Account richiesto",
|
|
258
|
+
"auth.recovery.noAccessibleAccount.title": "Nessun account disponibile",
|
|
259
|
+
"auth.recovery.requestedAccount": "Account richiesto",
|
|
260
|
+
"auth.recovery.requestedProject": "Progetto richiesto",
|
|
261
|
+
"auth.recovery.scopeAccount.body": "Hai effettuato l’accesso, ma l’account indicato in questo link non è disponibile. Il link potrebbe essere obsoleto o potresti non avere accesso.",
|
|
262
|
+
"auth.recovery.scopeAccount.eyebrow": "Link non disponibile",
|
|
263
|
+
"auth.recovery.scopeAccount.title": "Account non disponibile",
|
|
264
|
+
"auth.recovery.scopeProject.body": "Hai effettuato l’accesso, ma il progetto indicato in questo link non è disponibile. Il link potrebbe essere obsoleto o potresti non avere accesso.",
|
|
265
|
+
"auth.recovery.scopeProject.eyebrow": "Link non disponibile",
|
|
266
|
+
"auth.recovery.scopeProject.title": "Progetto non disponibile",
|
|
267
|
+
"auth.recovery.service.body": "Il servizio di autenticazione non è temporaneamente disponibile. Riprova o usa un altro account.",
|
|
268
|
+
"auth.recovery.service.eyebrow": "Servizio non disponibile",
|
|
269
|
+
"auth.recovery.service.title": "Non è stato possibile completare l’accesso",
|
|
270
|
+
"auth.recovery.supportPrefix": "Se hai bisogno di aiuto, contatta",
|
|
271
|
+
"auth.recovery.technicalDetails": "Dettagli tecnici",
|
|
272
|
+
"auth.recovery.tryAgain": "Riprova",
|
|
273
|
+
"auth.recovery.useDifferentAccount": "Usa un altro account",
|
|
249
274
|
"auth.restricted.autoRedirect": "Reindirizzamento al sito principale tra {{seconds}} s…",
|
|
250
275
|
"auth.restricted.body": "Questo sito è riservato agli utenti con accesso anticipato a nuove funzionalità e correzioni. Continua al sito principale oppure contatta Vertesia per l'accesso anticipato a questo sito.",
|
|
251
276
|
"auth.restricted.calloutMeta": "Contatta Vertesia per l'accesso anticipato",
|
package/src/i18n/locales/ja.json
CHANGED
|
@@ -244,6 +244,31 @@
|
|
|
244
244
|
"auth.providers.bodyConsumer": "続行するには、以下のプロバイダーのいずれかを選択してください。",
|
|
245
245
|
"auth.providers.eyebrow": "サインイン方法を選択",
|
|
246
246
|
"auth.providers.title": "あと一歩です",
|
|
247
|
+
"auth.recovery.continue": "Vertesia に進む",
|
|
248
|
+
"auth.recovery.credential.body": "サインインを確認できませんでした。続行するには、もう一度サインインしてください。",
|
|
249
|
+
"auth.recovery.credential.eyebrow": "サインインが必要です",
|
|
250
|
+
"auth.recovery.credential.title": "サインインを確認できませんでした",
|
|
251
|
+
"auth.recovery.errorCode": "エラーコード",
|
|
252
|
+
"auth.recovery.errorMessage": "エラーメッセージ",
|
|
253
|
+
"auth.recovery.httpStatus": "HTTP ステータス",
|
|
254
|
+
"auth.recovery.noAccessibleAccount.body": "サインインしていますが、この ID で利用できる Vertesia アカウントはありません。",
|
|
255
|
+
"auth.recovery.noAccessibleAccount.eyebrow": "アカウントが必要です",
|
|
256
|
+
"auth.recovery.noAccessibleAccount.title": "利用できるアカウントがありません",
|
|
257
|
+
"auth.recovery.requestedAccount": "要求されたアカウント",
|
|
258
|
+
"auth.recovery.requestedProject": "要求されたプロジェクト",
|
|
259
|
+
"auth.recovery.scopeAccount.body": "サインインしていますが、このリンクのアカウントは利用できません。リンクが古いか、アクセス権がない可能性があります。",
|
|
260
|
+
"auth.recovery.scopeAccount.eyebrow": "リンクを利用できません",
|
|
261
|
+
"auth.recovery.scopeAccount.title": "アカウントを利用できません",
|
|
262
|
+
"auth.recovery.scopeProject.body": "サインインしていますが、このリンクのプロジェクトは利用できません。リンクが古いか、アクセス権がない可能性があります。",
|
|
263
|
+
"auth.recovery.scopeProject.eyebrow": "リンクを利用できません",
|
|
264
|
+
"auth.recovery.scopeProject.title": "プロジェクトを利用できません",
|
|
265
|
+
"auth.recovery.service.body": "認証サービスは一時的に利用できません。再試行するか、別のアカウントを使用してください。",
|
|
266
|
+
"auth.recovery.service.eyebrow": "サービスを利用できません",
|
|
267
|
+
"auth.recovery.service.title": "サインインを完了できませんでした",
|
|
268
|
+
"auth.recovery.supportPrefix": "サポートが必要な場合は、こちらにお問い合わせください:",
|
|
269
|
+
"auth.recovery.technicalDetails": "技術的な詳細",
|
|
270
|
+
"auth.recovery.tryAgain": "再試行",
|
|
271
|
+
"auth.recovery.useDifferentAccount": "別のアカウントを使用",
|
|
247
272
|
"auth.restricted.autoRedirect": "{{seconds}} 秒後にメインサイトへ移動します…",
|
|
248
273
|
"auth.restricted.body": "このサイトは、新機能や修正への早期アクセス権を持つユーザーに限定されています。メインサイトに進むか、このサイトへの早期アクセスについて Vertesia にお問い合わせください。",
|
|
249
274
|
"auth.restricted.calloutMeta": "早期アクセスについては Vertesia にお問い合わせください",
|
package/src/i18n/locales/ko.json
CHANGED
|
@@ -244,6 +244,31 @@
|
|
|
244
244
|
"auth.providers.bodyConsumer": "계속하려면 아래 공급자 중 하나를 선택하세요.",
|
|
245
245
|
"auth.providers.eyebrow": "로그인 방법 선택",
|
|
246
246
|
"auth.providers.title": "한 단계만 더",
|
|
247
|
+
"auth.recovery.continue": "Vertesia로 계속",
|
|
248
|
+
"auth.recovery.credential.body": "로그인을 확인할 수 없습니다. 계속하려면 다시 로그인하세요.",
|
|
249
|
+
"auth.recovery.credential.eyebrow": "로그인 필요",
|
|
250
|
+
"auth.recovery.credential.title": "로그인을 확인할 수 없습니다",
|
|
251
|
+
"auth.recovery.errorCode": "오류 코드",
|
|
252
|
+
"auth.recovery.errorMessage": "오류 메시지",
|
|
253
|
+
"auth.recovery.httpStatus": "HTTP 상태",
|
|
254
|
+
"auth.recovery.noAccessibleAccount.body": "로그인했지만 이 ID로 사용할 수 있는 Vertesia 계정이 없습니다.",
|
|
255
|
+
"auth.recovery.noAccessibleAccount.eyebrow": "계정 필요",
|
|
256
|
+
"auth.recovery.noAccessibleAccount.title": "사용 가능한 계정이 없습니다",
|
|
257
|
+
"auth.recovery.requestedAccount": "요청한 계정",
|
|
258
|
+
"auth.recovery.requestedProject": "요청한 프로젝트",
|
|
259
|
+
"auth.recovery.scopeAccount.body": "로그인했지만 이 링크의 계정을 사용할 수 없습니다. 링크가 오래되었거나 접근 권한이 없을 수 있습니다.",
|
|
260
|
+
"auth.recovery.scopeAccount.eyebrow": "링크를 사용할 수 없음",
|
|
261
|
+
"auth.recovery.scopeAccount.title": "계정을 사용할 수 없음",
|
|
262
|
+
"auth.recovery.scopeProject.body": "로그인했지만 이 링크의 프로젝트를 사용할 수 없습니다. 링크가 오래되었거나 접근 권한이 없을 수 있습니다.",
|
|
263
|
+
"auth.recovery.scopeProject.eyebrow": "링크를 사용할 수 없음",
|
|
264
|
+
"auth.recovery.scopeProject.title": "프로젝트를 사용할 수 없음",
|
|
265
|
+
"auth.recovery.service.body": "인증 서비스를 일시적으로 사용할 수 없습니다. 다시 시도하거나 다른 계정을 사용하세요.",
|
|
266
|
+
"auth.recovery.service.eyebrow": "서비스를 사용할 수 없음",
|
|
267
|
+
"auth.recovery.service.title": "로그인을 완료할 수 없습니다",
|
|
268
|
+
"auth.recovery.supportPrefix": "도움이 필요하면 다음으로 문의하세요:",
|
|
269
|
+
"auth.recovery.technicalDetails": "기술 세부 정보",
|
|
270
|
+
"auth.recovery.tryAgain": "다시 시도",
|
|
271
|
+
"auth.recovery.useDifferentAccount": "다른 계정 사용",
|
|
247
272
|
"auth.restricted.autoRedirect": "{{seconds}}초 후 메인 사이트로 이동합니다…",
|
|
248
273
|
"auth.restricted.body": "이 사이트는 새로운 기능 및 수정 사항에 대한 얼리 액세스 권한이 있는 사용자로 제한됩니다. 메인 사이트로 계속하거나 이 사이트에 대한 얼리 액세스에 관해 Vertesia에 문의하세요.",
|
|
249
274
|
"auth.restricted.calloutMeta": "얼리 액세스는 Vertesia에 문의하세요",
|
package/src/i18n/locales/pt.json
CHANGED
|
@@ -246,6 +246,31 @@
|
|
|
246
246
|
"auth.providers.bodyConsumer": "Escolha um dos provedores abaixo para continuar.",
|
|
247
247
|
"auth.providers.eyebrow": "Escolha como entrar",
|
|
248
248
|
"auth.providers.title": "Mais um passo",
|
|
249
|
+
"auth.recovery.continue": "Continuar para o Vertesia",
|
|
250
|
+
"auth.recovery.credential.body": "Não foi possível verificar o seu início de sessão. Inicie sessão novamente para continuar.",
|
|
251
|
+
"auth.recovery.credential.eyebrow": "Início de sessão necessário",
|
|
252
|
+
"auth.recovery.credential.title": "Não foi possível verificar o seu início de sessão",
|
|
253
|
+
"auth.recovery.errorCode": "Código do erro",
|
|
254
|
+
"auth.recovery.errorMessage": "Mensagem de erro",
|
|
255
|
+
"auth.recovery.httpStatus": "Estado HTTP",
|
|
256
|
+
"auth.recovery.noAccessibleAccount.body": "Iniciou sessão, mas não existe nenhuma conta Vertesia disponível para esta identidade.",
|
|
257
|
+
"auth.recovery.noAccessibleAccount.eyebrow": "Conta necessária",
|
|
258
|
+
"auth.recovery.noAccessibleAccount.title": "Nenhuma conta disponível",
|
|
259
|
+
"auth.recovery.requestedAccount": "Conta solicitada",
|
|
260
|
+
"auth.recovery.requestedProject": "Projeto solicitado",
|
|
261
|
+
"auth.recovery.scopeAccount.body": "Iniciou sessão, mas a conta neste link não está disponível. O link pode estar desatualizado ou poderá não ter acesso.",
|
|
262
|
+
"auth.recovery.scopeAccount.eyebrow": "Link indisponível",
|
|
263
|
+
"auth.recovery.scopeAccount.title": "Conta indisponível",
|
|
264
|
+
"auth.recovery.scopeProject.body": "Iniciou sessão, mas o projeto neste link não está disponível. O link pode estar desatualizado ou poderá não ter acesso.",
|
|
265
|
+
"auth.recovery.scopeProject.eyebrow": "Link indisponível",
|
|
266
|
+
"auth.recovery.scopeProject.title": "Projeto indisponível",
|
|
267
|
+
"auth.recovery.service.body": "O serviço de autenticação está temporariamente indisponível. Tente novamente ou utilize outra conta.",
|
|
268
|
+
"auth.recovery.service.eyebrow": "Serviço indisponível",
|
|
269
|
+
"auth.recovery.service.title": "Não foi possível concluir o início de sessão",
|
|
270
|
+
"auth.recovery.supportPrefix": "Se precisar de ajuda, contacte",
|
|
271
|
+
"auth.recovery.technicalDetails": "Detalhes técnicos",
|
|
272
|
+
"auth.recovery.tryAgain": "Tentar novamente",
|
|
273
|
+
"auth.recovery.useDifferentAccount": "Utilizar outra conta",
|
|
249
274
|
"auth.restricted.autoRedirect": "Redirecionando para o site principal em {{seconds}} s…",
|
|
250
275
|
"auth.restricted.body": "Este site é restrito a usuários com acesso antecipado a novos recursos e correções. Continue para o site principal ou entre em contato com a Vertesia sobre o acesso antecipado a este site.",
|
|
251
276
|
"auth.restricted.calloutMeta": "Entre em contato com a Vertesia para acesso antecipado",
|
package/src/i18n/locales/ru.json
CHANGED
|
@@ -248,6 +248,31 @@
|
|
|
248
248
|
"auth.providers.bodyConsumer": "Выберите одного из провайдеров ниже, чтобы продолжить.",
|
|
249
249
|
"auth.providers.eyebrow": "Выберите способ входа",
|
|
250
250
|
"auth.providers.title": "Ещё один шаг",
|
|
251
|
+
"auth.recovery.continue": "Перейти в Vertesia",
|
|
252
|
+
"auth.recovery.credential.body": "Не удалось подтвердить вход. Войдите снова, чтобы продолжить.",
|
|
253
|
+
"auth.recovery.credential.eyebrow": "Требуется вход",
|
|
254
|
+
"auth.recovery.credential.title": "Не удалось подтвердить вход",
|
|
255
|
+
"auth.recovery.errorCode": "Код ошибки",
|
|
256
|
+
"auth.recovery.errorMessage": "Сообщение об ошибке",
|
|
257
|
+
"auth.recovery.httpStatus": "Статус HTTP",
|
|
258
|
+
"auth.recovery.noAccessibleAccount.body": "Вы вошли в систему, но для этой учётной записи нет доступного аккаунта Vertesia.",
|
|
259
|
+
"auth.recovery.noAccessibleAccount.eyebrow": "Требуется аккаунт",
|
|
260
|
+
"auth.recovery.noAccessibleAccount.title": "Нет доступного аккаунта",
|
|
261
|
+
"auth.recovery.requestedAccount": "Запрошенный аккаунт",
|
|
262
|
+
"auth.recovery.requestedProject": "Запрошенный проект",
|
|
263
|
+
"auth.recovery.scopeAccount.body": "Вы вошли в систему, но аккаунт из этой ссылки недоступен. Возможно, ссылка устарела или у вас нет доступа.",
|
|
264
|
+
"auth.recovery.scopeAccount.eyebrow": "Ссылка недоступна",
|
|
265
|
+
"auth.recovery.scopeAccount.title": "Аккаунт недоступен",
|
|
266
|
+
"auth.recovery.scopeProject.body": "Вы вошли в систему, но проект из этой ссылки недоступен. Возможно, ссылка устарела или у вас нет доступа.",
|
|
267
|
+
"auth.recovery.scopeProject.eyebrow": "Ссылка недоступна",
|
|
268
|
+
"auth.recovery.scopeProject.title": "Проект недоступен",
|
|
269
|
+
"auth.recovery.service.body": "Служба аутентификации временно недоступна. Повторите попытку или используйте другую учётную запись.",
|
|
270
|
+
"auth.recovery.service.eyebrow": "Служба недоступна",
|
|
271
|
+
"auth.recovery.service.title": "Не удалось завершить вход",
|
|
272
|
+
"auth.recovery.supportPrefix": "Если вам нужна помощь, свяжитесь с нами:",
|
|
273
|
+
"auth.recovery.technicalDetails": "Технические сведения",
|
|
274
|
+
"auth.recovery.tryAgain": "Повторить",
|
|
275
|
+
"auth.recovery.useDifferentAccount": "Использовать другую учётную запись",
|
|
251
276
|
"auth.restricted.autoRedirect": "Перенаправление на основной сайт через {{seconds}} с…",
|
|
252
277
|
"auth.restricted.body": "Этот сайт доступен только пользователям с ранним доступом к новым функциям и исправлениям. Перейдите на основной сайт или свяжитесь с Vertesia по вопросу раннего доступа к этому сайту.",
|
|
253
278
|
"auth.restricted.calloutMeta": "Свяжитесь с Vertesia для получения раннего доступа",
|
package/src/i18n/locales/tr.json
CHANGED
|
@@ -244,6 +244,31 @@
|
|
|
244
244
|
"auth.providers.bodyConsumer": "Devam etmek için aşağıdaki sağlayıcılardan birini seçin.",
|
|
245
245
|
"auth.providers.eyebrow": "Oturum açma yöntemini seç",
|
|
246
246
|
"auth.providers.title": "Bir adım daha",
|
|
247
|
+
"auth.recovery.continue": "Vertesia'ya devam et",
|
|
248
|
+
"auth.recovery.credential.body": "Oturum açma bilgileriniz doğrulanamadı. Devam etmek için yeniden oturum açın.",
|
|
249
|
+
"auth.recovery.credential.eyebrow": "Oturum açma gerekli",
|
|
250
|
+
"auth.recovery.credential.title": "Oturum açma bilgileriniz doğrulanamadı",
|
|
251
|
+
"auth.recovery.errorCode": "Hata kodu",
|
|
252
|
+
"auth.recovery.errorMessage": "Hata mesajı",
|
|
253
|
+
"auth.recovery.httpStatus": "HTTP durumu",
|
|
254
|
+
"auth.recovery.noAccessibleAccount.body": "Oturum açtınız ancak bu kimlik için kullanılabilir bir Vertesia hesabı yok.",
|
|
255
|
+
"auth.recovery.noAccessibleAccount.eyebrow": "Hesap gerekli",
|
|
256
|
+
"auth.recovery.noAccessibleAccount.title": "Kullanılabilir hesap yok",
|
|
257
|
+
"auth.recovery.requestedAccount": "İstenen hesap",
|
|
258
|
+
"auth.recovery.requestedProject": "İstenen proje",
|
|
259
|
+
"auth.recovery.scopeAccount.body": "Oturum açtınız ancak bu bağlantıdaki hesap kullanılamıyor. Bağlantı güncel olmayabilir veya erişiminiz olmayabilir.",
|
|
260
|
+
"auth.recovery.scopeAccount.eyebrow": "Bağlantı kullanılamıyor",
|
|
261
|
+
"auth.recovery.scopeAccount.title": "Hesap kullanılamıyor",
|
|
262
|
+
"auth.recovery.scopeProject.body": "Oturum açtınız ancak bu bağlantıdaki proje kullanılamıyor. Bağlantı güncel olmayabilir veya erişiminiz olmayabilir.",
|
|
263
|
+
"auth.recovery.scopeProject.eyebrow": "Bağlantı kullanılamıyor",
|
|
264
|
+
"auth.recovery.scopeProject.title": "Proje kullanılamıyor",
|
|
265
|
+
"auth.recovery.service.body": "Kimlik doğrulama hizmeti geçici olarak kullanılamıyor. Yeniden deneyin veya farklı bir hesap kullanın.",
|
|
266
|
+
"auth.recovery.service.eyebrow": "Hizmet kullanılamıyor",
|
|
267
|
+
"auth.recovery.service.title": "Oturum açma tamamlanamadı",
|
|
268
|
+
"auth.recovery.supportPrefix": "Yardıma ihtiyacınız varsa iletişime geçin:",
|
|
269
|
+
"auth.recovery.technicalDetails": "Teknik ayrıntılar",
|
|
270
|
+
"auth.recovery.tryAgain": "Yeniden dene",
|
|
271
|
+
"auth.recovery.useDifferentAccount": "Farklı bir hesap kullan",
|
|
247
272
|
"auth.restricted.autoRedirect": "{{seconds}} sn içinde ana siteye yönlendiriliyorsunuz…",
|
|
248
273
|
"auth.restricted.body": "Bu site, yeni özelliklere ve düzeltmelere erken erişimi olan kullanıcılarla sınırlıdır. Lütfen ana siteye devam edin veya bu siteye erken erişim hakkında Vertesia ile iletişime geçin.",
|
|
249
274
|
"auth.restricted.calloutMeta": "Erken erişim için Vertesia ile iletişime geçin",
|
|
@@ -244,6 +244,31 @@
|
|
|
244
244
|
"auth.providers.bodyConsumer": "請從下方提供者中選擇一個繼續。",
|
|
245
245
|
"auth.providers.eyebrow": "選擇登入方式",
|
|
246
246
|
"auth.providers.title": "再一步",
|
|
247
|
+
"auth.recovery.continue": "繼續前往 Vertesia",
|
|
248
|
+
"auth.recovery.credential.body": "無法驗證您的登入資訊。請重新登入以繼續。",
|
|
249
|
+
"auth.recovery.credential.eyebrow": "需要登入",
|
|
250
|
+
"auth.recovery.credential.title": "無法驗證您的登入資訊",
|
|
251
|
+
"auth.recovery.errorCode": "錯誤代碼",
|
|
252
|
+
"auth.recovery.errorMessage": "錯誤訊息",
|
|
253
|
+
"auth.recovery.httpStatus": "HTTP 狀態",
|
|
254
|
+
"auth.recovery.noAccessibleAccount.body": "您已登入,但此身分沒有可用的 Vertesia 帳戶。",
|
|
255
|
+
"auth.recovery.noAccessibleAccount.eyebrow": "需要帳戶",
|
|
256
|
+
"auth.recovery.noAccessibleAccount.title": "沒有可用帳戶",
|
|
257
|
+
"auth.recovery.requestedAccount": "要求的帳戶",
|
|
258
|
+
"auth.recovery.requestedProject": "要求的專案",
|
|
259
|
+
"auth.recovery.scopeAccount.body": "您已登入,但此連結中的帳戶無法使用。連結可能已過期,或您沒有存取權限。",
|
|
260
|
+
"auth.recovery.scopeAccount.eyebrow": "連結無法使用",
|
|
261
|
+
"auth.recovery.scopeAccount.title": "帳戶無法使用",
|
|
262
|
+
"auth.recovery.scopeProject.body": "您已登入,但此連結中的專案無法使用。連結可能已過期,或您沒有存取權限。",
|
|
263
|
+
"auth.recovery.scopeProject.eyebrow": "連結無法使用",
|
|
264
|
+
"auth.recovery.scopeProject.title": "專案無法使用",
|
|
265
|
+
"auth.recovery.service.body": "驗證服務暫時無法使用。請重試或使用其他帳戶。",
|
|
266
|
+
"auth.recovery.service.eyebrow": "服務無法使用",
|
|
267
|
+
"auth.recovery.service.title": "無法完成登入",
|
|
268
|
+
"auth.recovery.supportPrefix": "如需協助,請聯絡",
|
|
269
|
+
"auth.recovery.technicalDetails": "技術詳細資料",
|
|
270
|
+
"auth.recovery.tryAgain": "重試",
|
|
271
|
+
"auth.recovery.useDifferentAccount": "使用其他帳戶",
|
|
247
272
|
"auth.restricted.autoRedirect": "{{seconds}} 秒後前往主網站…",
|
|
248
273
|
"auth.restricted.body": "本網站僅限擁有新功能和修復搶先體驗權限的使用者使用。請繼續前往主網站,或就此網站的搶先體驗事宜聯絡 Vertesia。",
|
|
249
274
|
"auth.restricted.calloutMeta": "聯絡 Vertesia 取得搶先體驗權限",
|
package/src/i18n/locales/zh.json
CHANGED
|
@@ -244,6 +244,31 @@
|
|
|
244
244
|
"auth.providers.bodyConsumer": "请从下方提供商中选择一个继续。",
|
|
245
245
|
"auth.providers.eyebrow": "选择登录方式",
|
|
246
246
|
"auth.providers.title": "再一步",
|
|
247
|
+
"auth.recovery.continue": "继续前往 Vertesia",
|
|
248
|
+
"auth.recovery.credential.body": "无法验证您的登录信息。请重新登录以继续。",
|
|
249
|
+
"auth.recovery.credential.eyebrow": "需要登录",
|
|
250
|
+
"auth.recovery.credential.title": "无法验证您的登录信息",
|
|
251
|
+
"auth.recovery.errorCode": "错误代码",
|
|
252
|
+
"auth.recovery.errorMessage": "错误消息",
|
|
253
|
+
"auth.recovery.httpStatus": "HTTP 状态",
|
|
254
|
+
"auth.recovery.noAccessibleAccount.body": "您已登录,但此身份没有可用的 Vertesia 账户。",
|
|
255
|
+
"auth.recovery.noAccessibleAccount.eyebrow": "需要账户",
|
|
256
|
+
"auth.recovery.noAccessibleAccount.title": "没有可用账户",
|
|
257
|
+
"auth.recovery.requestedAccount": "请求的账户",
|
|
258
|
+
"auth.recovery.requestedProject": "请求的项目",
|
|
259
|
+
"auth.recovery.scopeAccount.body": "您已登录,但此链接中的账户不可用。链接可能已过期,或者您没有访问权限。",
|
|
260
|
+
"auth.recovery.scopeAccount.eyebrow": "链接不可用",
|
|
261
|
+
"auth.recovery.scopeAccount.title": "账户不可用",
|
|
262
|
+
"auth.recovery.scopeProject.body": "您已登录,但此链接中的项目不可用。链接可能已过期,或者您没有访问权限。",
|
|
263
|
+
"auth.recovery.scopeProject.eyebrow": "链接不可用",
|
|
264
|
+
"auth.recovery.scopeProject.title": "项目不可用",
|
|
265
|
+
"auth.recovery.service.body": "身份验证服务暂时不可用。请重试或使用其他账户。",
|
|
266
|
+
"auth.recovery.service.eyebrow": "服务不可用",
|
|
267
|
+
"auth.recovery.service.title": "无法完成登录",
|
|
268
|
+
"auth.recovery.supportPrefix": "如需帮助,请联系",
|
|
269
|
+
"auth.recovery.technicalDetails": "技术详情",
|
|
270
|
+
"auth.recovery.tryAgain": "重试",
|
|
271
|
+
"auth.recovery.useDifferentAccount": "使用其他账户",
|
|
247
272
|
"auth.restricted.autoRedirect": "{{seconds}} 秒后前往主站点…",
|
|
248
273
|
"auth.restricted.body": "本站点仅限拥有新功能和修复抢先体验权限的用户使用。请继续前往主站点,或就此站点的抢先体验事宜联系 Vertesia。",
|
|
249
274
|
"auth.restricted.calloutMeta": "联系 Vertesia 获取抢先体验权限",
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest';
|
|
2
|
+
import { RequestedScopeUnavailableError } from './auth/composable';
|
|
3
|
+
import { sanitizeRejectedScopeUrl } from './UserSessionProvider';
|
|
4
|
+
|
|
5
|
+
describe('sanitizeRejectedScopeUrl', () => {
|
|
6
|
+
it.each([
|
|
7
|
+
{
|
|
8
|
+
name: 'an account/project pair',
|
|
9
|
+
input: 'https://app.example.test/studio/dashboard?a=apple&p=banana&tab=runs',
|
|
10
|
+
accountId: 'apple',
|
|
11
|
+
projectId: 'banana',
|
|
12
|
+
expected: 'https://app.example.test/studio/dashboard?tab=runs',
|
|
13
|
+
scope: 'project',
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
name: 'a project-only selector',
|
|
17
|
+
input: 'https://app.example.test/studio/dashboard?p=banana&tab=runs',
|
|
18
|
+
accountId: undefined,
|
|
19
|
+
projectId: 'banana',
|
|
20
|
+
expected: 'https://app.example.test/studio/dashboard?tab=runs',
|
|
21
|
+
scope: 'project',
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
name: 'an account-only selector',
|
|
25
|
+
input: 'https://app.example.test/studio/dashboard?a=apple&tab=runs',
|
|
26
|
+
accountId: 'apple',
|
|
27
|
+
projectId: undefined,
|
|
28
|
+
expected: 'https://app.example.test/studio/dashboard?tab=runs',
|
|
29
|
+
scope: 'account',
|
|
30
|
+
},
|
|
31
|
+
])('removes $name while preserving the path and unrelated parameters', (testCase) => {
|
|
32
|
+
const error = new RequestedScopeUnavailableError(
|
|
33
|
+
'https://sts.example.test',
|
|
34
|
+
testCase.accountId,
|
|
35
|
+
testCase.projectId,
|
|
36
|
+
);
|
|
37
|
+
|
|
38
|
+
const result = sanitizeRejectedScopeUrl(new URL(testCase.input), error);
|
|
39
|
+
|
|
40
|
+
expect(result.toString()).toBe(testCase.expected);
|
|
41
|
+
expect(error.recoveryUrl).toBe(testCase.expected);
|
|
42
|
+
expect(error.requestedScope).toBe(testCase.scope);
|
|
43
|
+
expect(error.selectorSource).toBe('url');
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
it('clears central-auth state while preserving unrelated query parameters', () => {
|
|
47
|
+
const error = new RequestedScopeUnavailableError('https://sts.example.test', 'apple', 'banana');
|
|
48
|
+
|
|
49
|
+
const result = sanitizeRejectedScopeUrl(
|
|
50
|
+
new URL('https://app.example.test/deep/path?a=apple&p=banana&view=grid#token=secret&state=opaque'),
|
|
51
|
+
error,
|
|
52
|
+
true,
|
|
53
|
+
);
|
|
54
|
+
|
|
55
|
+
expect(result.toString()).toBe('https://app.example.test/deep/path?view=grid');
|
|
56
|
+
expect(error.recoveryUrl).not.toContain('secret');
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
it('marks a matching persisted-only selection without removing unrelated URL state', () => {
|
|
60
|
+
const error = new RequestedScopeUnavailableError('https://sts.example.test', 'stored-a', 'stored-p');
|
|
61
|
+
const input = new URL('https://app.example.test/deep/path?view=grid');
|
|
62
|
+
|
|
63
|
+
const result = sanitizeRejectedScopeUrl(input, error);
|
|
64
|
+
|
|
65
|
+
expect(result.toString()).toBe(input.toString());
|
|
66
|
+
expect(error.selectorSource).toBe('persisted');
|
|
67
|
+
expect(error.requestedScope).toBe('project');
|
|
68
|
+
});
|
|
69
|
+
});
|
|
@@ -1,11 +1,21 @@
|
|
|
1
|
+
import { REQUESTED_SCOPE_UNAVAILABLE_ERROR_CODE } from '@vertesia/common';
|
|
1
2
|
import { Env } from '@vertesia/ui/env';
|
|
2
3
|
import { onAuthStateChanged } from 'firebase/auth';
|
|
3
4
|
import { type ReactNode, useEffect, useRef, useState } from 'react';
|
|
4
|
-
import {
|
|
5
|
+
import {
|
|
6
|
+
AuthenticationServiceError,
|
|
7
|
+
CredentialError,
|
|
8
|
+
getComposableToken,
|
|
9
|
+
NoAccessibleAccountError,
|
|
10
|
+
RequestedScopeUnavailableError,
|
|
11
|
+
RestrictedEnvironmentError,
|
|
12
|
+
resolveAuthSelection,
|
|
13
|
+
UserNotFoundError,
|
|
14
|
+
} from './auth/composable';
|
|
5
15
|
import { authReturnUrl, shouldRedirectToCentralAuth } from './auth/domainRouting';
|
|
6
16
|
import { getFirebaseAuth } from './auth/firebase';
|
|
7
17
|
import { useAuthState } from './auth/useAuthState';
|
|
8
|
-
import {
|
|
18
|
+
import { UserSession, UserSessionContext } from './UserSession';
|
|
9
19
|
|
|
10
20
|
const CENTRAL_AUTH_REDIRECT = 'https://internal-auth.vertesia.app/';
|
|
11
21
|
|
|
@@ -15,6 +25,38 @@ function clearAuthHash() {
|
|
|
15
25
|
window.history.replaceState(window.history.state, '', `${url.pathname}${url.search}`);
|
|
16
26
|
}
|
|
17
27
|
|
|
28
|
+
export function sanitizeRejectedScopeUrl(
|
|
29
|
+
currentUrl: URL,
|
|
30
|
+
error: RequestedScopeUnavailableError,
|
|
31
|
+
clearHash = false,
|
|
32
|
+
): URL {
|
|
33
|
+
const sanitizedUrl = new URL(currentUrl);
|
|
34
|
+
const urlAccountId = sanitizedUrl.searchParams.get('a') ?? undefined;
|
|
35
|
+
const urlProjectId = sanitizedUrl.searchParams.get('p') ?? undefined;
|
|
36
|
+
|
|
37
|
+
if (urlAccountId && urlProjectId && urlAccountId === error.accountId && urlProjectId === error.projectId) {
|
|
38
|
+
sanitizedUrl.searchParams.delete('a');
|
|
39
|
+
sanitizedUrl.searchParams.delete('p');
|
|
40
|
+
error.requestedScope = 'project';
|
|
41
|
+
error.selectorSource = 'url';
|
|
42
|
+
} else if (urlProjectId && urlProjectId === error.projectId) {
|
|
43
|
+
sanitizedUrl.searchParams.delete('p');
|
|
44
|
+
error.requestedScope = 'project';
|
|
45
|
+
error.selectorSource = 'url';
|
|
46
|
+
} else if (urlAccountId && urlAccountId === error.accountId) {
|
|
47
|
+
sanitizedUrl.searchParams.delete('a');
|
|
48
|
+
error.requestedScope = 'account';
|
|
49
|
+
error.selectorSource = 'url';
|
|
50
|
+
} else {
|
|
51
|
+
error.requestedScope = error.projectId ? 'project' : 'account';
|
|
52
|
+
error.selectorSource = 'persisted';
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
if (clearHash) sanitizedUrl.hash = '';
|
|
56
|
+
error.recoveryUrl = sanitizedUrl.toString();
|
|
57
|
+
return sanitizedUrl;
|
|
58
|
+
}
|
|
59
|
+
|
|
18
60
|
interface UserSessionProviderProps {
|
|
19
61
|
children: ReactNode | ReactNode[];
|
|
20
62
|
loadOnboardingStatus?: boolean;
|
|
@@ -28,6 +70,46 @@ export function UserSessionProvider({ children, loadOnboardingStatus = true }: U
|
|
|
28
70
|
const hasInitiatedAuthRef = useRef(false);
|
|
29
71
|
const authFlowRef = useRef<(() => undefined | (() => void)) | undefined>(undefined);
|
|
30
72
|
|
|
73
|
+
const clearRejectedUrlScope = (error: RequestedScopeUnavailableError, clearHash = false) => {
|
|
74
|
+
const sanitizedUrl = sanitizeRejectedScopeUrl(new URL(window.location.href), error, clearHash);
|
|
75
|
+
window.history.replaceState(window.history.state, '', sanitizedUrl);
|
|
76
|
+
Env.logger.warn('Sanitized an unavailable authentication scope', {
|
|
77
|
+
vertesia: {
|
|
78
|
+
account_id: error.accountId,
|
|
79
|
+
project_id: error.projectId,
|
|
80
|
+
error_code: REQUESTED_SCOPE_UNAVAILABLE_ERROR_CODE,
|
|
81
|
+
selector_source: error.selectorSource,
|
|
82
|
+
requested_scope: error.requestedScope,
|
|
83
|
+
recovery_action: 'url_sanitized',
|
|
84
|
+
},
|
|
85
|
+
});
|
|
86
|
+
};
|
|
87
|
+
|
|
88
|
+
const surfaceAuthError = (error: unknown, clearHash = false): boolean => {
|
|
89
|
+
if (
|
|
90
|
+
!(
|
|
91
|
+
error instanceof RequestedScopeUnavailableError ||
|
|
92
|
+
error instanceof NoAccessibleAccountError ||
|
|
93
|
+
error instanceof CredentialError ||
|
|
94
|
+
error instanceof AuthenticationServiceError ||
|
|
95
|
+
error instanceof UserNotFoundError ||
|
|
96
|
+
error instanceof RestrictedEnvironmentError
|
|
97
|
+
)
|
|
98
|
+
) {
|
|
99
|
+
return false;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
if (error instanceof RequestedScopeUnavailableError) {
|
|
103
|
+
clearRejectedUrlScope(error, clearHash);
|
|
104
|
+
} else if (clearHash) {
|
|
105
|
+
clearAuthHash();
|
|
106
|
+
}
|
|
107
|
+
session.isLoading = false;
|
|
108
|
+
session.authError = error;
|
|
109
|
+
setSession(session.clone());
|
|
110
|
+
return true;
|
|
111
|
+
};
|
|
112
|
+
|
|
31
113
|
const redirectToCentralAuth = (projectId?: string, accountId?: string) => {
|
|
32
114
|
const url = new URL(`${CENTRAL_AUTH_REDIRECT}?sts=${Env.endpoints.sts ?? 'https://sts.vertesia.io'}`);
|
|
33
115
|
const currentUrl = authReturnUrl();
|
|
@@ -49,12 +131,7 @@ export function UserSessionProvider({ children, loadOnboardingStatus = true }: U
|
|
|
49
131
|
console.log('Auth: starting auth flow');
|
|
50
132
|
Env.logger.info('Starting auth flow');
|
|
51
133
|
const currentUrl = new URL(window.location.href);
|
|
52
|
-
const selectedAccount =
|
|
53
|
-
currentUrl.searchParams.get('a') ?? localStorage.getItem(LastSelectedAccountId_KEY) ?? undefined;
|
|
54
|
-
const selectedProject =
|
|
55
|
-
currentUrl.searchParams.get('p') ??
|
|
56
|
-
localStorage.getItem(`${LastSelectedProjectId_KEY}-${selectedAccount}`) ??
|
|
57
|
-
undefined;
|
|
134
|
+
const { accountId: selectedAccount, projectId: selectedProject } = resolveAuthSelection(currentUrl);
|
|
58
135
|
console.log('Auth: selected account', selectedAccount);
|
|
59
136
|
console.log('Auth: selected project', selectedProject);
|
|
60
137
|
Env.logger.info('Selected account and project', {
|
|
@@ -71,6 +148,7 @@ export function UserSessionProvider({ children, loadOnboardingStatus = true }: U
|
|
|
71
148
|
session.login(res.rawToken).then(() => setSession(session.clone()));
|
|
72
149
|
})
|
|
73
150
|
.catch((err) => {
|
|
151
|
+
if (surfaceAuthError(err)) return;
|
|
74
152
|
console.error('Failed to initialize dev auth token', err);
|
|
75
153
|
Env.logger.error('Failed to initialize dev auth token', {
|
|
76
154
|
vertesia: {
|
|
@@ -108,44 +186,7 @@ export function UserSessionProvider({ children, loadOnboardingStatus = true }: U
|
|
|
108
186
|
});
|
|
109
187
|
})
|
|
110
188
|
.catch((err) => {
|
|
111
|
-
|
|
112
|
-
if (err instanceof UserNotFoundError) {
|
|
113
|
-
console.log('User not found - will trigger signup flow', err);
|
|
114
|
-
session.isLoading = false;
|
|
115
|
-
session.authError = err;
|
|
116
|
-
setSession(session.clone());
|
|
117
|
-
return;
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
// Restricted environment (preview/preprod without early-access): surface the
|
|
121
|
-
// error so the sign-in screen shows the dedicated step. Redirecting to central
|
|
122
|
-
// auth here would loop, since the identity is valid but the environment is gated.
|
|
123
|
-
if (err instanceof RestrictedEnvironmentError) {
|
|
124
|
-
console.warn('Restricted environment - user lacks early-access', err);
|
|
125
|
-
session.isLoading = false;
|
|
126
|
-
session.authError = err;
|
|
127
|
-
setSession(session.clone());
|
|
128
|
-
return;
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
if (err instanceof STSError) {
|
|
132
|
-
console.error('STS error during token exchange', err);
|
|
133
|
-
Env.logger.error('STS error during token exchange', {
|
|
134
|
-
vertesia: {
|
|
135
|
-
account_id: selectedAccount,
|
|
136
|
-
project_id: selectedProject,
|
|
137
|
-
sts_url: err.stsURL,
|
|
138
|
-
error: err,
|
|
139
|
-
},
|
|
140
|
-
});
|
|
141
|
-
window.alert(
|
|
142
|
-
'Authentication failed due to an issue with the authentication service. Please try again later.',
|
|
143
|
-
);
|
|
144
|
-
session.logout();
|
|
145
|
-
setSession(session.clone());
|
|
146
|
-
clearAuthHash();
|
|
147
|
-
return;
|
|
148
|
-
}
|
|
189
|
+
if (surfaceAuthError(err, true)) return;
|
|
149
190
|
|
|
150
191
|
console.error('Failed to fetch user token from studio, redirecting to central auth', err);
|
|
151
192
|
Env.logger.error('Failed to fetch user token from studio, redirecting to central auth', {
|
|
@@ -221,20 +262,12 @@ export function UserSessionProvider({ children, loadOnboardingStatus = true }: U
|
|
|
221
262
|
.then(() => setSession(session.clone()));
|
|
222
263
|
})
|
|
223
264
|
.catch((err) => {
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
project_id: selectedProject,
|
|
229
|
-
error: err,
|
|
230
|
-
},
|
|
265
|
+
if (surfaceAuthError(err)) return;
|
|
266
|
+
console.error('Unexpected failure while fetching a user token', err);
|
|
267
|
+
Env.logger.error('Unexpected failure while fetching a user token', {
|
|
268
|
+
vertesia: { account_id: selectedAccount, project_id: selectedProject, error: err },
|
|
231
269
|
});
|
|
232
|
-
|
|
233
|
-
// RestrictedEnvironmentError (identity is valid; the environment is gated).
|
|
234
|
-
// Logging out would retrigger onAuthStateChanged and clear the authError.
|
|
235
|
-
if (!(err instanceof UserNotFoundError) && !(err instanceof RestrictedEnvironmentError)) {
|
|
236
|
-
session.logout();
|
|
237
|
-
}
|
|
270
|
+
session.logout();
|
|
238
271
|
session.isLoading = false;
|
|
239
272
|
session.authError = err;
|
|
240
273
|
setSession(session.clone());
|
|
@@ -274,6 +307,7 @@ export function UserSessionProvider({ children, loadOnboardingStatus = true }: U
|
|
|
274
307
|
if (!cancelled) setSession(session.clone());
|
|
275
308
|
})
|
|
276
309
|
.catch((err: unknown) => {
|
|
310
|
+
if (surfaceAuthError(err)) return;
|
|
277
311
|
console.warn('Auth: failed to initialize injected auth token', err);
|
|
278
312
|
Env.logger.warn('Failed to initialize injected auth token', {
|
|
279
313
|
vertesia: {
|
|
@@ -282,7 +316,9 @@ export function UserSessionProvider({ children, loadOnboardingStatus = true }: U
|
|
|
282
316
|
error: err,
|
|
283
317
|
},
|
|
284
318
|
});
|
|
285
|
-
|
|
319
|
+
session.isLoading = false;
|
|
320
|
+
session.authError = err instanceof Error ? err : new Error(String(err));
|
|
321
|
+
setSession(session.clone());
|
|
286
322
|
});
|
|
287
323
|
return () => {
|
|
288
324
|
cancelled = true;
|