Create Versions module.

This commit is contained in:
Pedro Gutiérrez 2019-06-14 00:34:53 +02:00
parent 4178a3d6b7
commit 0438beef2b
9 changed files with 218 additions and 35 deletions

View File

@ -0,0 +1,24 @@
import { assert } from "chai"
import { config } from "../config"
import { Ocean, OceanPlatformTechStatus } from "../../src" // @oceanprotocol/squid
describe("Versions", () => {
let ocean: Ocean
before(async () => {
ocean = await Ocean.getInstance(config)
})
it("should returns the versions", async () => {
const versions = await ocean.versions.get()
assert.equal(versions.aquarius.status, OceanPlatformTechStatus.Working)
assert.equal(versions.brizo.status, OceanPlatformTechStatus.Working)
assert.equal(versions.squid.status, OceanPlatformTechStatus.Working)
assert.deepEqual(versions.status, {ok: true, contracts: true, network: true})
})
})

29
package-lock.json generated
View File

@ -2697,8 +2697,7 @@
"code-point-at": {
"version": "1.1.0",
"bundled": true,
"dev": true,
"optional": true
"dev": true
},
"concat-map": {
"version": "0.0.1",
@ -2709,8 +2708,7 @@
"console-control-strings": {
"version": "1.1.0",
"bundled": true,
"dev": true,
"optional": true
"dev": true
},
"core-util-is": {
"version": "1.0.2",
@ -2827,8 +2825,7 @@
"inherits": {
"version": "2.0.3",
"bundled": true,
"dev": true,
"optional": true
"dev": true
},
"ini": {
"version": "1.3.5",
@ -2840,7 +2837,6 @@
"version": "1.0.0",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"number-is-nan": "^1.0.0"
}
@ -2863,14 +2859,12 @@
"minimist": {
"version": "0.0.8",
"bundled": true,
"dev": true,
"optional": true
"dev": true
},
"minipass": {
"version": "2.3.5",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"safe-buffer": "^5.1.2",
"yallist": "^3.0.0"
@ -2889,7 +2883,6 @@
"version": "0.5.1",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"minimist": "0.0.8"
}
@ -2983,7 +2976,6 @@
"version": "1.4.0",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"wrappy": "1"
}
@ -3069,8 +3061,7 @@
"safe-buffer": {
"version": "5.1.2",
"bundled": true,
"dev": true,
"optional": true
"dev": true
},
"safer-buffer": {
"version": "2.1.2",
@ -3106,7 +3097,6 @@
"version": "1.0.2",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"code-point-at": "^1.0.0",
"is-fullwidth-code-point": "^1.0.0",
@ -3126,7 +3116,6 @@
"version": "3.0.1",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"ansi-regex": "^2.0.0"
}
@ -3170,14 +3159,12 @@
"wrappy": {
"version": "1.0.2",
"bundled": true,
"dev": true,
"optional": true
"dev": true
},
"yallist": {
"version": "3.0.3",
"bundled": true,
"dev": true,
"optional": true
"dev": true
}
}
},
@ -7607,7 +7594,7 @@
"requires": {
"underscore": "1.8.3",
"web3-core-helpers": "1.0.0-beta.37",
"websocket": "git://github.com/frozeman/WebSocket-Node.git#browserifyCompatible"
"websocket": "git://github.com/frozeman/WebSocket-Node.git#6c72925e3f8aaaea8dc8450f97627e85263999f2"
}
},
"web3-shh": {

View File

@ -34,6 +34,10 @@ export class Aquarius extends Instantiable {
this.setInstanceConfig(config)
}
async getVersionInfo() {
return await (await this.ocean.utils.fetch.get(this.url)).json()
}
public async getAccessUrl(accessToken: any, payload: any): Promise<string> {
const accessUrl: string = await this.ocean.utils.fetch
.post(`${accessToken.service_endpoint}/${accessToken.resource_id}`, payload)

View File

@ -22,6 +22,10 @@ export class Brizo extends Instantiable {
this.setInstanceConfig(config)
}
async getVersionInfo() {
return await (await this.ocean.utils.fetch.get(this.url)).json()
}
public getPurchaseEndpoint() {
return `${this.url}${apiPath}/access/initialize`
}

View File

@ -1,3 +1,5 @@
import { ContractBase } from "./contracts/ContractBase"
import DIDRegistry from "./contracts/DIDRegistry"
import Dispenser from "./contracts/Dispenser"
import OceanToken from "./contracts/Token"
@ -30,9 +32,9 @@ export class Keeper extends Instantiable {
// Adding keeper inside Ocean to prevent `Keeper not defined yet` error
config.ocean.keeper = keeper
let instances = {} as any
keeper.instances = {}
try {
instances = await objectPromiseAll({
keeper.instances = await objectPromiseAll({
// Main contracts
dispenser: Dispenser.getInstance(config),
token: OceanToken.getInstance(config),
@ -45,7 +47,7 @@ export class Keeper extends Instantiable {
lockRewardCondition: LockRewardCondition.getInstance(config),
escrowReward: EscrowReward.getInstance(config),
accessSecretStoreCondition: AccessSecretStoreCondition.getInstance(config),
// Conditions
// Templates
escrowAccessSecretStoreTemplate: EscrowAccessSecretStoreTemplate.getInstance(config),
})
@ -56,22 +58,22 @@ export class Keeper extends Instantiable {
}
// Main contracts
keeper.dispenser = instances.dispenser
keeper.token = instances.token
keeper.didRegistry = instances.didRegistry
keeper.dispenser = keeper.instances.dispenser
keeper.token = keeper.instances.token
keeper.didRegistry = keeper.instances.didRegistry
// Managers
keeper.templateStoreManager = instances.templateStoreManager
keeper.agreementStoreManager = instances.agreementStoreManager
keeper.conditionStoreManager = instances.conditionStoreManager
keeper.templateStoreManager = keeper.instances.templateStoreManager
keeper.agreementStoreManager = keeper.instances.agreementStoreManager
keeper.conditionStoreManager = keeper.instances.conditionStoreManager
// Conditions
keeper.conditions = {
lockRewardCondition: instances.lockRewardCondition,
escrowReward: instances.escrowReward,
accessSecretStoreCondition: instances.accessSecretStoreCondition,
lockRewardCondition: keeper.instances.lockRewardCondition,
escrowReward: keeper.instances.escrowReward,
accessSecretStoreCondition: keeper.instances.accessSecretStoreCondition,
}
// Conditions
keeper.templates = {
escrowAccessSecretStoreTemplate: instances.escrowAccessSecretStoreTemplate,
escrowAccessSecretStoreTemplate: keeper.instances.escrowAccessSecretStoreTemplate,
}
// Utils
@ -82,6 +84,8 @@ export class Keeper extends Instantiable {
return keeper
}
private instances: {[contractRef: string]: ContractBase & any}
/**
* Is connected to the correct network or not.
* @type {boolean}
@ -207,6 +211,10 @@ export class Keeper extends Instantiable {
}
})
}
getAllInstances() {
return this.instances
}
}
export default Keeper

View File

@ -4,13 +4,17 @@ import ContractHandler from "../ContractHandler"
import { Instantiable, InstantiableConfig } from "../../Instantiable.abstract"
export default abstract class ContractBase extends Instantiable {
export abstract class ContractBase extends Instantiable {
protected static instance = null
public contractName: string
private contract: Contract = null
get address() {
return this.contract.options.address
}
constructor(contractName) {
super()
this.contractName = contractName
@ -128,3 +132,5 @@ export default abstract class ContractBase extends Instantiable {
return foundMethod
}
}
export default ContractBase

View File

@ -4,6 +4,7 @@ import { OceanAssets } from "./OceanAssets"
import { OceanAuth } from "./OceanAuth"
import { OceanSecretStore } from "./OceanSecretStore"
import { OceanTokens } from "./OceanTokens"
import { OceanVersions } from "./OceanVersions"
import { OceanUtils } from "./utils/OceanUtils"
import { Aquarius } from "../aquarius/Aquarius"
@ -45,6 +46,7 @@ export class Ocean extends Instantiable {
instance.agreements = await OceanAgreements.getInstance(instanceConfig)
instance.secretStore = await OceanSecretStore.getInstance(instanceConfig)
instance.tokens = await OceanTokens.getInstance(instanceConfig)
instance.versions = await OceanVersions.getInstance(instanceConfig)
instance.utils = await OceanUtils.getInstance(instanceConfig)
@ -105,6 +107,12 @@ export class Ocean extends Instantiable {
*/
public tokens: OceanTokens
/**
* Ocean versions submodule
* @type {OceanVersions}
*/
public versions: OceanVersions
/**
* Ocean utils submodule
* @type {OceanUtils}

141
src/ocean/OceanVersions.ts Normal file
View File

@ -0,0 +1,141 @@
import * as keeperPackageJson from "@oceanprotocol/keeper-contracts/package.json"
import { Instantiable, InstantiableConfig } from "../Instantiable.abstract"
import * as packageJson from "../../package.json"
export enum OceanPlatformTechStatus {
Loading = 'Loading',
Unknown = 'Unknown',
Stopped = 'Stopped',
Working = 'Working',
}
interface OceanPlatformTech {
name: string
version?: string
status: OceanPlatformTechStatus
}
interface OceanPlatformKeeperTech extends OceanPlatformTech {
network?: string
keeperVersion?: string
contracts?: {[contractName: string]: string}
}
export interface OceanPlatformVersions {
squid: OceanPlatformKeeperTech
aquarius: OceanPlatformTech
brizo: OceanPlatformKeeperTech
status: {
ok: boolean
contracts: boolean
network: boolean
}
}
/**
* 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
// Squid
versions.squid = {
name: 'Squid',
version: packageJson.version,
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,
}), {})
}
// Brizo
try {
const {contracts, 'keeper-version': keeperVersion, network, software: name, version} =
await this.ocean.brizo.getVersionInfo()
versions.brizo = {
name,
status: OceanPlatformTechStatus.Working,
version,
contracts,
network,
keeperVersion,
}
} catch {
versions.brizo = {
name: 'Brizo',
status: OceanPlatformTechStatus.Stopped,
}
}
// Aquarius
try {
const {software: name, version} = await this.ocean.aquarius.getVersionInfo()
versions.aquarius = {
name,
status: OceanPlatformTechStatus.Working,
version,
}
} catch {
versions.aquarius = {
name: 'Aquarius',
status: OceanPlatformTechStatus.Stopped,
}
}
// Status
const techs: OceanPlatformKeeperTech[] = Object.values(versions as any)
const networks = techs
.map(({network}) => network)
.filter(_ => !!_)
.reduce((acc, network) => ({...acc, [network]: true}), {})
let contractStatus = true
const contracts = techs
.map(({contracts}) => contracts)
.filter(_ => !!_)
Array.from(contracts.map(Object.keys))
.reduce((acc, _) => [...acc, ..._], [])
.filter((_, i, list) => list.indexOf(_) === i)
.forEach(name => {
let address
contracts
.map(_ => _[name])
.forEach(_ => {
if (!address) {
address = _
return
}
if (address !== _) {
contractStatus = false
}
})
})
versions.status = <any>{
ok: !techs.find(({status}) => status !== OceanPlatformTechStatus.Working),
network: Object.keys(networks).length === 1,
contracts: contractStatus,
}
return versions
}
}

View File

@ -14,6 +14,7 @@ export * from "./ddo/DDO"
export * from "./ddo/MetaData"
export { OrderProgressStep, CreateProgressStep } from "./ocean/OceanAssets"
export { OceanPlatformTechStatus } from "./ocean/OceanVersions"
export { AgreementTemplate } from "./keeper/contracts/templates"
export { Condition, ConditionState } from "./keeper/contracts/conditions"