[PERS SDK - v2.3.26](/sdk-reference/readme) / [Exports](/sdk-reference/modules) / UserManager

# Class: UserManager

User Manager - Clean, high-level interface for user operations

Provides a simplified API for common user management tasks including profile
management, user lookup, and administrative operations. Maintains access to
the full user SDK for advanced use cases.

**`Example`**

```typescript
// Get current user
const user = await sdk.users.getCurrentUser();

// Update current user profile
const updated = await sdk.users.updateCurrentUser({
  name: 'New Name',
  email: 'new@email.com'
});

// Get user by ID
const specificUser = await sdk.users.getUserById('user-123');
```

**`Example`**

```typescript
// Get all users' public profiles
const publicProfiles = await sdk.users.getAllUsersPublic();

// Get users with filter
const filteredUsers = await sdk.users.getAllUsersPublic({
  key: 'city',
  value: 'New York'
});

// Get a single user's public profile by ID (no auth required)
const oneProfile = await sdk.users.getPublicProfile('user-123');
```

**`Example`**

```typescript
// Admin: Get all users (full data)
const allUsers = await sdk.users.getAllUsers();

// Admin: Update any user
const updated = await sdk.users.updateUser('user-123', {
  name: 'Updated Name'
});

// Admin: Toggle user status
await sdk.users.toggleUserStatus(user);
```

## Table of contents

### Constructors

