From 251e4f4bd5142d49d94236f392e6a8b80694b7cc Mon Sep 17 00:00:00 2001 From: Rodrigo Fournier Date: Wed, 17 Dec 2025 10:46:05 +1100 Subject: [PATCH 1/3] feat(passport): add support for 'subscribed' marketing consent status - Add Subscribed enum value to MarketingConsentStatus - Add parsing for 'subscribed' status in PassportUI login flow - Update ToApiString() method to handle 'subscribed' conversion Ensures compatibility with Auth0 default marketing consent value --- .../Runtime/Scripts/Private/Model/MarketingConsentStatus.cs | 2 ++ src/Packages/Passport/Runtime/Scripts/Public/PassportUI.cs | 3 +++ 2 files changed, 5 insertions(+) diff --git a/src/Packages/Passport/Runtime/Scripts/Private/Model/MarketingConsentStatus.cs b/src/Packages/Passport/Runtime/Scripts/Private/Model/MarketingConsentStatus.cs index 07e74fce2..08ba1f557 100644 --- a/src/Packages/Passport/Runtime/Scripts/Private/Model/MarketingConsentStatus.cs +++ b/src/Packages/Passport/Runtime/Scripts/Private/Model/MarketingConsentStatus.cs @@ -9,6 +9,7 @@ namespace Immutable.Passport.Model public enum MarketingConsentStatus { OptedIn, + Subscribed, Unsubscribed } @@ -27,6 +28,7 @@ public static string ToApiString(this MarketingConsentStatus status) return status switch { MarketingConsentStatus.OptedIn => "opted_in", + MarketingConsentStatus.Subscribed => "subscribed", MarketingConsentStatus.Unsubscribed => "unsubscribed", _ => throw new ArgumentOutOfRangeException(nameof(status), status, "Unknown MarketingConsentStatus value") }; diff --git a/src/Packages/Passport/Runtime/Scripts/Public/PassportUI.cs b/src/Packages/Passport/Runtime/Scripts/Public/PassportUI.cs index e6086a995..f985fe674 100644 --- a/src/Packages/Passport/Runtime/Scripts/Public/PassportUI.cs +++ b/src/Packages/Passport/Runtime/Scripts/Public/PassportUI.cs @@ -547,6 +547,9 @@ private async void HandleLoginData(string jsonData) case "opted_in": loginOptions.marketingConsentStatus = MarketingConsentStatus.OptedIn; break; + case "subscribed": + loginOptions.marketingConsentStatus = MarketingConsentStatus.Subscribed; + break; case "unsubscribed": loginOptions.marketingConsentStatus = MarketingConsentStatus.Unsubscribed; break; From 6dbee814c481492ac670890f0b35ee06771f5af2 Mon Sep 17 00:00:00 2001 From: Rodrigo Fournier Date: Wed, 17 Dec 2025 12:22:33 +1100 Subject: [PATCH 2/3] fix(passport): add user-friendly message for 409 error in registerOffchain Following the ts-immutable-sdk Passport v3 refactoring (commit 240cd2f15, Dec 8 2025), which introduced stricter validation via toUserImx() during user registration, we now explicitly handle the 409 Conflict error in ImxRegisterScript. When a user is already registered off-chain, the API returns a 409 error with USER_REGISTRATION_ERROR type. This change detects this specific scenario and displays a user-friendly message: 'Passport account already registered'. This ensures the UI tests (test_4_imx_functions) continue to pass and provides a better user experience when attempting to register an already registered account. --- .../Passport/ImxRegister/ImxRegisterScript.cs | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/Packages/Passport/Samples~/SamplesScenesScripts/Scripts/Passport/ImxRegister/ImxRegisterScript.cs b/src/Packages/Passport/Samples~/SamplesScenesScripts/Scripts/Passport/ImxRegister/ImxRegisterScript.cs index c634a43da..671c48bdd 100644 --- a/src/Packages/Passport/Samples~/SamplesScenesScripts/Scripts/Passport/ImxRegister/ImxRegisterScript.cs +++ b/src/Packages/Passport/Samples~/SamplesScenesScripts/Scripts/Passport/ImxRegister/ImxRegisterScript.cs @@ -43,7 +43,16 @@ public async void RegisterOffchain() } catch (PassportException e) { - ShowOutput($"Unable to register off-chain: {e.Message} ({e.Type})"); + // Handle 409 - account already registered + if (e.Type == PassportErrorType.USER_REGISTRATION_ERROR && + (e.Message.Contains("409") || e.Message.Contains("already registered"))) + { + ShowOutput("Passport account already registered"); + } + else + { + ShowOutput($"Unable to register off-chain: {e.Message} ({e.Type})"); + } } catch (Exception e) { @@ -58,4 +67,4 @@ private void ShowOutput(string message) Output.text = message; } } -} \ No newline at end of file +} From 35000e49718eda3919c7d15530f4da4dab9e54ad Mon Sep 17 00:00:00 2001 From: Rodrigo Fournier Date: Wed, 17 Dec 2025 13:31:35 +1100 Subject: [PATCH 3/3] fix(passport): apply 409 error handling to sample app ImxRegisterScript Apply the same 409 error handling fix to the sample app version of ImxRegisterScript.cs that was previously applied to the Samples~ package version. The CI tests use the sample app directory, so both files need the same fix. --- .../Passport/ImxRegister/ImxRegisterScript.cs | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/sample/Assets/Scripts/Passport/ImxRegister/ImxRegisterScript.cs b/sample/Assets/Scripts/Passport/ImxRegister/ImxRegisterScript.cs index c634a43da..671c48bdd 100644 --- a/sample/Assets/Scripts/Passport/ImxRegister/ImxRegisterScript.cs +++ b/sample/Assets/Scripts/Passport/ImxRegister/ImxRegisterScript.cs @@ -43,7 +43,16 @@ public async void RegisterOffchain() } catch (PassportException e) { - ShowOutput($"Unable to register off-chain: {e.Message} ({e.Type})"); + // Handle 409 - account already registered + if (e.Type == PassportErrorType.USER_REGISTRATION_ERROR && + (e.Message.Contains("409") || e.Message.Contains("already registered"))) + { + ShowOutput("Passport account already registered"); + } + else + { + ShowOutput($"Unable to register off-chain: {e.Message} ({e.Type})"); + } } catch (Exception e) { @@ -58,4 +67,4 @@ private void ShowOutput(string message) Output.text = message; } } -} \ No newline at end of file +}