UNPKG

temporibusunde

Version:

Access and interact with Aragon Organizations and their apps.

121 lines (105 loc) 3.31 kB
import Organization from './Organization' import Repo from './Repo' import Role from './Role' import { Abi, AppIntent, AragonArtifact, AragonManifest, ConnectionContext, Metadata, } from '../types' import { resolveManifest, resolveArtifact } from '../utils/metadata' import IOrganizationConnector from '../connections/IOrganizationConnector' // import IAppConnected from '../connections/IAppConnected' // TODO: // [ ] (ipfs) contentUrl String The HTTP URL of the app content. Uses the IPFS HTTP provider. E.g. http://gateway.ipfs.io/ipfs/QmdLEDDfi…/ (ContentUri passing through the resolver) export interface AppData { address: string appId: string artifact?: string | null codeAddress: string contentUri?: string isForwarder?: boolean isUpgradeable?: boolean kernelAddress: string manifest?: string | null name?: string registry?: string registryAddress: string repoAddress?: string version?: string } export default class App { #metadata: Metadata readonly address: string readonly appId: string readonly codeAddress: string readonly contentUri?: string readonly isForwarder?: boolean readonly isUpgradeable?: boolean readonly kernelAddress: string readonly name?: string readonly organization: Organization readonly registry?: string readonly registryAddress: string readonly repoAddress?: string readonly version?: string constructor(data: AppData, metadata: Metadata, organization: Organization) { this.#metadata = metadata this.address = data.address this.appId = data.appId this.codeAddress = data.codeAddress this.contentUri = data.contentUri this.isForwarder = data.isForwarder this.isUpgradeable = data.isUpgradeable this.kernelAddress = data.kernelAddress this.name = data.name this.organization = organization this.registry = data.registry this.registryAddress = data.registryAddress this.repoAddress = data.repoAddress this.version = data.version } static async create(data: AppData, organization: Organization): Promise<App> { const artifact = await resolveArtifact(data) const manifest = await resolveManifest(data) const metadata: Metadata = [artifact, manifest] return new App(data, metadata, organization) } private orgConnector(): IOrganizationConnector { return this.organization.connection.orgConnector } async repo(): Promise<Repo> { return this.orgConnector().repoForApp(this.organization, this.address) } async roles(): Promise<Role[]> { return this.orgConnector().rolesForAddress(this.organization, this.address) } get artifact(): AragonArtifact { return this.#metadata[0] as AragonArtifact } get manifest(): AragonManifest { return this.#metadata[1] as AragonManifest } get abi(): Abi { return this.artifact.abi } get intents(): AppIntent[] { return this.artifact.functions } get deprecatedIntents(): { [version: string]: AppIntent[] } { return this.artifact.deprecatedFunctions } get appName(): string { return this.artifact.appName } toJSON() { return { ...this, // Organization creates a cycling reference that makes // the object impossible to pass through JSON.stringify(). organization: null, } } }