# UserInfo

*File:* [*`user-info.interface.ts`*](https://github.com/labrynx/error-enhanced/blob/main/src/lib/interfaces/user-info.interface.ts)

### Introduction

The `UserInfo` interface is part of the `error-enhanced` library and focuses on capturing user-specific data related to an error event. This can include session IDs, user roles, authentication tokens, and more. Having this level of user-specific detail aids in debugging and helps in resolving user-specific issues more efficiently.

### Properties

| Property        | Type       | Description                                                                    |
| --------------- | ---------- | ------------------------------------------------------------------------------ |
| `sessionId`     | `string`   | A read-only property indicating the user's session ID.                         |
| `roles`         | `string[]` | A read-only array of roles associated with the user.                           |
| `authToken`     | `string`   | A read-only property for the authentication token.                             |
| `ipAddress`     | `string`   | A read-only property for the user's IP address.                                |
| `userAgent`     | `string`   | A read-only property for the user's agent, usually a browser.                  |
| `actionHistory` | `string[]` | A read-only array capturing a history of user actions leading up to the error. |

### Methods

| Method                               | Return Type | Description                                                              |
| ------------------------------------ | ----------- | ------------------------------------------------------------------------ |
| `setUser(user: string)`              | `this`      | Sets the user identifier. Allows for method chaining.                    |
| `setSessionId(sessionId: string)`    | `this`      | Sets the session ID. Allows for method chaining.                         |
| `setRoles(roles: string[])`          | `this`      | Sets the user roles. Allows for method chaining.                         |
| `setAuthToken(token: string)`        | `this`      | Sets the authentication token. Allows for method chaining.               |
| `setIpAddress(ip: string)`           | `this`      | Sets the user's IP address. Allows for method chaining.                  |
| `setUserAgent(userAgent: string)`    | `this`      | Sets the user agent. Allows for method chaining.                         |
| `addActionToHistory(action: string)` | `this`      | Adds an action to the user's action history. Allows for method chaining. |

### Example Usage

```typescript
const error = new ErrorEnhanced([
  new UserInfoEnhancer()
]);

// Setting properties
error
  .setSessionId('abc123')
  .setRoles(['admin', 'user']);

// Accessing properties
console.log(error.sessionId);  // 'abc123'
console.log(error.roles);  // ['admin', 'user']
```

### Best Practices

* Always set user-related properties as soon as the error is captured for more accurate debugging.
* Use `addActionToHistory` to maintain a running log of user actions leading up to an error, which can be invaluable for debugging.

### Conclusion

The `UserInfo` interface provides a structured way to capture user-specific details when an error occurs. This facilitates debugging and issue resolution, making it an indispensable part of your error management strategy.

***


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://labrynx.gitbook.io/error-enhanced/interfaces/userinfo.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
