temporibusunde
Version:
Access and interact with Aragon Organizations and their apps.
126 lines (105 loc) • 3.47 kB
text/typescript
import {
Address,
SubscriptionCallback,
SubscriptionResult,
} from '@aragon/connect-types'
import { subscription } from '@aragon/connect-core'
import { IDisputableVotingConnector } from '../types'
import ERC20 from './ERC20'
import Vote from './Vote'
import Voter from './Voter'
import Setting from './Setting'
export default class DisputableVoting {
#address: Address
#connector: IDisputableVotingConnector
constructor(connector: IDisputableVotingConnector, address: Address) {
this.#connector = connector
this.#address = address
}
async disconnect() {
await this.#connector.disconnect()
}
async id(): Promise<string> {
const data = await this.#connector.disputableVoting(this.#address)
return data.id
}
async dao(): Promise<string> {
const data = await this.#connector.disputableVoting(this.#address)
return data.dao
}
async token(): Promise<ERC20> {
const data = await this.#connector.disputableVoting(this.#address)
return this.#connector.ERC20(data.token)
}
settingId(settingNumber: string): string {
return `${this.#address}-setting-${settingNumber}`
}
async currentSetting(): Promise<Setting> {
return this.#connector.currentSetting(this.#address)
}
onCurrentSetting(
callback?: SubscriptionCallback<Setting>
): SubscriptionResult<Setting> {
return subscription<Setting>(callback, (callback) =>
this.#connector.onCurrentSetting(this.#address, callback)
)
}
async setting(settingNumber: string): Promise<Setting> {
return this.#connector.setting(this.settingId(settingNumber))
}
onSetting(
settingNumber: string,
callback?: SubscriptionCallback<Setting>
): SubscriptionResult<Setting> {
return subscription<Setting>(callback, (callback) =>
this.#connector.onSetting(this.settingId(settingNumber), callback)
)
}
async settings({ first = 1000, skip = 0 } = {}): Promise<Setting[]> {
return this.#connector.settings(this.#address, first, skip)
}
onSettings(
{ first = 1000, skip = 0 } = {},
callback?: SubscriptionCallback<Setting[]>
): SubscriptionResult<Setting[]> {
return subscription<Setting[]>(callback, (callback) =>
this.#connector.onSettings(this.#address, first, skip, callback)
)
}
async vote(voteId: string): Promise<Vote> {
return this.#connector.vote(voteId)
}
onVote(
voteId: string,
callback?: SubscriptionCallback<Vote>
): SubscriptionResult<Vote> {
return subscription<Vote>(callback, (callback) =>
this.#connector.onVote(voteId, callback)
)
}
async votes({ first = 1000, skip = 0 } = {}): Promise<Vote[]> {
return this.#connector.votes(this.#address, first, skip)
}
onVotes(
{ first = 1000, skip = 0 } = {},
callback?: SubscriptionCallback<Vote[]>
): SubscriptionResult<Vote[]> {
return subscription<Vote[]>(callback, (callback) =>
this.#connector.onVotes(this.#address, first, skip, callback)
)
}
voterId(voterAddress: Address): string {
return `${this.#address}-voterId-${voterAddress.toLowerCase()}`
}
async voter(voterAddress: Address): Promise<Voter> {
return this.#connector.voter(this.voterId(voterAddress))
}
onVoter(
voterAddress: Address,
callback?: SubscriptionCallback<Voter>
): SubscriptionResult<Voter> {
return subscription<Voter>(callback, (callback) =>
this.#connector.onVoter(this.voterId(voterAddress), callback)
)
}
}