diff --git a/package-lock.json b/package-lock.json index 6c97dc7..87b0a17 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "@oceanprotocol/squid", - "version": "0.1.0-beta.16", + "version": "0.1.0-beta.17", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index b637cff..f787cfa 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@oceanprotocol/squid", - "version": "0.1.0-beta.16", + "version": "0.1.0-beta.17", "description": "JavaScript client library for Ocean Protocol", "main": "dist/squid.js", "scripts": { diff --git a/src/ConfigProvider.ts b/src/ConfigProvider.ts index f66ef58..d133fc8 100644 --- a/src/ConfigProvider.ts +++ b/src/ConfigProvider.ts @@ -2,11 +2,11 @@ import Config from "./models/Config" export default class ConfigProvider { - public static getConfig() { + public static getConfig(): Config { return ConfigProvider.config } - public static configure(config: Config) { + public static setConfig(config: Config) { ConfigProvider.config = config } diff --git a/src/aquarius/Aquarius.ts b/src/aquarius/Aquarius.ts index 8503c80..bc213a4 100644 --- a/src/aquarius/Aquarius.ts +++ b/src/aquarius/Aquarius.ts @@ -1,16 +1,21 @@ -import fetch from "node-fetch" +import Config from "../models/Config" import Logger from "../utils/Logger" +import AquariusConnectorProvider from "./AquariusConnectorProvider" export default class Aquarius { - public static async getAccessUrl(accessToken: any, payload: any): Promise { - const accessUrl = await fetch(`${accessToken.service_endpoint}/${accessToken.resource_id}`, { - method: "POST", - body: payload, - headers: { - "Content-type": "application/json", - }, - }) + private url: string + + constructor(config: Config) { + + this.url = config.aquariusUri + } + + public async getAccessUrl(accessToken: any, payload: any): Promise { + + const accessUrl = await AquariusConnectorProvider.getConnector().post( + `${accessToken.service_endpoint}/${accessToken.resource_id}`, + payload) .then((response: any) => { if (response.ok) { return response.text() @@ -27,4 +32,22 @@ export default class Aquarius { return accessUrl } + + public async queryMetadata(query): Promise { + + const result = await AquariusConnectorProvider.getConnector().post( + this.url + "/api/v1/aquarius/assets/metadata/query", + JSON.stringify(query)) + .then((response: any) => { + if (response.ok) { + return response.json() + } + Logger.log("Failed: ", response.status, response.statusText) + }) + .catch((error) => { + Logger.error("Error fetching querying metdata: ", error) + }) + + return result + } } diff --git a/src/aquarius/AquariusConnector.ts b/src/aquarius/AquariusConnector.ts new file mode 100644 index 0000000..247799d --- /dev/null +++ b/src/aquarius/AquariusConnector.ts @@ -0,0 +1,14 @@ +import fetch from "node-fetch" + +export default class AquariusConnector { + + public post(url, payload) { + return fetch(url, { + method: "POST", + body: payload, + headers: { + "Content-type": "application/json", + }, + }) + } +} diff --git a/src/aquarius/AquariusConnectorProvider.ts b/src/aquarius/AquariusConnectorProvider.ts new file mode 100644 index 0000000..edc9d1f --- /dev/null +++ b/src/aquarius/AquariusConnectorProvider.ts @@ -0,0 +1,23 @@ +import Logger from "../utils/Logger" +import AquariusConnector from "./AquariusConnector" + +export default class AquariusConnectorProvider { + + public static setConnector(connector: AquariusConnector) { + + Logger.log("setting", typeof connector.constructor.name) + + AquariusConnectorProvider.connector = connector + } + + public static getConnector() { + + if (!AquariusConnectorProvider.connector) { + AquariusConnectorProvider.connector = new AquariusConnector() + } + Logger.log("getting", typeof AquariusConnectorProvider.connector.constructor.name) + return AquariusConnectorProvider.connector + } + + private static connector: AquariusConnector = null +} diff --git a/src/aquarius/AquariusProvider.ts b/src/aquarius/AquariusProvider.ts index ab5db68..e881643 100644 --- a/src/aquarius/AquariusProvider.ts +++ b/src/aquarius/AquariusProvider.ts @@ -1,14 +1,20 @@ +import ConfigProvider from "../ConfigProvider" +import Aquarius from "./Aquarius" + export default class AquariusProvider { - public static setAquarius(aquarius) { + public static setAquarius(aquarius: Aquarius) { AquariusProvider.aquarius = aquarius } public static getAquarius() { + if (!AquariusProvider.aquarius) { + AquariusProvider.aquarius = new Aquarius(ConfigProvider.getConfig()) + } return AquariusProvider.aquarius } - private static aquarius + private static aquarius: Aquarius = null } diff --git a/src/ocean/Ocean.ts b/src/ocean/Ocean.ts index c133f8e..f2305c0 100644 --- a/src/ocean/Ocean.ts +++ b/src/ocean/Ocean.ts @@ -1,4 +1,3 @@ -import Aquarius from "../aquarius/Aquarius" import AquariusProvider from "../aquarius/AquariusProvider" import ConfigProvider from "../ConfigProvider" import Keeper from "../keeper/Keeper" @@ -15,7 +14,7 @@ export default class Ocean { public static async getInstance(config: Config) { if (!Ocean.instance) { - ConfigProvider.configure(config) + ConfigProvider.setConfig(config) SecretStoreProvider.configure(config) AquariusProvider.setAquarius(Aquarius) Ocean.instance = new Ocean(await Keeper.getInstance()) @@ -106,4 +105,8 @@ export default class Ocean { return orders } + + public async searchAssets(query): Promise { + return AquariusProvider.getAquarius().queryMetadata(query) + } } diff --git a/test/aquarius/Aquarius.test.ts b/test/aquarius/Aquarius.test.ts new file mode 100644 index 0000000..9a4529e --- /dev/null +++ b/test/aquarius/Aquarius.test.ts @@ -0,0 +1,33 @@ +import * as assert from "assert" +import Aquarius from "../../src/aquarius/Aquarius" +import AquariusConnectorProvider from "../../src/aquarius/AquariusConnectorProvider" +import config from "../config" +import AquariusConnectorMock from "../mocks/AquariusConnector.mock" + +before(() => { + AquariusConnectorProvider.setConnector(new AquariusConnectorMock()) +}) + +describe("Aquarius", () => { + + describe("#queryMetadata()", async () => { + + const aquarius: Aquarius = new Aquarius(config) + + const query = { + offset: 100, + page: 0, + query: { + value: 1, + }, + sort: { + value: 1, + }, + text: "Office", + } + + const result: any[] = await aquarius.queryMetadata(query) + assert(result) + }) + +}) diff --git a/test/config.ts b/test/config.ts index 29ddde4..ec2123f 100644 --- a/test/config.ts +++ b/test/config.ts @@ -1,10 +1,12 @@ import Config from "../src/models/Config" export default { + aquariusUri: "http://localhost:5000", nodeUri: "http://localhost:8545", parityUri: "http://localhost:9545", secretStoreUri: "https://secret-store.dev-ocean.com", threshold: 2, password: "unittest", address: "0xed243adfb84a6626eba46178ccb567481c6e655d", + web3Provider: null, } as Config diff --git a/test/keeper/ContractBase.test.ts b/test/keeper/ContractBase.test.ts index d7daf16..b620dda 100644 --- a/test/keeper/ContractBase.test.ts +++ b/test/keeper/ContractBase.test.ts @@ -5,10 +5,10 @@ import ContractBaseMock from "../mocks/ContractBase.Mock" const wrappedContract = new ContractBaseMock("OceanToken") -describe("ContractBase", () => { +describe("ContractWrapperBase", () => { before(async () => { - ConfigProvider.configure(config) + ConfigProvider.setConfig(config) await ContractHandler.deployContracts() wrappedContract.initMock() }) diff --git a/test/keeper/ContractHandler.test.ts b/test/keeper/ContractHandler.test.ts index 5ea96f7..20b8164 100644 --- a/test/keeper/ContractHandler.test.ts +++ b/test/keeper/ContractHandler.test.ts @@ -6,7 +6,7 @@ import config from "../config" describe("ContractHandler", () => { before(async () => { - ConfigProvider.configure(config) + ConfigProvider.setConfig(config) await ContractHandler.deployContracts() }) diff --git a/test/keeper/Keeper.test.ts b/test/keeper/Keeper.test.ts index 89bae86..e32149f 100644 --- a/test/keeper/Keeper.test.ts +++ b/test/keeper/Keeper.test.ts @@ -9,7 +9,7 @@ let keeper: Keeper describe("Keeper", () => { before(async () => { - ConfigProvider.configure(config) + ConfigProvider.setConfig(config) await ContractHandler.deployContracts() keeper = await Keeper.getInstance() }) diff --git a/test/mocks/Aquarius.mock.ts b/test/mocks/Aquarius.mock.ts index 46d479e..9b962be 100644 --- a/test/mocks/Aquarius.mock.ts +++ b/test/mocks/Aquarius.mock.ts @@ -2,7 +2,7 @@ import Aquarius from "../../src/aquarius/Aquarius" export default class AquariusMock extends Aquarius { - public static async getAccessUrl(accessToken: any, payload: any): Promise { + public async getAccessUrl(accessToken: any, payload: any): Promise { return "http://test/test" } } diff --git a/test/mocks/AquariusConnector.mock.ts b/test/mocks/AquariusConnector.mock.ts new file mode 100644 index 0000000..5e0db38 --- /dev/null +++ b/test/mocks/AquariusConnector.mock.ts @@ -0,0 +1,17 @@ +import AquariusConnector from "../../src/aquarius/AquariusConnector" + +export default class AquariusConnectorMock extends AquariusConnector { + + public async post(url: string, payload: any) { + + return { + ok: true, + json: () => { + return [] + }, + text: () => { + return "" + }, + } + } +} diff --git a/test/ocean/Account.test.ts b/test/ocean/Account.test.ts index 4b5f887..93aedd5 100644 --- a/test/ocean/Account.test.ts +++ b/test/ocean/Account.test.ts @@ -12,7 +12,7 @@ let accounts: Account[] describe("Account", () => { before(async () => { - ConfigProvider.configure(config) + ConfigProvider.setConfig(config) await ContractHandler.deployContracts() ocean = await Ocean.getInstance(config) diff --git a/test/ocean/Asset.test.ts b/test/ocean/Asset.test.ts index 844c82c..2785352 100644 --- a/test/ocean/Asset.test.ts +++ b/test/ocean/Asset.test.ts @@ -19,11 +19,11 @@ let testAsset: Asset let accounts: Account[] let testPublisher: Account -describe("#purchase()", () => { +describe("Asset", () => { before(async () => { - ConfigProvider.configure(config) - AquariusProvider.setAquarius(AquariusMock) + ConfigProvider.setConfig(config) + AquariusProvider.setAquarius(new AquariusMock(config)) await ContractHandler.deployContracts() ocean = await Ocean.getInstance(config) @@ -34,7 +34,9 @@ describe("#purchase()", () => { await ocean.register(testAsset) }) - it("should purchase an asset", async () => { + describe("#purchase()", () => { + + it("should purchase an asset", async () => { // todo const consumerAccount = accounts[5] diff --git a/test/ocean/Ocean.test.ts b/test/ocean/Ocean.test.ts index 49b6212..905a0ef 100644 --- a/test/ocean/Ocean.test.ts +++ b/test/ocean/Ocean.test.ts @@ -1,4 +1,5 @@ import {assert} from "chai" +import AquariusProvider from "../../src/aquarius/AquariusProvider" import ConfigProvider from "../../src/ConfigProvider" import ContractHandler from "../../src/keeper/ContractHandler" import Account from "../../src/ocean/Account" @@ -6,6 +7,7 @@ import Asset from "../../src/ocean/Asset" import Ocean from "../../src/ocean/Ocean" import Order from "../../src/ocean/Order" import config from "../config" +import AquariusMock from "../mocks/Aquarius.mock" let ocean: Ocean let accounts: Account[] @@ -20,7 +22,8 @@ const timeout = 100000000 describe("Ocean", () => { before(async () => { - ConfigProvider.configure(config) + ConfigProvider.setConfig(config) + AquariusProvider.setAquarius(new AquariusMock(config)) await ContractHandler.deployContracts() ocean = await Ocean.getInstance(config) accounts = await ocean.getAccounts() @@ -84,4 +87,26 @@ describe("Ocean", () => { }) + describe("#searchAssets()", () => { + + it("should search for assets", async () => { + + const query = { + offset: 100, + page: 0, + query: { + value: 1, + }, + sort: { + value: 1, + }, + text: "Office", + } + + const assets: any[] = await ocean.searchAssets(query) + + assert(assets) + }) + + }) }) diff --git a/test/ocean/Order.test.ts b/test/ocean/Order.test.ts index 6caebbf..a0bd013 100644 --- a/test/ocean/Order.test.ts +++ b/test/ocean/Order.test.ts @@ -1,4 +1,5 @@ import {assert} from "chai" +import AquariusProvider from "../../src/aquarius/AquariusProvider" import ConfigProvider from "../../src/ConfigProvider" import ContractHandler from "../../src/keeper/ContractHandler" import AccessStatus from "../../src/models/AccessStatus" @@ -7,6 +8,7 @@ import Asset from "../../src/ocean/Asset" import Ocean from "../../src/ocean/Ocean" import Order from "../../src/ocean/Order" import config from "../config" +import AquariusMock from "../mocks/Aquarius.mock" import * as AccessToken from "./AccessToken.json" const testName = "Order Test Asset" @@ -23,7 +25,8 @@ let testConsumer: Account describe("Order", () => { before(async () => { - ConfigProvider.configure(config) + ConfigProvider.setConfig(config) + AquariusProvider.setAquarius(new AquariusMock(config)) await ContractHandler.deployContracts() ocean = await Ocean.getInstance(config) accounts = await ocean.getAccounts()