UNPKG

quasvel

Version:

Access and interact with Aragon Organizations and their apps.

74 lines (67 loc) 1.79 kB
import { utils as ethersUtils } from 'ethers' import { getApmInternalAppInfo, getAragonOsInternalAppInfo, hasAppInfo, } from './overrides/index' import { DEFAULT_IPFS_GATEWAY } from '../params' import { AragonArtifact, AragonManifest, AppData, RepoData, RoleData, } from '../types' export function parseMetadata(name: string, metadata: string): any { try { return JSON.parse(metadata) } catch (error) { throw new Error(`Can't parse ${name} file, invalid JSON.`) } } export async function fetchMetadata( fileName: string, contentUri: string ): Promise<any> { const contentHashRegEx = contentUri.match(/ipfs:(.*)/) if (contentHashRegEx) { const url = `${DEFAULT_IPFS_GATEWAY}/ipfs/${contentHashRegEx[1]}/${fileName}` let metadata try { metadata = await ethersUtils.fetchJson(url) } catch (error) { throw new Error(`Can't fetch ${url}, failed with error: {error}.`) } return metadata } return {} } export async function resolveMetadata( fileName: string, contentUri?: string | null, metadata?: string | null ): Promise<any> { if (metadata) { return parseMetadata(fileName, metadata) } if (contentUri) { return fetchMetadata(fileName, contentUri) } return {} } export async function resolveManifest( data: AppData | RepoData ): Promise<AragonManifest> { return resolveMetadata('manifest.json', data.contentUri, data.manifest) } export async function resolveArtifact( data: AppData | RoleData ): Promise<AragonArtifact> { if (hasAppInfo(data.appId, 'apm')) { return getApmInternalAppInfo(data.appId) } if (hasAppInfo(data.appId, 'aragon')) { return getAragonOsInternalAppInfo(data.appId) } return resolveMetadata('artifact.json', data.contentUri, data.artifact) }