# Voting app

{% hint style="info" %}
This is **an app connector for the Voting app** (`voting.aragonpm.eth`). It only supports The Graph for now.
{% endhint %}

## Usage

To connect a Voting app, you need to pass it to `connectVoting()`:

```javascript
import connect from '@aragon/connect'
import connectVoting from '@aragon/connect-voting'

const org = await connect('myorg.aragonid.eth', 'thegraph')
const voting = await connectVoting(org.app('voting'))
```

It extends the `App` object, which means that every method and property of [`App`](/developers/tools/aragon-connect/api-reference/app.md) is also available on this object.

## connect(app, connector)

Connects and returns a `Voting` instance.

| Name        | Type                                   | Description                                                                                                                                            |
| ----------- | -------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `app`       | `App` or `Promise<App>`                | The app to extend with connected capabilities.                                                                                                         |
| `connector` | `["thegraph", Object]` or `"thegraph"` | Accepts either a string describing the desired connector (only `"thegraph"` for now), or a tuple to also pass a configuration object to the connector. |
| returns     | `Promise<Voting>`                      | An `Voting` instance (see below).                                                                                                                      |

It can throw the following errors:

| Error type                                                                                                     | Description                                                                                                                 |
| -------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------- |
| [`ErrorInvalidApp`](https://github.com/aragon/connect/blob/master/docs/connectors/errors.md#error-invalid-app) | Either the passed value is not a valid app object, or its name is not `voting`.                                             |
| [`ErrorInvalidConnector`](/developers/tools/aragon-connect/api-reference/errors.md#errorinvalidconnector)      | Either the connector configuration format is not valid, or the connector name is not supported.                             |
| [`ErrorInvalidNetwork`](/developers/tools/aragon-connect/api-reference/errors.md#errorinvalidnetwork)          | A subgraph couldn’t be found with the current network. Pass a `subgraphUrl` directly, or use one of the supported networks. |

## Voting

An object representing the Voting app, returned by `connectVoting()`. Use the following API to retrieve its data:

### Voting#votes(filters)

Get the list of votes in the Voting app.

| Name            | Type              | Description                                   |
| --------------- | ----------------- | --------------------------------------------- |
| `filters`       | `Object`          | Optional object allowing to filter the votes. |
| `filters.first` | `Number`          | Maximum number of votes. Defaults to `1000`.  |
| `filters.skip`  | `Number`          | Skip a number of votes. Defaults to `0`.      |
| returns         | `Promise<Vote[]>` | The list of votes.                            |

This method can throw one of the following errors:

| Error type                                                                                                | Description                                 |
| --------------------------------------------------------------------------------------------------------- | ------------------------------------------- |
| [`ErrorUnexpectedResult`](/developers/tools/aragon-connect/api-reference/errors.md#errorunexpectedresult) | The response seems incorrect.               |
| [`ErrorConnection`](/developers/tools/aragon-connect/api-reference/errors.md#errorconnection)             | The connection to the remote source failed. |

### Voting#onVotes(filters, callback)

Subscribe to the list of votes in the Voting app. The callback is optional, not passing it will return a partially applied function.

| Name       | Type                                    | Description                                                                     |
| ---------- | --------------------------------------- | ------------------------------------------------------------------------------- |
| `filters`  | `Object`                                | Optional object allowing to filter the votes. See `Voting#votes()` for details. |
| `callback` | `(error: Error, votes: Vote[]) => void` | A callback that will get called every time the result gets updated.             |
| returns    | `{ unsubscribe: () => void }`           | Unsubscribe function.                                                           |

The error passed to `callback` can be `null` (no error) or one of the following:

| Error type                                                                                                | Description                                 |
| --------------------------------------------------------------------------------------------------------- | ------------------------------------------- |
| [`ErrorUnexpectedResult`](/developers/tools/aragon-connect/api-reference/errors.md#errorunexpectedresult) | The data couldn’t be fetched.               |
| [`ErrorConnection`](/developers/tools/aragon-connect/api-reference/errors.md#errorconnection)             | The connection to the remote source failed. |

## Vote

A single `Vote` object contains the following properties:

| Name                 | Type      | Description                                                                                   |
| -------------------- | --------- | --------------------------------------------------------------------------------------------- |
| `id`                 | `String`  | Unique identifier for the vote.                                                               |
| `creator`            | `Address` | Address of the vote creator.                                                                  |
| `metadata`           | `String`  | An arbitrary string that can be used to describe the vote.                                    |
| `executed`           | `Boolean` | Whether the vote has been executed.                                                           |
| `executedAt`         | `String`  | Block timestamp for the vote execution. .                                                     |
| `startDate`          | `String`  | The start date. Expressed in Unix time (seconds).                                             |
| `snapshotBlock`      | `String`  | Number of the block before the one in which the vote was created.                             |
| `supportRequiredPct` | `String`  | Percentage of positive votes required, compared to the negatives votes, for the vote to pass. |
| `minAcceptQuorum`    | `String`  | Percentage of positive votes required, compared to the total, for the vote to pass.           |
| `yea`                | `String`  | Total amount of tokens casted to a positive vote.                                             |
| `nay`                | `String`  | Total amount of tokens casted to a negative vote.                                             |
| `votingPower`        | `String`  | Amount of tokens available at the block `snapshotBlock`.                                      |
| `script`             | `String`  | EVM call script to be executed on vote approval.                                              |

And the following methods:

### Vote#casts(filters)

Get the list of casted votes.

| Name            | Type              | Description                                   |
| --------------- | ----------------- | --------------------------------------------- |
| `filters`       | `Object`          | Optional object allowing to filter the votes. |
| `filters.first` | `Number`          | Maximum number of votes. Defaults to `1000`.  |
| `filters.skip`  | `Number`          | Skip a number of votes. Defaults to `0`.      |
| returns         | `Promise<Cast[]>` | The list of casted votes.                     |

This method can throw one of the following errors:

| Error type                                                                                                    | Description                                 |
| ------------------------------------------------------------------------------------------------------------- | ------------------------------------------- |
| [`ErrorUnexpectedResult`](/developers/tools/aragon-connect/api-reference/errors.md#errorunexpectedresult)     | The response seems incorrect.               |
| [`ErrorConnection`](https://github.com/aragon/connect/blob/master/docs/connectors/errors.md#error-connection) | The connection to the remote source failed. |

### Vote#onCasts(filters, callback)

Subscribe to the list of casted votes. The callback is optional, not passing it will return a partially applied function.

| Name       | Type                                    | Description                                                                   |
| ---------- | --------------------------------------- | ----------------------------------------------------------------------------- |
| `filters`  | `Object`                                | Optional object allowing to filter the votes. See `Vote#casts()` for details. |
| `callback` | `(error: Error, votes: Vote[]) => void` | A callback that will get called every time the result gets updated.           |
| returns    | `{ unsubscribe: () => void }`           | Unsubscribe function.                                                         |

The error passed to `callback` can be `null` (no error) or one of the following:

| Error type                                                                                                | Description                                 |
| --------------------------------------------------------------------------------------------------------- | ------------------------------------------- |
| [`ErrorUnexpectedResult`](/developers/tools/aragon-connect/api-reference/errors.md#errorunexpectedresult) | The data couldn’t be fetched.               |
| [`ErrorConnection`](/developers/tools/aragon-connect/api-reference/errors.md#errorconnection)             | The connection to the remote source failed. |

## Cast

Represents a casted vote. This object contains the following properties:

| Name        | Type     | Description                            |
| ----------- | -------- | -------------------------------------- |
| `id`        | `String` | Unique identifier for the casted vote. |
| `vote`      | `String` | The casted `Vote` object.              |
| `voter`     | `String` | The address that casted the vote.      |
| `supports`  | `String` | Whether or not the vote is positive.   |
| `stake`     | `String` | Voter stake for the casted vote.       |
| `createdAt` | `String` | Block timestamp for the casted vote.   |


---

# 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://legacy-docs.aragon.org/developers/tools/aragon-connect/connectors/voting-app.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.
