quasvel
Version:
Access and interact with Aragon Organizations and their apps.
86 lines (70 loc) • 2.48 kB
text/typescript
import { subscription } from '@aragon/connect-core'
import { SubscriptionCallback, SubscriptionResult } from '@aragon/connect-types'
import ERC20 from './ERC20'
import Action from '../models/Action'
import Staking from '../models/Staking'
import { formatBn } from '../helpers'
import { IAgreementConnector, StakingMovementData } from '../types'
export default class StakingMovement {
#connector: IAgreementConnector
readonly id: string
readonly stakingId: string
readonly agreementId: string
readonly tokenId: string
readonly tokenDecimals: string
readonly amount: string
readonly actionId: string
readonly actionState: string
readonly collateralState: string
readonly createdAt: string
constructor(data: StakingMovementData, connector: IAgreementConnector) {
this.#connector = connector
this.id = data.id
this.stakingId = data.stakingId
this.agreementId = data.agreementId
this.tokenId = data.tokenId
this.tokenDecimals = data.tokenDecimals
this.amount = data.amount
this.actionId = data.actionId
this.actionState = data.actionState
this.collateralState = data.collateralState
this.createdAt = data.createdAt
}
async disconnect() {
await this.#connector.disconnect()
}
get formattedAmount(): string {
return formatBn(this.amount, this.tokenDecimals)
}
async token(): Promise<ERC20> {
return this.#connector.ERC20(this.tokenId)
}
onToken(callback?: SubscriptionCallback<ERC20>): SubscriptionResult<ERC20> {
return subscription<ERC20>(callback, (callback) =>
this.#connector.onERC20(this.tokenId, callback)
)
}
async staking(): Promise<Staking> {
return this.#connector.staking(this.stakingId)
}
onStaking(callback?: SubscriptionCallback<Staking>): SubscriptionResult<Staking> {
return subscription<Staking>(callback, (callback) =>
this.#connector.onStaking(this.stakingId, callback)
)
}
async action(): Promise<Action> {
const action = await this.tryAction()
if (!action) {
throw Error(`Could not find given action number ${this.actionId}`)
}
return action as Action
}
async tryAction(): Promise<Action | null> {
return this.#connector.action(this.actionId)
}
onAction(callback?: SubscriptionCallback<Action | null>): SubscriptionResult<Action | null> {
return subscription<Action | null>(callback, (callback) =>
this.#connector.onAction(this.actionId || '', callback)
)
}
}