@1hive/connect-core
Version:
Access and interact with Aragon Organizations and their apps.
104 lines • 4.21 kB
JavaScript
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, privateMap, value) {
if (!privateMap.has(receiver)) {
throw new TypeError("attempted to set private field on non-instance");
}
privateMap.set(receiver, value);
return value;
};
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, privateMap) {
if (!privateMap.has(receiver)) {
throw new TypeError("attempted to get private field on non-instance");
}
return privateMap.get(receiver);
};
var _metadata;
import { Interface } from '@ethersproject/abi';
import { Contract } from '@ethersproject/contracts';
import { appIntent } from '../utils/intent';
import { resolveArtifact, resolveManifest } from '../utils/metadata';
// 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 default class App {
constructor(data, metadata, organization) {
_metadata.set(this, void 0);
__classPrivateFieldSet(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, organization) {
const artifact = await resolveArtifact(organization.connection.ipfs, data);
const manifest = await resolveManifest(organization.connection.ipfs, data);
return new App(data, [artifact, manifest], organization);
}
orgConnector() {
return this.organization.connection.orgConnector;
}
get provider() {
return this.organization.connection.ethersProvider;
}
get artifact() {
return __classPrivateFieldGet(this, _metadata)[0];
}
get manifest() {
return __classPrivateFieldGet(this, _metadata)[1];
}
get abi() {
return this.artifact.abi;
}
async repo() {
return this.orgConnector().repoForApp(this.organization, this.address);
}
async roles() {
return this.orgConnector().rolesForAddress(this.organization, this.address);
}
toJSON() {
return {
...this,
// Organization creates a cycling reference that makes
// the object impossible to pass through JSON.stringify().
organization: null,
};
}
ethersContract() {
if (!this.abi) {
throw new Error(`No ABI specified in app for ${this.address}. Make sure the metada for the app is available`);
}
return new Contract(this.address, this.abi, this.provider);
}
ethersInterface() {
if (!this.abi) {
throw new Error(`No ABI specified in app for ${this.address}. Make sure the metada for the app is available`);
}
return new Interface(this.abi);
}
/**
* Calculate the forwarding path for an app action
* that invokes `methodSignature` with `params`.
*
* @param {string} methodSignature
* @param {Array<*>} params
* @param {Object} options
* @return {Promise<ForwardingPath>} An object that represents the forwarding path corresponding to an action.
*/
async intent(methodSignature, params, options = {}) {
const sender = options.actAs || this.organization.connection.actAs;
if (!sender) {
throw new Error(`No sender address specified. Use 'actAs' option or set one as default on your organization connection.`);
}
const installedApps = await this.organization.apps();
return appIntent(sender, this, methodSignature, params, installedApps, this.provider);
}
}
_metadata = new WeakMap();
//# sourceMappingURL=App.js.map