1
0
mirror of https://github.com/oceanprotocol-archive/squid-js.git synced 2024-02-02 15:31:51 +01:00
squid-js/src/ocean/OceanVersions.ts

144 lines
4.3 KiB
TypeScript
Raw Normal View History

2019-06-14 00:34:53 +02:00
import * as keeperPackageJson from "@oceanprotocol/keeper-contracts/package.json"
import * as metadata from "../metadata.json"
2019-06-14 00:34:53 +02:00
import { Instantiable, InstantiableConfig } from "../Instantiable.abstract"
export enum OceanPlatformTechStatus {
2019-06-14 12:07:35 +02:00
Loading = "Loading",
Unknown = "Unknown",
Stopped = "Stopped",
Working = "Working",
2019-06-14 00:34:53 +02:00
}
export interface OceanPlatformTech {
2019-06-14 00:34:53 +02:00
name: string
version?: string
commit?: string
2019-06-14 00:34:53 +02:00
status: OceanPlatformTechStatus
}
export interface OceanPlatformKeeperTech extends OceanPlatformTech {
2019-06-14 00:34:53 +02:00
network?: string
keeperVersion?: string
contracts?: {[contractName: string]: string}
}
export interface OceanPlatformVersions {
2019-06-14 00:34:53 +02:00
squid: OceanPlatformKeeperTech
aquarius: OceanPlatformTech
brizo: OceanPlatformKeeperTech
status: {
ok: boolean
contracts: boolean
2019-06-14 12:07:35 +02:00
network: boolean,
2019-06-14 00:34:53 +02:00
}
}
/**
* Versions submodule of Ocean Protocol.
*/
export class OceanVersions extends Instantiable {
/**
* Returns the instance of OceanVersions.
* @return {Promise<OceanVersions>}
*/
public static async getInstance(config: InstantiableConfig): Promise<OceanVersions> {
const instance = new OceanVersions()
instance.setInstanceConfig(config)
return instance
}
public async get(): Promise<OceanPlatformVersions> {
const versions = {} as OceanPlatformVersions
2019-06-14 00:34:53 +02:00
// Squid
versions.squid = {
2019-06-14 12:07:35 +02:00
name: "Squid-js",
version: metadata.version,
commit: metadata.commit,
2019-06-14 00:34:53 +02:00
status: OceanPlatformTechStatus.Working,
network: (await this.ocean.keeper.getNetworkName()).toLowerCase(),
keeperVersion: keeperPackageJson.version,
contracts: Object.values(await this.ocean.keeper.getAllInstances())
.reduce((acc, {contractName, address}) => ({
...acc,
[contractName]: address,
2019-06-14 12:07:35 +02:00
}), {}),
2019-06-14 00:34:53 +02:00
}
// Brizo
try {
2019-06-14 12:07:35 +02:00
const {contracts, "keeper-version": keeperVersion, network, software: name, version} =
2019-06-14 00:34:53 +02:00
await this.ocean.brizo.getVersionInfo()
versions.brizo = {
name,
status: OceanPlatformTechStatus.Working,
version,
contracts,
network,
2019-06-14 12:07:35 +02:00
keeperVersion: keeperVersion.replace(/^v/, ""),
2019-06-14 00:34:53 +02:00
}
} catch {
versions.brizo = {
2019-06-14 12:07:35 +02:00
name: "Brizo",
2019-06-14 00:34:53 +02:00
status: OceanPlatformTechStatus.Stopped,
}
}
// Aquarius
try {
const {software: name, version} = await this.ocean.aquarius.getVersionInfo()
versions.aquarius = {
name,
status: OceanPlatformTechStatus.Working,
version,
}
} catch {
versions.aquarius = {
2019-06-14 12:07:35 +02:00
name: "Aquarius",
2019-06-14 00:34:53 +02:00
status: OceanPlatformTechStatus.Stopped,
}
}
// Status
const techs: OceanPlatformKeeperTech[] = Object.values(versions as any)
const networks = techs
.map(({network}) => network)
2019-06-14 12:07:35 +02:00
.filter((_) => !!_)
2019-06-14 00:34:53 +02:00
.reduce((acc, network) => ({...acc, [network]: true}), {})
let contractStatus = true
2019-06-14 12:07:35 +02:00
const contractList = techs
2019-06-14 00:34:53 +02:00
.map(({contracts}) => contracts)
2019-06-14 12:07:35 +02:00
.filter((_) => !!_)
Array.from(contractList.map(Object.keys))
2019-06-14 00:34:53 +02:00
.reduce((acc, _) => [...acc, ..._], [])
.filter((_, i, list) => list.indexOf(_) === i)
2019-06-14 12:07:35 +02:00
.forEach((name) => {
2019-06-14 00:34:53 +02:00
let address
2019-06-14 12:07:35 +02:00
contractList
.map((_) => _[name])
.forEach((_) => {
2019-06-14 00:34:53 +02:00
if (!address) {
address = _
return
}
if (address !== _) {
contractStatus = false
}
})
})
2019-06-14 12:07:35 +02:00
versions.status = {
2019-06-14 00:34:53 +02:00
ok: !techs.find(({status}) => status !== OceanPlatformTechStatus.Working),
network: Object.keys(networks).length === 1,
contracts: contractStatus,
}
return versions
}
}