Skip to content

feat(core): migrate group scoped name #1265

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 73 commits into
base: VT20-1919-create-group-profile
Choose a base branch
from

Conversation

jimcase
Copy link
Contributor

@jimcase jimcase commented Jul 14, 2025

Description

Currently, each identifier has only 1 display name, and the entire wallet has a username which is shared with connections. In the new account based flow, this global username is being removed.

Instead:

  • We will share the display name of individual identifiers

  • Groups will have a group name (same as display name), and a “username” per group

    • The group name is shared with connections

    • The username is shared with other members of the group when setting up the group

Refactor defaultProfile to currentAccount

The selected profile is moved and refactored to stateCache, outside of Authentification Object, as it is independent of the auth. See here:

...
const initialState: StateCacheProps = {
  initializationPhase: InitializationPhase.PHASE_ZERO,
  recoveryCompleteNoInterruption: false,
  isOnline: false,
  routes: [],
  currentProfile: "",
  authentication: {
    loggedIn: false,
...

New methods:

setCurrentProfile()
getCurrentProfile()

New method file habName to parse the identifier names:

New format example: 1.2.0.3:theme:isInitiator-groupId-userName:displayName

parseHabName is a utility function designed to deconstruct a structured "hab name" string into its individual components. It takes a single name: string argument, which is expected to follow the format version:isInitiator-group_id-username:display_name. The function then parses this string and returns an object of type HabNameParts, providing programmatic access to extracted fields such as version, isInitiator (a boolean indicating if the current entity is the group initiator), groupId, userName, and displayName.

formatToV1_2_0_3 is a utility function that constructs a "hab name" string from its individual components, specifically adhering to the 1.2.0.3 version format. It takes an object of type HabNameParts (which contains fields like version, isInitiator, groupId, userName, and displayName) and serializes them into the precise string
format version:isInitiator-group_id-username:display_name.

Checklist before requesting a review

Issue ticket number and link

  • This PR has a valid ticket number or issue: VT20-1972

Testing & Validation

  • This PR has been tested/validated in iOS, Android and browser.
  • Added new unit tests, if relevant.

Design Review

  • [] In case this PR contains changes to the UI, add some screenshots and/or videos to show the changes on relevant devices.

@jimcase jimcase self-assigned this Jul 14, 2025
@jimcase jimcase changed the title Feature/cherypick migrate group name feat(core): migrate group scoped name Jul 14, 2025
theme,
};
}
}

export function formatToV1_2_0_3(parts: HabNameParts): string {
const version = "1.2.0.3";
const themePart = parts.theme || ""; // Ensure theme is not undefined
const displayNamePart = parts.displayName || ""; // Ensure display name is not undefined
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

displayName is always defined.

Theme should also always be defined after this now - can we remove ? in HabNameParts

// New format
if (parts.length !== 4) {
throw new Error(
"Invalid new format name: Expected 4 parts separated by colons (version:theme:groupPart:displayName)."
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

But this only applies to mHab identifiers. Individual identifiers and the gHab identifier don't have a groupPart

Copy link
Contributor

@sdisalvo-crd sdisalvo-crd left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As per DM there's something not working when creating the group profile. Everything else makes sense so far.

Please let me know when you need a review again or ask @Sotatek-DukeVu if I am not around.

Comment on lines -48 to -49
USERNAME_CREATION_SUCCESS = "usernameCreationSuccess",
USERNAME_CREATION_ERROR = "usernameCreationError",
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Also need to remove from en.json if no longer needed.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants