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

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

View File

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

View File

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

View File

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

View File

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

View File

@ -4,6 +4,7 @@ import { OceanAssets } from "./OceanAssets"
import { OceanAuth } from "./OceanAuth" import { OceanAuth } from "./OceanAuth"
import { OceanSecretStore } from "./OceanSecretStore" import { OceanSecretStore } from "./OceanSecretStore"
import { OceanTokens } from "./OceanTokens" import { OceanTokens } from "./OceanTokens"
import { OceanVersions } from "./OceanVersions"
import { OceanUtils } from "./utils/OceanUtils" import { OceanUtils } from "./utils/OceanUtils"
import { Aquarius } from "../aquarius/Aquarius" import { Aquarius } from "../aquarius/Aquarius"
@ -45,6 +46,7 @@ export class Ocean extends Instantiable {
instance.agreements = await OceanAgreements.getInstance(instanceConfig) instance.agreements = await OceanAgreements.getInstance(instanceConfig)
instance.secretStore = await OceanSecretStore.getInstance(instanceConfig) instance.secretStore = await OceanSecretStore.getInstance(instanceConfig)
instance.tokens = await OceanTokens.getInstance(instanceConfig) instance.tokens = await OceanTokens.getInstance(instanceConfig)
instance.versions = await OceanVersions.getInstance(instanceConfig)
instance.utils = await OceanUtils.getInstance(instanceConfig) instance.utils = await OceanUtils.getInstance(instanceConfig)
@ -105,6 +107,12 @@ export class Ocean extends Instantiable {
*/ */
public tokens: OceanTokens public tokens: OceanTokens
/**
* Ocean versions submodule
* @type {OceanVersions}
*/
public versions: OceanVersions
/** /**
* Ocean utils submodule * Ocean utils submodule
* @type {OceanUtils} * @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 * from "./ddo/MetaData"
export { OrderProgressStep, CreateProgressStep } from "./ocean/OceanAssets" export { OrderProgressStep, CreateProgressStep } from "./ocean/OceanAssets"
export { OceanPlatformTechStatus } from "./ocean/OceanVersions"
export { AgreementTemplate } from "./keeper/contracts/templates" export { AgreementTemplate } from "./keeper/contracts/templates"
export { Condition, ConditionState } from "./keeper/contracts/conditions" export { Condition, ConditionState } from "./keeper/contracts/conditions"