- [constructor](/sdk-reference/classes/usermanager#constructor)


### Methods

- [getCurrentUser](/sdk-reference/classes/usermanager#getcurrentuser)
- [updateCurrentUser](/sdk-reference/classes/usermanager#updatecurrentuser)
- [getUserById](/sdk-reference/classes/usermanager#getuserbyid)
- [getAllUsersPublic](/sdk-reference/classes/usermanager#getalluserspublic)
- [getPublicProfile](/sdk-reference/classes/usermanager#getpublicprofile)
- [getAllUsers](/sdk-reference/classes/usermanager#getallusers)
- [createOrUpdateUser](/sdk-reference/classes/usermanager#createorupdateuser)
- [createOrUpdateUsers](/sdk-reference/classes/usermanager#createorupdateusers)
- [updateUser](/sdk-reference/classes/usermanager#updateuser)
- [setUserActiveStatus](/sdk-reference/classes/usermanager#setuseractivestatus)
- [deleteUser](/sdk-reference/classes/usermanager#deleteuser)
- [restoreUser](/sdk-reference/classes/usermanager#restoreuser)
- [exportCSV](/sdk-reference/classes/usermanager#exportcsv)
- [getUserService](/sdk-reference/classes/usermanager#getuserservice)


## Constructors

### constructor

• **new UserManager**(`apiClient`, `events?`): [`UserManager`](/sdk-reference/classes/usermanager)

#### Parameters

| Name | Type |
|  --- | --- |
| `apiClient` | [`PersApiClient`](/sdk-reference/classes/persapiclient) |
| `events?` | [`PersEventEmitter`](/sdk-reference/classes/perseventemitter) |


#### Returns

[`UserManager`](/sdk-reference/classes/usermanager)

#### Defined in

[managers/user-manager.ts:71](https://github.com/eXplorins/PERS-sdks/blob/main/packages/pers-sdk/packages/pers-sdk/src/managers/user-manager.ts#L71)

## Methods

### getCurrentUser

▸ **getCurrentUser**(`options?`): `Promise`<`UserDTO`>

Get current user profile

Retrieves the complete profile of the currently authenticated user.
Requires valid authentication tokens.

#### Parameters

| Name | Type | Description |
|  --- | --- | --- |
| `options?` | `UserQueryParams` | Query options. Use `include` to specify relations: 'status' (user status types), 'balances' (token balances) |


#### Returns

`Promise`<`UserDTO`>

Promise resolving to current user data with full profile information

**`Throws`**

When user is not authenticated

**`Example`**

```typescript
try {
  const user = await sdk.users.getCurrentUser();
  console.log('Current user:', user.firstName, user.email);
} catch (error) {
  console.log('User not authenticated');
}
```

**`Example`**

```typescript
// Include status types and token balances
const user = await sdk.users.getCurrentUser({ 
  include: ['status', 'balances'] 
});
console.log('Status types:', user.included?.statusTypes);
console.log('Token balances:', user.included?.tokenBalances);
```

#### Defined in

[managers/user-manager.ts:109](https://github.com/eXplorins/PERS-sdks/blob/main/packages/pers-sdk/packages/pers-sdk/src/managers/user-manager.ts#L109)

### updateCurrentUser

▸ **updateCurrentUser**(`userData`): `Promise`<`UserDTO`>

Update current user profile

Updates the profile information for the currently authenticated user.
Only the provided fields will be updated; omitted fields remain unchanged.

#### Parameters

| Name | Type | Description |
|  --- | --- | --- |
| `userData` | `UserCreateRequestDTO` | User data to update (partial update supported) |


#### Returns

`Promise`<`UserDTO`>

Promise resolving to updated user data

**`Throws`**

When user is not authenticated or validation fails

**`Example`**

```typescript
const updated = await sdk.users.updateCurrentUser({
  name: 'John Smith',
  email: 'john.smith@example.com'
});
console.log('Profile updated:', updated.name);
```

**`Example`**

```typescript
// Only update the name, keep other fields unchanged
const updated = await sdk.users.updateCurrentUser({
  name: 'New Display Name'
});
```

#### Defined in

[managers/user-manager.ts:149](https://github.com/eXplorins/PERS-sdks/blob/main/packages/pers-sdk/packages/pers-sdk/src/managers/user-manager.ts#L149)

### getUserById

▸ **getUserById**(`identifier`, `options?`): `Promise`<`UserDTO`>

Get user by unique identifier

Retrieves a user's profile using their unique identifier. This method
requires appropriate permissions (admin or specific access rights).

#### Parameters

| Name | Type | Description |
|  --- | --- | --- |
| `identifier` | `string` | Unique identifier for the user (user ID, email, etc.) |
| `options?` | `UserQueryParams` | Query options. Use `include` to specify relations: 'status' (user status types), 'balances' (token balances) |


#### Returns

`Promise`<`UserDTO`>

Promise resolving to user data

**`Throws`**

When user not found or insufficient permissions

**`Example`**

```typescript
try {
  const user = await sdk.users.getUserById('user-123');
  console.log('Found user:', user.firstName);
} catch (error) {
  if (error.statusCode === 404) {
    console.log('User not found');
  }
}
```

**`Example`**

```typescript
// Get user with status types and token balances
const user = await sdk.users.getUserById('user-123', { 
  include: ['status', 'balances'] 
});
console.log('Status types:', user.included?.statusTypes);
console.log('Token balances:', user.included?.tokenBalances);
```

#### Defined in

[managers/user-manager.ts:195](https://github.com/eXplorins/PERS-sdks/blob/main/packages/pers-sdk/packages/pers-sdk/src/managers/user-manager.ts#L195)

### getAllUsersPublic

▸ **getAllUsersPublic**(`filter?`, `options?`): `Promise`<`PaginatedResponseDTO`<[`UserPublicProfileDTO`](/sdk-reference/interfaces/userpublicprofiledto)>>

Get all users public profiles with optional filtering

Retrieves public profile information for all users. This data is limited
to publicly viewable fields only (name, profile picture, etc.).

#### Parameters

| Name | Type | Description |
|  --- | --- | --- |
| `filter?` | `Object` | Optional filter criteria to narrow results |
| `filter.key` | `string` | Field name to filter by |
| `filter.value` | `string` | Value to match for the specified field |
| `options?` | `PaginationOptions` | - |


#### Returns

`Promise`<`PaginatedResponseDTO`<[`UserPublicProfileDTO`](/sdk-reference/interfaces/userpublicprofiledto)>>

Promise resolving to array of user public profiles

**`Example`**

```typescript
const publicProfiles = await sdk.users.getAllUsersPublic();
console.log(`Found ${publicProfiles.length} users`);

publicProfiles.forEach(profile => {
  console.log('User:', profile.name);
  // Note: Only public fields are available
});
```

**`Example`**

```typescript
// Get users from a specific city
const cityUsers = await sdk.users.getAllUsersPublic({
  key: 'city',
  value: 'San Francisco'
});

// Get users with specific role
const roleUsers = await sdk.users.getAllUsersPublic({
  key: 'role',
  value: 'premium'
});
```

#### Defined in

[managers/user-manager.ts:236](https://github.com/eXplorins/PERS-sdks/blob/main/packages/pers-sdk/packages/pers-sdk/src/managers/user-manager.ts#L236)

### getPublicProfile

▸ **getPublicProfile**(`id`): `Promise`<[`UserPublicProfileDTO`](/sdk-reference/interfaces/userpublicprofiledto)>

Get a single user's public profile by ID

Retrieves the publicly viewable profile for one user, without requiring
authentication. Useful for public profile pages/widgets where the viewer
may or may not be logged in as that user.

#### Parameters

| Name | Type | Description |
|  --- | --- | --- |
| `id` | `string` | The user's unique ID |


#### Returns

`Promise`<[`UserPublicProfileDTO`](/sdk-reference/interfaces/userpublicprofiledto)>

Promise resolving to the user's public profile

**`Throws`**

When no user exists with that ID

**`Example`**

```typescript
const profile = await sdk.users.getPublicProfile(routeId);
console.log(profile.publicProfile);
```

#### Defined in

[managers/user-manager.ts:257](https://github.com/eXplorins/PERS-sdks/blob/main/packages/pers-sdk/packages/pers-sdk/src/managers/user-manager.ts#L257)

### getAllUsers

▸ **getAllUsers**(`options?`, `search?`): `Promise`<`PaginatedResponseDTO`<`UserDTO`>>

Admin: Get all users

Retrieves complete user data for all users in the system. This method
requires administrator privileges and returns full user profiles including
private information.

#### Parameters

| Name | Type | Description |
|  --- | --- | --- |
| `options?` | `PaginationOptions` | Pagination options (page, limit, sortBy, sortOrder) |
| `search?` | `string` | Optional search query to filter users |


#### Returns

`Promise`<`PaginatedResponseDTO`<`UserDTO`>>

Promise resolving to paginated users with complete data

**`Throws`**

When not authenticated as admin

**`Example`**

```typescript
// Admin operation - requires admin authentication
try {
  const result = await sdk.users.getAllUsers();
  console.log(`Total users: ${result.pagination.total}`);
  
  result.data.forEach(user => {
    console.log(`${user.firstName} - ${user.email} - Active: ${user.isActive}`);
  });
} catch (error) {
  console.log('Admin access required');
}
```

**`Example`**

```typescript
import { SortOrder } from '@explorins/pers-sdk';

// Get users sorted by email ascending
const result = await sdk.users.getAllUsers({
  page: 1,
  limit: 20,
  sortBy: 'email',
  sortOrder: SortOrder.ASC
});

// Get users sorted by creation date (newest first)
const recent = await sdk.users.getAllUsers({
  page: 1,
  limit: 10,
  sortBy: 'createdAt',
  sortOrder: SortOrder.DESC
});
```

#### Defined in

[managers/user-manager.ts:309](https://github.com/eXplorins/PERS-sdks/blob/main/packages/pers-sdk/packages/pers-sdk/src/managers/user-manager.ts#L309)

### createOrUpdateUser

▸ **createOrUpdateUser**(`userData`): `Promise`<`UserDTO`>

Business/Admin: Create or update a user

Creates a new user or updates an existing one. This method requires
business authentication (with canManageUsers permission) or admin authentication.

#### Parameters

| Name | Type | Description |
|  --- | --- | --- |
| `userData` | `UserCreateRequestDTO` | User data for creation/update |


#### Returns

`Promise`<`UserDTO`>

Promise resolving to created or updated user

**`Throws`**

When not authenticated or insufficient permissions

**`Example`**

```typescript
// Business or Admin operation - create a new user
const newUser = await sdk.users.createOrUpdateUser({
  identifierEmail: 'newuser@example.com',
  firstName: 'John',
  lastName: 'Doe',
  externalId: 'external-123'
});
console.log('User created:', newUser.id);
```

**`Example`**

```typescript
// If user with same identifier exists, it will be updated
const updated = await sdk.users.createOrUpdateUser({
  identifierEmail: 'existing@example.com',
  firstName: 'Updated Name'
});
```

#### Defined in

[managers/user-manager.ts:344](https://github.com/eXplorins/PERS-sdks/blob/main/packages/pers-sdk/packages/pers-sdk/src/managers/user-manager.ts#L344)

### createOrUpdateUsers

▸ **createOrUpdateUsers**(`users`): `Promise`<`UserDTO`[]>

Admin: Bulk create or update users

Creates or updates multiple users in a single operation. This method
requires admin authentication - business users cannot perform bulk operations.

#### Parameters

| Name | Type | Description |
|  --- | --- | --- |
| `users` | `UserCreateRequestDTO`[] | Array of user data for creation/update |


#### Returns

`Promise`<`UserDTO`[]>

Promise resolving to array of created/updated users

**`Throws`**

When not authenticated as admin

**`Example`**

```typescript
// Admin-only operation - bulk create users
const users = await sdk.users.createOrUpdateUsers([
  { identifierEmail: 'user1@example.com', firstName: 'User', lastName: 'One' },
  { identifierEmail: 'user2@example.com', firstName: 'User', lastName: 'Two' },
  { identifierEmail: 'user3@example.com', firstName: 'User', lastName: 'Three' }
]);
console.log(`Created ${users.length} users`);
```

#### Defined in

[managers/user-manager.ts:369](https://github.com/eXplorins/PERS-sdks/blob/main/packages/pers-sdk/packages/pers-sdk/src/managers/user-manager.ts#L369)

### updateUser

▸ **updateUser**(`userId`, `userData`): `Promise`<`UserDTO`>

Admin: Update user data

Updates profile information for any user in the system. This method
requires administrator privileges and can modify any user's profile.

#### Parameters

| Name | Type | Description |
|  --- | --- | --- |
| `userId` | `string` | ID of user to update |
| `userData` | `UserCreateRequestDTO` | User data to update (partial update supported) |


#### Returns

`Promise`<`UserDTO`>

Promise resolving to updated user data

**`Throws`**

When not authenticated as admin or user not found

**`Example`**

```typescript
// Admin operation - update any user's profile
try {
  const updated = await sdk.users.updateUser('user-123', {
    name: 'Updated Name',
    isActive: true
  });
  console.log('User updated:', updated.name);
} catch (error) {
  console.log('Failed to update user:', error.message);
}
```

#### Defined in

[managers/user-manager.ts:398](https://github.com/eXplorins/PERS-sdks/blob/main/packages/pers-sdk/packages/pers-sdk/src/managers/user-manager.ts#L398)

### setUserActiveStatus

▸ **setUserActiveStatus**(`userId`, `isActive?`): `Promise`<`UserDTO`>

Admin: Set or toggle user active status

Sets the active/inactive status of a user account explicitly, or toggles
if no explicit value is provided. This is typically used for account
suspension or reactivation. Requires administrator privileges.

#### Parameters

| Name | Type | Description |
|  --- | --- | --- |
| `userId` | `string` | User ID to update |
| `isActive?` | `boolean` | Optional explicit status. If provided, sets to this value. If omitted, toggles current status. |


#### Returns

`Promise`<`UserDTO`>

Promise resolving to updated user data

**`Throws`**

When not authenticated as admin

**`Example`**

```typescript
// Admin operation - explicitly activate user
const activated = await sdk.users.setUserActiveStatus('user-123', true);
console.log('User activated:', activated.isActive); // true

// Explicitly deactivate user
const deactivated = await sdk.users.setUserActiveStatus('user-123', false);
console.log('User deactivated:', deactivated.isActive); // false
```

**`Example`**

```typescript
// Admin operation - toggle current status
const toggled = await sdk.users.setUserActiveStatus('user-123');
console.log('User status toggled:', toggled.isActive);
```

#### Defined in

[managers/user-manager.ts:432](https://github.com/eXplorins/PERS-sdks/blob/main/packages/pers-sdk/packages/pers-sdk/src/managers/user-manager.ts#L432)

### deleteUser

▸ **deleteUser**(`identifier`): `Promise`<{ `success`: `boolean` ; `message`: `string`  }>

Admin: Delete user (soft delete)

Soft deletes a user account. The user data is retained for 30 days before
GDPR anonymization. Use restoreUser() to restore within the grace period.

⚠️ This operation is irreversible after 30 days. Consider using toggleUserStatus()
for temporary deactivation instead.

#### Parameters

| Name | Type | Description |
|  --- | --- | --- |
| `identifier` | `string` | User unique identifier (id, email, externalId, accountAddress, etc.) |


#### Returns

`Promise`<{ `success`: `boolean` ; `message`: `string`  }>

Promise resolving to success status and message

**`Throws`**

When not authenticated as admin or user not found

**`Example`**

```typescript
// Admin operation - soft delete a user
try {
  const result = await sdk.users.deleteUser('user-123');
  console.log(result.message); // "User user-123 has been deleted"
} catch (error) {
  console.log('Failed to delete user:', error.message);
}
```

#### Defined in

[managers/user-manager.ts:460](https://github.com/eXplorins/PERS-sdks/blob/main/packages/pers-sdk/packages/pers-sdk/src/managers/user-manager.ts#L460)

### restoreUser

▸ **restoreUser**(`identifier`): `Promise`<`UserDTO`>

Admin: Restore deleted user

Restores a soft-deleted user within the 30-day grace period.
After GDPR anonymization (30 days), restoration is not possible.

#### Parameters

| Name | Type | Description |
|  --- | --- | --- |
| `identifier` | `string` | User unique identifier (id, email, externalId, accountAddress, etc.) |


#### Returns

`Promise`<`UserDTO`>

Promise resolving to restored user data

**`Throws`**

When not authenticated as admin, user not found, or already anonymized

**`Example`**

```typescript
// Admin operation - restore a deleted user
try {
  const user = await sdk.users.restoreUser('user-123');
  console.log('User restored:', user.firstName);
} catch (error) {
  if (error.message.includes('anonymized')) {
    console.log('User cannot be restored - already anonymized');
  }
}
```

#### Defined in

[managers/user-manager.ts:496](https://github.com/eXplorins/PERS-sdks/blob/main/packages/pers-sdk/packages/pers-sdk/src/managers/user-manager.ts#L496)

### exportCSV

▸ **exportCSV**(`options?`): `Promise`<`Blob`>

Admin: Export users as CSV

Generates a comprehensive CSV export of all tenant users for
external analysis, reporting, or compliance purposes. This operation
requires administrator privileges and creates a downloadable file.

#### Parameters

| Name | Type | Description |
|  --- | --- | --- |
| `options?` | `Object` | Optional date range filters |
| `options.dateFrom?` | `string` | Start date filter (ISO date string) |
| `options.dateTo?` | `string` | End date filter (ISO date string) |


#### Returns

`Promise`<`Blob`>

Promise resolving to CSV blob for download

**`Throws`**

When not authenticated as administrator or export fails

**`Example`**

```typescript
const csvBlob = await sdk.users.exportCSV();
const downloadUrl = URL.createObjectURL(csvBlob);
```

**`Example`**

```typescript
const csvBlob = await sdk.users.exportCSV({
  dateFrom: '2024-01-01',
  dateTo: '2024-12-31'
});
```

#### Defined in

[managers/user-manager.ts:536](https://github.com/eXplorins/PERS-sdks/blob/main/packages/pers-sdk/packages/pers-sdk/src/managers/user-manager.ts#L536)

### getUserService

▸ **getUserService**(): [`UserService`](/sdk-reference/classes/userservice)

Get the user service for advanced operations

Provides access to the complete UserService instance for advanced operations
not covered by the high-level manager methods.

#### Returns

[`UserService`](/sdk-reference/classes/userservice)

UserService instance with full API access

**`Example`**

```typescript
const userService = sdk.users.getUserService();

// Access advanced user operations
const advancedResult = await userService.someAdvancedMethod();
```

#### Defined in

[managers/user-manager.ts:557](https://github.com/eXplorins/PERS-sdks/blob/main/packages/pers-sdk/packages/pers-sdk/src/managers/user-manager.ts#L557)