diff --git a/docs/APIDOCUMENTATION.md b/docs/APIDOCUMENTATION.md
index ed330d3445..e51f98fab9 100644
--- a/docs/APIDOCUMENTATION.md
+++ b/docs/APIDOCUMENTATION.md
@@ -623,7 +623,7 @@ xee
> | name | type | data type | description |
> | ------------ | -------- | ------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------- |
-> | `memberGuid` | optional | string | The GUID of the member to update. If provided, the widget will initiate an OAuth update flow for this member. |
+> | `memberGuid` | optional | string | The GUID of the member to update. If provided, the widget will initiate an OAuth update flow for this member. |
> | `config` | required | [`ClientConfigType`](../typings/connectProps.d.ts#L19) | The connect widget uses the config to set the initial state and behavior of the widget. [More details](./CLIENT_CONFIG.md) |
##### Responses
diff --git a/docs/USER_FEATURES.md b/docs/USER_FEATURES.md
index f9977c878b..9ebed82507 100644
--- a/docs/USER_FEATURES.md
+++ b/docs/USER_FEATURES.md
@@ -33,10 +33,11 @@ const userFeatures = [
When updating a member via OAuth, it is possible for the backend to return a different member GUID (`inbound_member_guid`) than the one used to initiate the flow. This commonly occurs during migrations from non-OAuth to OAuth connections, or when a user signs in with a different set of credentials at the same institution.
The Connect Widget handles this synchronization automatically by:
+
1. Detecting the GUID change upon successful completion of the OAuth flow.
2. Fetching the new member's full record using the `loadMemberByGuid` callback.
3. Updating the internal Redux state to reflect the new `currentMemberGuid` and including the new member record in the list of active members.
4. Seamlessly transitioning the user to the `Connecting` step with the synchronized member data.
-
+
[<-- Back to README](../README.md#props)
diff --git a/src/const/language/es.json b/src/const/language/es.json
index b530c6d907..53f933338d 100644
--- a/src/const/language/es.json
+++ b/src/const/language/es.json
@@ -415,6 +415,15 @@
"To complete your connection, please %1share%2 the following after signing in:": "Para completar su conexión, por favor, %1comparta%2 lo siguiente después de iniciar sesión:",
"Demo mode active": "Modo de demostración activo",
"Live institutions are not available in the demo environment. Please select *MX Bank* to test the connection process.": "Las instituciones en vivo no están disponibles en el entorno de demostración. Seleccione *MX Bank* para probar el proceso de conexión.",
+ "Connection unavailable": "Conexión no disponible",
+ "This institution is experiencing issues that prevent successful connections. It's unclear when this will be resolved.": "Esta institución está experimentando problemas que impiden establecer conexiones exitosas. No está claro cuándo se resolverá esta situación.",
+ "Back": "Retroceder",
+ "We couldn't find any accounts eligible for transfers. Please link a checking or savings account.": "No pudimos encontrar ninguna cuenta que cumpla con los requisitos para realizar transferencias. Vincule, por favor, una cuenta corriente o de ahorros.",
+ "This may be due to closed accounts, revoked access, or a connection issue. Please try again later or connect a different institution.": "Esto puede deberse a cuentas cerradas, acceso revocado o un problema de conexión. Intente nuevamente más tarde o conecte una institución diferente.",
+ "We can't access your accounts because some required permissions weren't granted.": "No podemos acceder a sus cuentas porque no se otorgaron algunos permisos requeridos.",
+ "We're unable to connect to this institution right now. Please try again later.": "Actualmente no podemos conectarnos a esta institución. Intente nuevamente más tarde.",
+ "The institution is temporarily unavailable due to maintenance. Please try again later.": "La institución no está disponible temporalmente debido a mantenimiento. Intente nuevamente más tarde.",
+ "This institution isn't responding right now. Please try again later.": "Esta institución no está respondiendo en este momento. Intente nuevamente más tarde.",
"connect/disclosure/button\u0004Continue": "Continuar",
"connect/disclosure/policy/text\u0004By clicking Continue, you agree to the ": "Al hacer clic en Continuar, tu aceptas la ",
"connect/disclosure/policy/link\u0004MX Privacy Policy.": "Política de privacidad de Money Experience.",
diff --git a/src/const/language/es.po b/src/const/language/es.po
index 70082c4ff0..c94ba5f486 100644
--- a/src/const/language/es.po
+++ b/src/const/language/es.po
@@ -309,8 +309,7 @@ msgstr "Elija una imagen"
msgid "Oops! Something went wrong. Please try again later."
msgstr "¡Oh, no! Algo salió mal. Inténtelo de nuevo más tarde."
-#: src/components/support/SupportMenu.js
-#: src/views/actionableError/useActionableErrorMap.tsx src/views/mfa/MFAStep.js
+#: src/components/support/SupportMenu.js src/views/mfa/MFAStep.js
#: src/views/loginError/SecondaryActions.js
#: src/views/credentials/Credentials.js
msgid "Get help"
@@ -2092,3 +2091,54 @@ msgstr ""
#: src/views/institutionStatusDetails/InstitutionStatusDetails.tsx
msgid "Back"
msgstr "Retroceder"
+
+#: src/views/oauth/WaitingForOAuth.js
+msgid "Failed to synchronize member data"
+msgstr ""
+
+#: src/views/actionableError/useActionableErrorMap.tsx
+msgid ""
+"We couldn't find any accounts eligible for transfers. Please link a checking "
+"or savings account."
+msgstr ""
+"No pudimos encontrar ninguna cuenta que cumpla con los requisitos para "
+"realizar transferencias. Vincule, por favor, una cuenta corriente o de "
+"ahorros."
+
+#: src/views/actionableError/useActionableErrorMap.tsx
+msgid ""
+"This may be due to closed accounts, revoked access, or a connection issue. "
+"Please try again later or connect a different institution."
+msgstr ""
+"Esto puede deberse a cuentas cerradas, acceso revocado o un problema de "
+"conexión. Intente nuevamente más tarde o conecte una institución diferente."
+
+#: src/views/actionableError/useActionableErrorMap.tsx
+msgid ""
+"We can't access your accounts because some required permissions weren't "
+"granted."
+msgstr ""
+"No podemos acceder a sus cuentas porque no se otorgaron algunos permisos "
+"requeridos."
+
+#: src/views/actionableError/useActionableErrorMap.tsx
+msgid ""
+"We're unable to connect to this institution right now. Please try again "
+"later."
+msgstr ""
+"Actualmente no podemos conectarnos a esta institución. Intente nuevamente "
+"más tarde."
+
+#: src/views/actionableError/useActionableErrorMap.tsx
+msgid ""
+"The institution is temporarily unavailable due to maintenance. Please try "
+"again later."
+msgstr ""
+"La institución no está disponible temporalmente debido a mantenimiento. "
+"Intente nuevamente más tarde."
+
+#: src/views/actionableError/useActionableErrorMap.tsx
+msgid "This institution isn't responding right now. Please try again later."
+msgstr ""
+"Esta institución no está respondiendo en este momento. Intente nuevamente "
+"más tarde."
diff --git a/src/const/language/frCa.json b/src/const/language/frCa.json
index 400b296399..71b61c08ca 100644
--- a/src/const/language/frCa.json
+++ b/src/const/language/frCa.json
@@ -416,6 +416,17 @@
"To complete your connection, please %1share%2 the following after signing in:": "Pour finaliser votre connexion, veuillez %1partager%2 les informations suivantes après vous être connecté :",
"Demo mode active": "Mode démo actif",
"Live institutions are not available in the demo environment. Please select *MX Bank* to test the connection process.": "Les établissements réels ne sont pas disponibles dans l'environnement de démonstration. Veuillez sélectionner *MX Bank* pour tester la procédure de connexion.",
+ "Connection unavailable": "Connexion indisponible",
+ "This institution is experiencing issues that prevent successful connections. It's unclear when this will be resolved.": "Cet établissement rencontre des problèmes qui empêchent d'établir des connexions. Il est difficile de déterminer quand la situation sera résolue.",
+ "Back": "Reculer",
+ "We couldn't find any accounts eligible for transfers. Please link a checking or savings account.": "Nous n'avons trouvé aucun compte admissible aux virements. Veuillez lier un compte chèques ou un compte d'épargne.",
+ "Successfully authenticated but no active or eligible accounts found. Verify account status at institution.": "Authentification réussie, mais aucun compte actif ou éligible trouvé. Vérifiez le statut du compte auprès de l'institution.",
+ "This may be due to closed accounts, revoked access, or a connection issue. Please try again later or connect a different institution.": "Cela peut être dû à des comptes fermés, un accès révoqué ou un problème de connexion. Veuillez réessayer plus tard ou connecter une autre institution.",
+ "OAuth access denied to required account data. User likely declined necessary permissions during OAuth flow. User may need to re-authorize and grant permissions.": "Accès OAuth refusé aux données de compte requises. L'utilisateur a probablement refusé les permissions nécessaires pendant le flux OAuth. L'utilisateur devra peut-être ré-autoriser et accorder les permissions.",
+ "We can't access your accounts because some required permissions weren't granted.": "Nous ne pouvons pas accéder à vos comptes car certaines permissions requises n'ont pas été accordées.",
+ "We're unable to connect to this institution right now. Please try again later.": "Nous ne parvenons pas à nous connecter à cette institution pour le moment. Veuillez réessayer plus tard.",
+ "The institution is temporarily unavailable due to maintenance. Please try again later.": "L'institution est temporairement indisponible en raison de la maintenance. Veuillez réessayer plus tard.",
+ "This institution isn't responding right now. Please try again later.": "Cette institution ne répond pas pour le moment. Veuillez réessayer plus tard.",
"connect/disclosure/policy/text\u0004By clicking Continue, you agree to the ": "En cliquant sur Continuer, vous acceptez la ",
"connect/disclosure/policy/link\u0004MX Privacy Policy.": "Politique de confidentialité de MX.",
"connect/disclosure/policy/link\u0004MX Privacy Policy": "Politique de confidentialité de MX.",
diff --git a/src/const/language/frCa.po b/src/const/language/frCa.po
index edd8c3537c..acbbea266a 100644
--- a/src/const/language/frCa.po
+++ b/src/const/language/frCa.po
@@ -462,8 +462,7 @@ msgid "Oops! Something went wrong. Please try again later."
msgstr "Attention : un problème est survenu. Veuillez réessayer plus tard."
# TRANSLATED
-#: src/components/support/SupportMenu.js
-#: src/views/actionableError/useActionableErrorMap.tsx src/views/mfa/MFAStep.js
+#: src/components/support/SupportMenu.js src/views/mfa/MFAStep.js
#: src/views/loginError/SecondaryActions.js
#: src/views/credentials/Credentials.js
msgid "Get help"
@@ -2171,3 +2170,68 @@ msgstr ""
#: src/views/institutionStatusDetails/InstitutionStatusDetails.tsx
msgid "Back"
msgstr "Reculer"
+
+#: src/views/oauth/WaitingForOAuth.js
+msgid "Failed to synchronize member data"
+msgstr ""
+
+#: src/views/actionableError/useActionableErrorMap.tsx
+msgid ""
+"We couldn't find any accounts eligible for transfers. Please link a checking "
+"or savings account."
+msgstr ""
+"Nous n'avons trouvé aucun compte admissible aux virements. Veuillez lier un "
+"compte chèques ou un compte d'épargne."
+
+msgid ""
+"Successfully authenticated but no active or eligible accounts found. Verify "
+"account status at institution."
+msgstr ""
+"Authentification réussie, mais aucun compte actif ou éligible trouvé. "
+"Vérifiez le statut du compte auprès de l'institution."
+
+#: src/views/actionableError/useActionableErrorMap.tsx
+msgid ""
+"This may be due to closed accounts, revoked access, or a connection issue. "
+"Please try again later or connect a different institution."
+msgstr ""
+"Cela peut être dû à des comptes fermés, un accès révoqué ou un problème de "
+"connexion. Veuillez réessayer plus tard ou connecter une autre institution."
+
+msgid ""
+"OAuth access denied to required account data. User likely declined necessary "
+"permissions during OAuth flow. User may need to re-authorize and grant "
+"permissions."
+msgstr ""
+"Accès OAuth refusé aux données de compte requises. L'utilisateur a "
+"probablement refusé les permissions nécessaires pendant le flux OAuth. "
+"L'utilisateur devra peut-être ré-autoriser et accorder les permissions."
+
+#: src/views/actionableError/useActionableErrorMap.tsx
+msgid ""
+"We can't access your accounts because some required permissions weren't "
+"granted."
+msgstr ""
+"Nous ne pouvons pas accéder à vos comptes car certaines permissions requises "
+"n'ont pas été accordées."
+
+#: src/views/actionableError/useActionableErrorMap.tsx
+msgid ""
+"We're unable to connect to this institution right now. Please try again "
+"later."
+msgstr ""
+"Nous ne parvenons pas à nous connecter à cette institution pour le moment. "
+"Veuillez réessayer plus tard."
+
+#: src/views/actionableError/useActionableErrorMap.tsx
+msgid ""
+"The institution is temporarily unavailable due to maintenance. Please try "
+"again later."
+msgstr ""
+"L'institution est temporairement indisponible en raison de la maintenance. "
+"Veuillez réessayer plus tard."
+
+#: src/views/actionableError/useActionableErrorMap.tsx
+msgid "This institution isn't responding right now. Please try again later."
+msgstr ""
+"Cette institution ne répond pas pour le moment. Veuillez réessayer plus tard."
diff --git a/src/views/actionableError/ActionableError.tsx b/src/views/actionableError/ActionableError.tsx
index 5a2239f198..349286154b 100644
--- a/src/views/actionableError/ActionableError.tsx
+++ b/src/views/actionableError/ActionableError.tsx
@@ -72,7 +72,7 @@ export const ActionableError = () => {
truncate={false}
variant="Paragraph"
>
- {currentMember.error.user_message}
+ {errorDetails?.userMessage || currentMember.error.user_message}
diff --git a/src/views/actionableError/useActionableErrorMap.tsx b/src/views/actionableError/useActionableErrorMap.tsx
index 22a86f7f7f..9bdae93168 100644
--- a/src/views/actionableError/useActionableErrorMap.tsx
+++ b/src/views/actionableError/useActionableErrorMap.tsx
@@ -13,6 +13,7 @@ type ActionableErrorAction = {
}
type ActionableErrorMapEntry = {
title: string
+ userMessage?: string
primaryAction: ActionableErrorAction
secondaryActions?: ActionableErrorAction
}
@@ -37,27 +38,43 @@ export const useActionableErrorMap = (jobDetailCode: number) => {
() => ({
[ACTIONABLE_ERROR_CODES.NO_ELIGIBLE_ACCOUNTS]: {
title: __('No eligible accounts'),
+ userMessage: __(
+ "We couldn't find any accounts eligible for transfers. Please link a checking or savings account.",
+ ),
primaryAction: { label: __('Log in again'), action: goToCredentials },
secondaryActions: { label: __('Connect a different institution'), action: goToSearch },
},
[ACTIONABLE_ERROR_CODES.NO_ACCOUNTS]: {
title: __('No accounts found'),
+ userMessage: __(
+ 'This may be due to closed accounts, revoked access, or a connection issue. Please try again later or connect a different institution.',
+ ),
primaryAction: { label: __('Return to institution selection'), action: goToSearch },
},
[ACTIONABLE_ERROR_CODES.ACCESS_DENIED]: {
title: __('Additional permissions needed'),
+ userMessage: __(
+ "We can't access your accounts because some required permissions weren't granted.",
+ ),
primaryAction: { label: __('Review instructions'), action: goToCredentials },
},
[ACTIONABLE_ERROR_CODES.INSTITUTION_DOWN]: {
title: __('Unable to connect'),
+ userMessage: __(
+ "We're unable to connect to this institution right now. Please try again later.",
+ ),
primaryAction: { label: __('Return to institution selection'), action: goToSearch },
},
[ACTIONABLE_ERROR_CODES.INSTITUTION_MAINTENANCE]: {
title: __('Maintenance in progress'),
+ userMessage: __(
+ 'The institution is temporarily unavailable due to maintenance. Please try again later.',
+ ),
primaryAction: { label: __('Return to institution selection'), action: goToSearch },
},
[ACTIONABLE_ERROR_CODES.INSTITUTION_UNAVAILABLE]: {
title: __('Unable to connect'),
+ userMessage: __("This institution isn't responding right now. Please try again later."),
primaryAction: { label: __('Return to institution selection'), action: goToSearch },
},
}),