import { Organization } from './organization.interface' import { SecurityGroup } from './privileges.interface' export interface UserApiData { id: string cn: string mail: string note: string mobile?: string landingPage?: string preferredLanguage: string selectedOrganization: string sn: string timezone: string } export interface UserCreateData { uid: string cn: string email: string note: string mobile?: string landing_page: string preferredLanguage: string preferred_organization: string sn: string timezone: string password: string } export interface ProfileOptions { useCache?: boolean autoLogin?: boolean } export interface ProfileData { uid: string id: string sn: string cn: string email: string landingPage?: string selectedOrganization?: Organization preferredOrganization?: Organization preferredLanguage: string timezone: string mobile: string note: string } export interface ProfileDataExtended extends ProfileData { emailConfirmed: boolean securityGroups?: SecurityGroup[] superAdmin?: boolean } export type ProfileFormData = Partial<{ [key in EditableUserAttributes]: T }> export interface SelfRegisterFormData { cn: string mobile?: string preferredLanguage: string sn: string timezone: string uid: string password: string } export interface RegisterFormData extends SelfRegisterFormData { mail: string autoConfirmEmail?: boolean } export interface ChangePasswordFormData { password: string confirmPassword: string } export interface UserInfoPayload { uids: TUid[] required_info: TAttr[] } /* prettier-ignore */ export type UsersInfoResponse = Record & { [uid in TUid]: { uid: string } & { [key in TAttr & EditableRequiredUserAttributes]: string } & { [key in TAttr & OptionalUserAttributes]?: string } & { [key in TAttr & 'preferredLanguage']: string } } type EditableRequiredUserAttributes = Exclude< RequiredUserAttributes, 'uid' | 'password' | 'preferredOrganization' > export type EditableUserAttributes = | OptionalUserAttributes | EditableRequiredUserAttributes type OptionalUserAttributes = 'landingPage' | 'mobile' | 'note' // uid must be longer than 3 chars, matching regex /[a-zA-Z0-9_-]+/ and contain at least 1 number type RequiredUserAttributes = | 'uid' | 'password' | 'mail' | 'cn' | 'sn' | 'timezone' | 'preferredOrganization' | 'preferredLanguage' type Lit = | string | number | boolean | undefined | null | void | Record /** * Enables to create tuples (arrays with defined length and allowed elements) from a list of values * * Reference: https://stackoverflow.com/questions/45251664/typescript-derive-union-type-from-tuple-array-values/45257357#45257357 */ const tuple = (...args: T) => args export const editableUserAttributesTuple = tuple( 'landingPage', 'mobile', 'note', 'mail', 'cn', 'sn', 'timezone', 'preferredLanguage', ) export class UserElementError extends Error {} /** * Profile picture size options */ export type ProfilePictureSize = 'thumb' | 'medium' | 'large' /** * Response structure for profile picture upload */ export interface ProfilePictureUploadResponse { /** Success message */ message: string /** Array of signed URLs for different image sizes */ urls: string[] } /** * Response structure for profile picture retrieval */ export interface ProfilePictureResponse { /** Success message */ message: string /** Signed URL for the requested image size */ url: string }