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/Ocean.ts

267 lines
8.9 KiB
TypeScript
Raw Normal View History

2019-01-22 14:18:58 +01:00
import deprecated from "deprecated-decorator"
2019-01-21 17:48:40 +01:00
import OceanAccounts from "./OceanAccounts"
import OceanAgreements from "./OceanAgreements"
import OceanAssets from "./OceanAssets"
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"
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"
import Logger 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"
import ServiceAgreement from "./ServiceAgreements/ServiceAgreement"
2018-10-05 12:34:31 +02:00
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> {
2018-10-16 14:56:18 +02:00
if (!Ocean.instance) {
2018-10-26 10:40:46 +02:00
ConfigProvider.setConfig(config)
Ocean.instance = new Ocean()
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()
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
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
private constructor() {
2018-10-17 10:12:40 +02:00
}
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)
}
/**
* Returns a DDO by DID.
2019-01-21 17:48:40 +01:00
* @deprecated Replace by [Ocean.assets.resolve]{@link #OceanAssets.resolve}
* @param {string} did Decentralized ID.
* @return {Promise<DDO>}
*/
2019-01-21 17:48:40 +01:00
@deprecated("OceanAssets.resolve")
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.
* @param {Account} publisher Publicher account.
* @return {Promise<DDO>}
*/
2019-01-21 17:48:40 +01:00
@deprecated("OceanAssets.create")
public async registerAsset(metadata: MetaData, publisher: Account, services?: Service[]): Promise<DDO> {
return await this.assets.create(metadata, publisher, services)
}
/**
* Signs a service agreement by DID.
* @deprecated Replace by [Ocean.agreement.prepare]{@link #OceanAgreement.prepare}
* @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
*
*/
@deprecated("OceanAgreement.prepare")
public async signServiceAgreement(
did: string,
serviceDefinitionId: string,
consumer: Account,
2019-02-10 20:03:38 +01:00
) {
return await this.agreements.prepare(did, serviceDefinitionId, consumer)
}
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")
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.
* @private
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.
*/
public async initializeServiceAgreement(
did: string,
serviceDefinitionId: string,
serviceAgreementId: string,
serviceAgreementSignature: string,
cb: (files: string[]) => void,
consumer: Account,
) {
2018-12-17 15:54:58 +01:00
const d: DID = DID.parse(did)
const ddo = await AquariusProvider.getAquarius().retrieveDDO(d)
2019-02-15 19:36:30 +01:00
const accessService = ddo.findServiceByType("Access")
const metadataService = ddo.findServiceByType("Metadata")
const accessEvent: ContractEvent = EventListener.subscribe(
accessService.conditions[1].contractName,
2019-02-12 15:07:10 +01:00
accessService.conditions[1].events[1].name,
{},
)
2019-01-24 10:58:05 +01:00
const filesPromise = new Promise((resolve) => {
accessEvent.listenOnce(async () => {
Logger.log("Awesome; got a AccessGranted Event. Let's download the asset files.")
const contentUrls = await SecretStoreProvider
.getSecretStore()
.decryptDocument(d.getId(), (metadataService as any).metadata.base.contentUrls[0])
const serviceUrl: string = accessService.serviceEndpoint
Logger.log("Consuming asset files using service url: ", serviceUrl)
const files = []
for (const cUrl of contentUrls) {
let url: string = serviceUrl + `?url=${cUrl}`
url = url + `&serviceAgreementId=${serviceAgreementId}`
url = url + `&consumerAddress=${consumer.getId()}`
files.push(url)
}
cb(files)
resolve(files)
})
})
await BrizoProvider
2018-11-21 14:59:22 +01:00
.getBrizo()
.initializeServiceAgreement(
did,
serviceAgreementId,
serviceDefinitionId,
serviceAgreementSignature,
2018-11-26 15:24:59 +01:00
consumer.getId())
2019-01-24 10:58:05 +01:00
await filesPromise
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")
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
}