2019-01-22 14:18:58 +01:00
|
|
|
import deprecated from "deprecated-decorator"
|
2019-01-15 11:34:45 +01:00
|
|
|
|
2019-01-21 17:48:40 +01:00
|
|
|
import OceanAccounts from "./OceanAccounts"
|
|
|
|
import OceanAgreements from "./OceanAgreements"
|
|
|
|
import OceanAssets from "./OceanAssets"
|
2019-02-14 11:26:12 +01:00
|
|
|
import OceanSecretStore from "./OceanSecretStore"
|
2019-02-18 15:37:52 +01:00
|
|
|
import OceanTokens from "./OceanTokens"
|
2019-01-21 17:48:40 +01:00
|
|
|
|
2018-10-25 17:26:26 +02:00
|
|
|
import AquariusProvider from "../aquarius/AquariusProvider"
|
2019-02-12 15:07:10 +01:00
|
|
|
import { SearchQuery } from "../aquarius/query/SearchQuery"
|
2018-11-09 10:43:29 +01:00
|
|
|
import BrizoProvider from "../brizo/BrizoProvider"
|
2018-10-16 14:56:18 +02:00
|
|
|
import ConfigProvider from "../ConfigProvider"
|
2019-02-04 17:45:49 +01:00
|
|
|
import { DDO } from "../ddo/DDO"
|
|
|
|
import { MetaData } from "../ddo/MetaData"
|
|
|
|
import { Service } from "../ddo/Service"
|
2018-11-23 16:01:42 +01:00
|
|
|
import ContractEvent from "../keeper/Event"
|
2018-10-25 17:18:57 +02:00
|
|
|
import Config from "../models/Config"
|
2018-11-09 10:43:29 +01:00
|
|
|
import SecretStoreProvider from "../secretstore/SecretStoreProvider"
|
2019-02-21 12:19:36 +01:00
|
|
|
import Logger, { LogLevel } from "../utils/Logger"
|
2018-10-05 12:34:31 +02:00
|
|
|
import Account from "./Account"
|
2018-12-17 15:54:58 +01:00
|
|
|
import DID from "./DID"
|
2018-11-07 14:33:56 +01:00
|
|
|
import ServiceAgreement from "./ServiceAgreements/ServiceAgreement"
|
2018-10-05 12:34:31 +02:00
|
|
|
|
2019-03-04 13:05:27 +01:00
|
|
|
import Keeper from "../keeper/Keeper"
|
2018-11-23 16:01:42 +01:00
|
|
|
import EventListener from "../keeper/EventListener"
|
|
|
|
|
2019-01-09 16:17:23 +01:00
|
|
|
/**
|
|
|
|
* Main interface for Ocean Protocol.
|
|
|
|
*/
|
2018-10-05 12:34:31 +02:00
|
|
|
export default class Ocean {
|
|
|
|
|
2019-01-09 16:17:23 +01:00
|
|
|
/**
|
|
|
|
* Returns the instance of Ocean.
|
|
|
|
* @param {Config} config Ocean instance configuration.
|
|
|
|
* @return {Promise<Ocean>}
|
|
|
|
*/
|
|
|
|
public static async getInstance(config: Config): Promise<Ocean> {
|
2019-02-21 17:53:44 +01:00
|
|
|
// Must be defined on instance level, right now, calling getInstance twice is going to rewrite that
|
2019-02-21 12:19:36 +01:00
|
|
|
Logger.setLevel(
|
|
|
|
typeof config.verbose !== "number"
|
|
|
|
? (config.verbose ? LogLevel.Log : LogLevel.None)
|
2019-02-21 18:14:07 +01:00
|
|
|
: config.verbose as LogLevel,
|
2019-02-21 12:19:36 +01:00
|
|
|
)
|
2019-02-21 17:53:44 +01:00
|
|
|
ConfigProvider.setConfig(config)
|
2019-02-21 12:19:36 +01:00
|
|
|
|
2018-10-16 14:56:18 +02:00
|
|
|
if (!Ocean.instance) {
|
2018-11-06 16:23:48 +01:00
|
|
|
Ocean.instance = new Ocean()
|
2019-03-04 13:05:27 +01:00
|
|
|
Ocean.instance.keeper = await Keeper.getInstance()
|
2019-01-21 17:48:40 +01:00
|
|
|
Ocean.instance.accounts = await OceanAccounts.getInstance()
|
|
|
|
Ocean.instance.assets = await OceanAssets.getInstance()
|
|
|
|
Ocean.instance.agreements = await OceanAgreements.getInstance()
|
2019-02-14 11:26:12 +01:00
|
|
|
Ocean.instance.secretStore = await OceanSecretStore.getInstance()
|
2019-02-18 15:37:52 +01:00
|
|
|
Ocean.instance.tokens = await OceanTokens.getInstance()
|
2018-10-16 14:56:18 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
return Ocean.instance
|
2018-10-05 12:34:31 +02:00
|
|
|
}
|
|
|
|
|
2019-01-09 16:17:23 +01:00
|
|
|
/**
|
|
|
|
* Ocean instance.
|
|
|
|
* @type {Ocean}
|
|
|
|
*/
|
|
|
|
private static instance: Ocean = null
|
2018-11-06 16:23:48 +01:00
|
|
|
|
2019-03-04 13:05:27 +01:00
|
|
|
/**
|
|
|
|
* Keeper instance.
|
|
|
|
* @type {Keeper}
|
|
|
|
*/
|
|
|
|
public keeper: Keeper
|
|
|
|
|
2019-01-09 16:17:23 +01:00
|
|
|
/**
|
2019-01-21 17:48:40 +01:00
|
|
|
* Ocean account submodule
|
|
|
|
* @type {OceanAccounts}
|
|
|
|
*/
|
|
|
|
public accounts: OceanAccounts
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Ocean assets submodule
|
|
|
|
* @type {OceanAssets}
|
|
|
|
*/
|
|
|
|
public assets: OceanAssets
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Ocean agreements submodule
|
|
|
|
* @type {OceanAgreements}
|
2019-01-09 16:17:23 +01:00
|
|
|
*/
|
2019-01-21 17:48:40 +01:00
|
|
|
public agreements: OceanAgreements
|
2018-10-17 10:12:40 +02:00
|
|
|
|
2019-02-14 11:26:12 +01:00
|
|
|
/**
|
|
|
|
* Ocean secretStore submodule
|
|
|
|
* @type {OceanSecretStore}
|
|
|
|
*/
|
|
|
|
public secretStore: OceanSecretStore
|
|
|
|
|
2019-02-18 15:37:52 +01:00
|
|
|
/**
|
|
|
|
* Ocean tokens submodule
|
|
|
|
* @type {OceanTokens}
|
|
|
|
*/
|
|
|
|
public tokens: OceanTokens
|
|
|
|
|
|
|
|
private constructor() { }
|
2018-10-16 14:56:18 +02:00
|
|
|
|
2019-01-09 16:17:23 +01:00
|
|
|
/**
|
|
|
|
* Returns the list of accounts.
|
2019-01-21 17:48:40 +01:00
|
|
|
* @deprecated Replace by [Ocean.accounts.list]{@link #OceanAccounts.list}
|
2019-01-09 16:17:23 +01:00
|
|
|
* @return {Promise<Account[]>}
|
|
|
|
*/
|
2019-01-21 17:48:40 +01:00
|
|
|
@deprecated("OceanAccounts.list")
|
2018-10-16 14:56:18 +02:00
|
|
|
public async getAccounts(): Promise<Account[]> {
|
2019-01-21 17:48:40 +01:00
|
|
|
return await this.accounts.list()
|
2018-10-16 14:56:18 +02:00
|
|
|
}
|
|
|
|
|
2019-01-09 16:17:23 +01:00
|
|
|
/**
|
|
|
|
* Returns a DDO by DID.
|
2019-01-21 17:48:40 +01:00
|
|
|
* @deprecated Replace by [Ocean.assets.resolve]{@link #OceanAssets.resolve}
|
2019-01-09 16:17:23 +01:00
|
|
|
* @param {string} did Decentralized ID.
|
|
|
|
* @return {Promise<DDO>}
|
|
|
|
*/
|
2019-01-21 17:48:40 +01:00
|
|
|
@deprecated("OceanAssets.resolve")
|
2018-12-17 15:54:58 +01:00
|
|
|
public async resolveDID(did: string): Promise<DDO> {
|
2019-01-21 17:48:40 +01:00
|
|
|
return await this.assets.resolve(did)
|
2019-01-15 11:34:45 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Returns a DDO by DID.
|
2019-01-21 17:48:40 +01:00
|
|
|
* @deprecated Replace by [Ocean.assets.resolve]{@link #OceanAssets.resolve}
|
2019-01-15 11:34:45 +01:00
|
|
|
* @param {string} did Decentralized ID.
|
|
|
|
* @return {Promise<DDO>}
|
|
|
|
*/
|
2019-01-21 17:48:40 +01:00
|
|
|
@deprecated("OceanAssets.resolve")
|
2019-01-15 11:34:45 +01:00
|
|
|
public async resolveAssetDID(did: string): Promise<DDO> {
|
2019-01-21 17:48:40 +01:00
|
|
|
return await this.assets.resolve(did)
|
2018-11-19 12:16:11 +01:00
|
|
|
}
|
|
|
|
|
2019-01-09 16:17:23 +01:00
|
|
|
/**
|
|
|
|
* Registers a new DDO.
|
2019-01-21 17:48:40 +01:00
|
|
|
* @deprecated Replace by [Ocean.assets.create]{@link #OceanAssets.create}
|
2019-01-09 16:17:23 +01:00
|
|
|
* @param {MetaData} metadata DDO metadata.
|
2019-02-14 11:26:12 +01:00
|
|
|
* @param {Account} publisher Publisher account.
|
2019-01-09 16:17:23 +01:00
|
|
|
* @return {Promise<DDO>}
|
|
|
|
*/
|
2019-01-21 17:48:40 +01:00
|
|
|
@deprecated("OceanAssets.create")
|
2019-02-04 17:45:49 +01:00
|
|
|
public async registerAsset(metadata: MetaData, publisher: Account, services?: Service[]): Promise<DDO> {
|
|
|
|
return await this.assets.create(metadata, publisher, services)
|
2018-11-07 14:33:56 +01:00
|
|
|
}
|
|
|
|
|
2019-01-15 11:34:45 +01:00
|
|
|
/**
|
|
|
|
* Signs a service agreement by DID.
|
2019-02-13 14:32:52 +01:00
|
|
|
* @deprecated Replace by [Ocean.agreement.prepare]{@link #OceanAgreement.prepare}
|
2019-01-15 11:34:45 +01:00
|
|
|
* @param {string} did Decentralized ID.
|
|
|
|
* @param {string} serviceDefinitionId Service definition ID.
|
|
|
|
* @param {Account} consumer Consumer account.
|
|
|
|
* @return {Promise<any>}
|
2019-01-22 14:18:58 +01:00
|
|
|
*
|
2019-01-15 11:34:45 +01:00
|
|
|
*/
|
2019-02-13 14:32:52 +01:00
|
|
|
@deprecated("OceanAgreement.prepare")
|
2019-01-15 11:34:45 +01:00
|
|
|
public async signServiceAgreement(
|
|
|
|
did: string,
|
|
|
|
serviceDefinitionId: string,
|
|
|
|
consumer: Account,
|
2019-02-10 20:03:38 +01:00
|
|
|
) {
|
2019-02-13 14:32:52 +01:00
|
|
|
return await this.agreements.prepare(did, serviceDefinitionId, consumer)
|
2019-01-15 11:34:45 +01:00
|
|
|
}
|
|
|
|
|
2019-01-09 16:17:23 +01:00
|
|
|
/**
|
|
|
|
* Signs a service agreement by DID.
|
2019-01-21 17:48:40 +01:00
|
|
|
* @deprecated Replace by [Ocean.assets.order]{@link #OceanAssets.order}
|
2019-01-09 16:17:23 +01:00
|
|
|
* @param {string} did Decentralized ID.
|
|
|
|
* @param {string} serviceDefinitionId Service definition ID.
|
|
|
|
* @param {Account} consumer Consumer account.
|
|
|
|
* @return {Promise<any>}
|
|
|
|
*/
|
2019-01-21 17:48:40 +01:00
|
|
|
@deprecated("OceanAssets.order")
|
2019-01-15 11:34:45 +01:00
|
|
|
public async purchaseAssetService(
|
|
|
|
did: string,
|
|
|
|
serviceDefinitionId: string,
|
|
|
|
consumer: Account,
|
|
|
|
): Promise<any> {
|
2019-01-21 17:48:40 +01:00
|
|
|
return await this.assets.order(did, serviceDefinitionId, consumer)
|
2018-11-12 08:33:19 +01:00
|
|
|
}
|
|
|
|
|
2019-01-09 16:17:23 +01:00
|
|
|
/**
|
|
|
|
* Creates a new service agreement.
|
2019-02-21 17:58:54 +01:00
|
|
|
* @deprecated Replace by [Ocean.assets.consume]{@link #OceanAssets.consume}
|
2019-01-09 16:17:23 +01:00
|
|
|
* @param {string} did Decentralized ID.
|
|
|
|
* @param {string} serviceDefinitionId Service definition ID.
|
|
|
|
* @param {string} serviceAgreementId Service agreement ID.
|
|
|
|
* @param {string} serviceAgreementSignature Service agreement signature.
|
|
|
|
* @param {Function} cb Callback executen when the access is granted.
|
|
|
|
* @param {Account} consumer Consumer account.
|
|
|
|
*/
|
2019-02-21 17:58:54 +01:00
|
|
|
@deprecated("OceanAssets.consume")
|
2019-01-15 11:34:45 +01:00
|
|
|
public async initializeServiceAgreement(
|
|
|
|
did: string,
|
|
|
|
serviceDefinitionId: string,
|
|
|
|
serviceAgreementId: string,
|
|
|
|
serviceAgreementSignature: string,
|
|
|
|
cb: (files: string[]) => void,
|
|
|
|
consumer: Account,
|
|
|
|
) {
|
2019-02-25 14:06:48 +01:00
|
|
|
return await this.assets.consume(serviceAgreementId, did, serviceDefinitionId, consumer)
|
2018-11-19 12:16:11 +01:00
|
|
|
}
|
|
|
|
|
2019-01-09 16:17:23 +01:00
|
|
|
/**
|
|
|
|
* Executes a service agreement.
|
2019-01-21 17:48:40 +01:00
|
|
|
* @deprecated Replace by [Ocean.agreements.create]{@link #OceanAgreements.create}
|
2019-01-09 16:17:23 +01:00
|
|
|
* @param {string} did Decentralized ID.
|
|
|
|
* @param {string} serviceDefinitionId Service definition ID.
|
|
|
|
* @param {string} serviceAgreementId Service agreement ID.
|
|
|
|
* @param {string} serviceAgreementSignature Service agreement signature.
|
|
|
|
* @param {Account} consumer Consumer account.
|
|
|
|
* @param {Account} publisher Publisher account.
|
|
|
|
* @return {Promise<ServiceAgreement>}
|
|
|
|
*/
|
2019-01-21 17:48:40 +01:00
|
|
|
@deprecated("OceanAgreements.create")
|
2019-01-15 11:34:45 +01:00
|
|
|
public async executeServiceAgreement(
|
|
|
|
did: string,
|
|
|
|
serviceDefinitionId: string,
|
|
|
|
serviceAgreementId: string,
|
|
|
|
serviceAgreementSignature: string,
|
|
|
|
consumer: Account,
|
|
|
|
publisher: Account,
|
|
|
|
): Promise<ServiceAgreement> {
|
2019-01-21 17:48:40 +01:00
|
|
|
return await this.agreements
|
|
|
|
.create(did,
|
2018-11-21 14:59:22 +01:00
|
|
|
serviceDefinitionId,
|
|
|
|
serviceAgreementId,
|
|
|
|
serviceAgreementSignature,
|
|
|
|
consumer,
|
2019-01-21 17:48:40 +01:00
|
|
|
publisher,
|
|
|
|
)
|
2018-10-05 12:34:31 +02:00
|
|
|
}
|
2018-10-26 10:40:46 +02:00
|
|
|
|
2019-01-09 16:17:23 +01:00
|
|
|
/**
|
|
|
|
* Search over the assets using a query.
|
2019-01-21 17:48:40 +01:00
|
|
|
* @deprecated Replace by [Ocean.assets.query]{@link #OceanAssets.query}
|
2019-01-09 16:17:23 +01:00
|
|
|
* @param {SearchQuery} query Query to filter the assets.
|
|
|
|
* @return {Promise<DDO[]>}
|
|
|
|
*/
|
2019-01-21 17:48:40 +01:00
|
|
|
@deprecated("OceanAssets.query")
|
2018-11-12 08:33:19 +01:00
|
|
|
public async searchAssets(query: SearchQuery): Promise<DDO[]> {
|
2019-01-21 17:48:40 +01:00
|
|
|
return await this.assets.query(query)
|
2018-10-26 10:40:46 +02:00
|
|
|
}
|
2018-11-05 14:58:58 +01:00
|
|
|
|
2019-01-09 16:17:23 +01:00
|
|
|
/**
|
|
|
|
* Search over the assets using a keyword.
|
2019-01-21 17:48:40 +01:00
|
|
|
* @deprecated Replace by [Ocean.assets.search]{@link #OceanAssets.search}
|
|
|
|
* @param {string} text Text to filter the assets.
|
2019-01-09 16:17:23 +01:00
|
|
|
* @return {Promise<DDO[]>}
|
|
|
|
*/
|
2019-01-21 17:48:40 +01:00
|
|
|
@deprecated("OceanAssets.search")
|
2018-11-12 08:33:19 +01:00
|
|
|
public async searchAssetsByText(text: string): Promise<DDO[]> {
|
2019-01-21 17:48:40 +01:00
|
|
|
return await this.assets.search(text)
|
2018-11-05 14:58:58 +01:00
|
|
|
}
|
2018-10-05 12:34:31 +02:00
|
|
|
}
|