UNPKG

@1hive/connect-core

Version:

Access and interact with Aragon Organizations and their apps.

107 lines 4.32 kB
"use strict"; 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; Object.defineProperty(exports, "__esModule", { value: true }); const abi_1 = require("@ethersproject/abi"); const contracts_1 = require("@ethersproject/contracts"); const intent_1 = require("../utils/intent"); const metadata_1 = require("../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) 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 metadata_1.resolveArtifact(organization.connection.ipfs, data); const manifest = await metadata_1.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 contracts_1.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 abi_1.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 intent_1.appIntent(sender, this, methodSignature, params, installedApps, this.provider); } } exports.default = App; _metadata = new WeakMap(); //# sourceMappingURL=App.js.map