# Function Inputs

In different scenarios, your functions might receive different inputs from CodeMash. Here are all the available scenarios when a certain input is passed to your function.

## General form

In general, all of your functions will receive two parameters - **event** and **context** parameter. The **event** parameter is some kind of data depending on how a function was called. The **context** parameter is just some information about the function itself. Your function handler (entry function) might look like the following.

```javascript
function handler(event, context) { ... }
```

Where **event** is of the following form:

```
{
    projectId: "{YOUR_PROJECT_ID}",
    input: { ... }
}
```

| Event parameter | Type   | Description                                               |
| --------------- | ------ | --------------------------------------------------------- |
| projectId       | string | Your project ID.                                          |
| input           | object | Some input depending on the function invocation scenario. |

## Function event input

As stated above, the event input parameter varies depending on how the function was invoked. The following shows all the different input forms.

### Calling through API

When calling a function through an API call your event will have the following form.

```javascript
{
    projectId: "{YOUR_PROJECT_ID}",
    input: {
        "initiatorUserId": "{CALLER_USER_ID}",
        "template": "{ ... }",
        "data": "My custom data, can be any string"
    }
}
```

| Parameter       | Type   | Description                                                                     |
| --------------- | ------ | ------------------------------------------------------------------------------- |
| initiatorUserId | string | The ID of a user who called this function.                                      |
| template        | string | A static JSON string that you have defined in your function configuration page. |
| data            | string | Any string that you pass into API request.                                      |

### Collection triggers

When the function is invoked from the collection trigger your event will have the following form.

```javascript
{
    projectId: "{YOUR_PROJECT_ID}",
    input: {
        "initiatorUserId": "{TRIGGER_USER_ID}",
        "template": "{ .. }",
        "collectionName": "my-collection",
        "triggerType": "Insert",
        "formerRecord": "{ ... }",
        "newRecord": "{ ... }"
    }
}
```

| Parameter       | Type   | Description                                                                                           |
| --------------- | ------ | ----------------------------------------------------------------------------------------------------- |
| initiatorUserId | string | The ID of a user who triggered this trigger (who inserted, updated or deleted a record).              |
| template        | string | A static JSON string that you have defined in your function configuration page.                       |
| collectionName  | string | Collection name of the collection which trigger was invoked.                                          |
| triggerType     | string | Type of action that called this trigger (one of the **Insert**, **Update** or **Delete**).            |
| formerRecord    | string | JSON string of a former (before update or deleted) record. It's not passed if this is an insert type. |
| newRecord       | string | JSON string of a new (updated or inserted) record. It's not passed if this is a delete type.          |

### User triggers <a href="#collection-triggers" id="collection-triggers"></a>

‌When the function is invoked from the user trigger your event input will have the following form.

```javascript
{
    projectId: "{YOUR_PROJECT_ID}",
    input: {
        "initiatorUserId": "{TRIGGER_USER_ID}",
        "template": "{ .. }",
        "collectionName": "my-collection",
        "triggerType": "Register",
        "formerUser": "{ ... }",
        "newUser": "{ ... }"
    }
}
```

| Parameter       | Type   | Description                                                                                                               |
| --------------- | ------ | ------------------------------------------------------------------------------------------------------------------------- |
| initiatorUserId | string | The ID of a user who triggered this trigger (who registered, invited, updated or deleted a user).                         |
| template        | string | A static JSON string that you have defined in your function configuration page.                                           |
| triggerType     | string | Type of action that called this trigger (one of the **Register**, **Invite**, **Verified**, **Update,** or **Delete**).   |
| formerUser      | object | JSON string of a former (before update or deleted) user. It's not passed if this is a register, invite, or verified type. |
| newUser         | object | JSON string of a new (registered, invited, verified, or updated) user. It's not passed if this is a delete type.          |

The form of former and new users is as follows.

| Parameter   | Type   | Description                          |
| ----------- | ------ | ------------------------------------ |
| id          | string | The ID of a user.                    |
| modifiedOn  | string | When the record was modified (UTC).  |
| createdOn   | string | When the record was created (UTC).   |
| email       | string | User's email.                        |
| displayName | string | User's display name.                 |
| firstName   | string | User's first name.                   |
| lastName    | string | User's last name.                    |
| meta        | string | User's meta JSON object as a string. |

### File triggers <a href="#collection-triggers" id="collection-triggers"></a>

‌When the function is invoked from the file trigger your event input will have the following form.

```javascript
{
    projectId: "{YOUR_PROJECT_ID}",
    input: {
        "initiatorUserId": "{TRIGGER_USER_ID}",
        "template": "{ .. }",
        "collectionName": "my-collection",
        "triggerType": "Register",
        "formerFile": "{ ... }",
        "newFile": "{ ... }"
    }
}
```

| Parameter       | Type   | Description                                                                          |
| --------------- | ------ | ------------------------------------------------------------------------------------ |
| initiatorUserId | string | The ID of a user who triggered this trigger (who created or deleted a file).         |
| template        | string | A static JSON string that you have defined in your function configuration page.      |
| triggerType     | string | Type of action that called this trigger (one of the **CreateFile**, **DeleteFile**). |
| formerFile      | object | JSON string of a former (deleted) file. It's not passed if this is an create type.   |
| newUser         | object | JSON string of a new (created) file. It's not passed if this is a delete type.       |

The form of a former and new file are as follows.

| Parameter     | Type         | Description                                                                                                                       |
| ------------- | ------------ | --------------------------------------------------------------------------------------------------------------------------------- |
| id            | string       | The ID of a file.                                                                                                                 |
| modifiedOn    | string       | When the record was modified (UTC).                                                                                               |
| createdOn     | string       | When the record was created (UTC).                                                                                                |
| originalName  | string       | File's original name.                                                                                                             |
| uniqueName    | string       | File's unique name.                                                                                                               |
| contentType   | string       | File's content type (MIME type).                                                                                                  |
| size          | long (int64) | Size of a file.                                                                                                                   |
| enumerator    | integer      | File's enumerator of the same name.                                                                                               |
| directory     | string       | Path to a file.                                                                                                                   |
| meta          | object       | Key value pair (string: string) of file meta data.                                                                                |
| optimizations | array        | Object array of file optimizations. Optimization object has fields `optimizedFileId` and `optimization`. Both are of type string. |
| isPublic      | bool         | If true, file is public.                                                                                                          |


---

# 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://docs.codemash.io/dashboard/code/functions/function-inputs.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.
