Files
fusion/packages/dashboard/app/utils/shell-connection-settings.ts
Fusion e411e3ce06 feat(FN-3403): add shell multi-profile support with connection manager onbo
Merges shell multi-profile support for desktop (FN-3403) — spanning new connection-manager flows, shell onboarding interoperability, mobile connection profiles, desktop IPC/shell-settings plumbing, and tokenized titlebar styles — with a secondary migration of the WhatsApp plugin to the Baileys pairi

Fusion-Task-Id: FN-3403
2026-05-07 18:35:45 -07:00

65 lines
1.7 KiB
TypeScript

import type {
FusionShellApi,
ShellConnectionProfile,
ShellConnectionProfileInput,
ShellConnectionState,
} from "../types/native-shell";
export const DEFAULT_WEB_SHELL_STATE: ShellConnectionState = {
host: "web",
activeProfileId: null,
profiles: [],
};
export function normalizeShellState(state: ShellConnectionState | null | undefined): ShellConnectionState {
if (!state) {
return DEFAULT_WEB_SHELL_STATE;
}
const profiles = Array.isArray(state.profiles)
? state.profiles.filter((profile): profile is ShellConnectionProfile => Boolean(profile && profile.id && profile.serverUrl))
: [];
const activeProfileId =
state.activeProfileId && profiles.some((profile) => profile.id === state.activeProfileId)
? state.activeProfileId
: null;
return {
...state,
activeProfileId,
profiles,
};
}
function unsupportedError(action: string): Error {
return new Error(`${action} is only available in native shell mode`);
}
export async function createOrUpdateProfile(
shellApi: FusionShellApi | null,
profile: ShellConnectionProfileInput,
): Promise<ShellConnectionProfile> {
if (!shellApi) {
throw unsupportedError("Saving connection profiles");
}
return shellApi.saveProfile(profile);
}
export async function deleteProfile(shellApi: FusionShellApi | null, profileId: string): Promise<void> {
if (!shellApi) {
throw unsupportedError("Deleting connection profiles");
}
await shellApi.deleteProfile(profileId);
}
export async function selectActiveProfile(
shellApi: FusionShellApi | null,
profileId: string | null,
): Promise<ShellConnectionState> {
if (!shellApi) {
throw unsupportedError("Switching connection profiles");
}
return shellApi.setActiveProfile(profileId);
}