# Helpers

## getLaunchParameters

This gets the launch parameters supplied in the URL. Can be used before initializing.

### **Example**

```typescript
import Cmi5, { LaunchParameters } from "@xapi/cmi5";

const cmi5 = new Cmi5();

const launchParameters: LaunchParameters = cmi5.getLaunchParameters();
```

### **Returns**

This returns a [LaunchParameters](https://github.com/xapijs/cmi5/blob/master/src/interfaces/LaunchParameters.ts) object.

## getLaunchData

This gets the launch data from the LMS. Can **not** be used before initializing the AU.

### **Example**

```typescript
import Cmi5, { LaunchData } from "@xapi/cmi5";

const cmi5 = new Cmi5();

cmi5.initialize().then(() => {
  const launchData: LaunchData = cmi5.getLaunchData();
});
```

### **Returns**

This returns a [LaunchData](https://github.com/xapijs/cmi5/blob/master/src/interfaces/LaunchData.ts) object.

## getAuthToken

This gets the session's authToken. Useful for storing in non-volatile storage local to the user (e.g. SessionStorage) to preserve the state between page refreshes. Pass this value and `initializedDate` to `initialize` to restore the previous session.

### Example

```typescript
// Storing the auth token
const cmi5 = new Cmi5();

cmi5.initialize().then(() => {
  const authToken = cmi5.getAuthToken();
  sessionStorage.set("cmi5-auth-token", authToken);
});
```

<pre class="language-typescript"><code class="lang-typescript"><strong>// Restoring the auth token in a new Cmi5 instance
</strong><strong>const cmi5 = new Cmi5();
</strong>const authToken = sessionStorage.get("cmi5-auth-token");

cmi5.initialize({
  authToken,
  initializedDate: ...
});
</code></pre>

### Returns

This returns a `string` or `null` if the Cmi5 instance has not been initialized.

## getInitializedDate

This gets the session's initializedDate. Useful for storing in non-volatile storage local to the user (e.g. SessionStorage) to preserve the state between page refreshes. Pass this value and `authToken` to `initialize` to restore the previous session.

### Example

```typescript
// Storing the auth token
const cmi5 = new Cmi5();

cmi5.initialize().then(() => {
  const initializedDate = cmi5.getInitializedDate();
  sessionStorage.set("cmi5-initialized-date", initializedDate);
});
```

<pre class="language-typescript"><code class="lang-typescript"><strong>// Restoring the initialized date in a new Cmi5 instance
</strong><strong>const cmi5 = new Cmi5();
</strong>const initializedDate = new Date(sessionStorage.get("cmi5-initialized-date"));

cmi5.initialize({
  initializedDate,
  authToken: ...
});
</code></pre>

### Returns

This returns a `Date` or `null` if the Cmi5 instance has not been initialized.

## getLearnerPreferences

This gets the learner preferences from the LMS. Can **not** be used before initializing the AU.

### **Example**

```typescript
import Cmi5, { LearnerPreferences } from "@xapi/cmi5";

const cmi5 = new Cmi5();

cmi5.initialize().then(() => {
  const learnerPreferences: LearnerPreferences = cmi5.getLearnerPreferences();
});
```

## Cmi5.isCmiAvailable

This returns `true` if the environment has all the necessary parameters for initialisation.

### Example

```typescript
import Cmi5 from "@xapi/cmi5";

const isCmiAvailable: boolean = Cmi5.isCmiAvailable();
```

### Returns

This returns a `Boolean`.

## isAuthenticated

This returns `true` if the instance constructed successfully.

### Example

```typescript
import Cmi5 from "@xapi/cmi5";

const cmi5 = new Cmi5();

cmi5.initialize().then(() => {
  const isAuthenticated: boolean = cmi5.isAuthenticated();
});
```

### Returns

This returns a `Boolean`.

## Cmi5.instance

Creates a new Cmi5 singleton instance, or if already called returns the same singleton Cmi5 instance.

### Example

```typescript
import Cmi5 from "@xapi/cmi5";

const cmi5instance: Cmi5 = Cmi5.instance;
```

### Returns

This returns a global `Cmi5` singleton instance.

## Cmi5.clearInstance

Clears the Cmi5 singleton instance.

### Example

```typescript
import Cmi5 from "@xapi/cmi5";

const cmi5instance: Cmi5 = Cmi5.instance;

Cmi5.clearInstance();
```

## moveOn

Automatically satisfies the AU based upon the Launch Data from the LMS. It will send the "cmi5 defined" statements for:

* **Pass** or **fail** if a score is provided and the mastery score is configured
* **complete** statement
* **terminate** statement (unless disabled in the options parameter)

### **Example**

```typescript
import Cmi5 from "@xapi/cmi5";

const cmi5 = new Cmi5();

// initialize etc

cmi5.moveOn();
```

### **Parameters**

| Parameter | Type                                                                                        | Required | Description                    |
| --------- | ------------------------------------------------------------------------------------------- | -------- | ------------------------------ |
| options   | [MoveOnOptions](https://github.com/xapijs/cmi5/blob/master/src/interfaces/MoveOnOptions.ts) | false    | The additional options object. |

This returns a `Promise` containing an array with the resulting statementIds if successful.

## Cmi5.xapi

Returns the internal xAPI.js Wrapper library instance. Useful for accessing any xAPI Resources using the Cmi5 authentication. Can only be accessed after successfully calling the `initialize` method.

### Example

```typescript
import Cmi5 from "@xapi/cmi5";
import XAPI from "@xapi/xapi"; // For types as a developer dependency, not required but may be useful!

const cmi5: Cmi5 = new Cmi5();
await cmi5.initialize();

const xapi: XAPI = cmi5.xapi;
xapi.getStatement(...);
```

### Returns

This returns the internal `XAPI` instance, authenticated with the LRS endpoint and authentication token.


---

# 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://www.xapijs.dev/cmi5-profile-library/helpers.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.
