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

106 lines
3.7 KiB
TypeScript
Raw Normal View History

2018-10-25 17:26:26 +02:00
import AquariusProvider from "../aquarius/AquariusProvider"
2018-11-05 10:01:58 +01:00
import SearchQuery from "../aquarius/query/SearchQuery"
2018-10-16 14:56:18 +02:00
import ConfigProvider from "../ConfigProvider"
2018-11-05 14:56:14 +01:00
import DDOCondition from "../ddo/Condition"
2018-11-05 10:01:58 +01:00
import DDO from "../ddo/DDO"
2018-11-05 14:56:14 +01:00
import Parameter from "../ddo/Parameter"
2018-11-05 10:01:58 +01:00
import Service from "../ddo/Service"
2018-10-05 12:34:31 +02:00
import Keeper from "../keeper/Keeper"
2018-10-16 14:56:18 +02:00
import Web3Provider from "../keeper/Web3Provider"
2018-10-25 17:18:57 +02:00
import Config from "../models/Config"
2018-11-05 14:56:14 +01:00
import ValuePair from "../models/ValuePair"
2018-10-05 12:34:31 +02:00
import Account from "./Account"
import Asset from "./Asset"
2018-10-26 13:37:09 +02:00
import IdGenerator from "./IdGenerator"
2018-11-05 14:56:14 +01:00
import Condition from "./ServiceAgreements/Condition"
import ServiceAgreementTemplate from "./ServiceAgreements/ServiceAgreementTemplate"
import DefaultTemplate from "./ServiceAgreements/Templates/Default"
2018-10-05 12:34:31 +02:00
export default class Ocean {
2018-10-25 17:18:57 +02:00
public static async getInstance(config: Config) {
2018-10-16 14:56:18 +02:00
if (!Ocean.instance) {
2018-10-26 10:40:46 +02:00
ConfigProvider.setConfig(config)
2018-10-17 10:12:40 +02:00
Ocean.instance = new Ocean(await Keeper.getInstance())
2018-10-16 14:56:18 +02:00
}
return Ocean.instance
2018-10-05 12:34:31 +02:00
}
2018-10-16 14:56:18 +02:00
private static instance = null
2018-10-17 10:12:40 +02:00
private keeper: Keeper
private constructor(keeper: Keeper) {
this.keeper = keeper
}
2018-10-16 14:56:18 +02:00
public async getAccounts(): Promise<Account[]> {
// retrieve eth accounts
const ethAccounts = await Web3Provider.getWeb3().eth.getAccounts()
2018-10-17 10:12:40 +02:00
return ethAccounts.map((address: string) => new Account(address))
2018-10-16 14:56:18 +02:00
}
2018-11-05 10:01:58 +01:00
public async register(asset: Asset): Promise<DDO> {
2018-10-16 14:56:18 +02:00
2018-11-05 10:01:58 +01:00
const {market} = this.keeper
2018-10-16 14:56:18 +02:00
2018-11-05 10:01:58 +01:00
const assetId: string = IdGenerator.generateId()
const did: string = `did:op:${assetId}`
const serviceName = "Access"
2018-11-05 14:56:14 +01:00
const serviceAgreementTemplate: ServiceAgreementTemplate =
await ServiceAgreementTemplate.registerServiceAgreementsTemplate(serviceName, DefaultTemplate.methods,
2018-11-05 10:01:58 +01:00
asset.publisher)
// get condition keys from template
2018-11-05 14:56:14 +01:00
const conditions: Condition[] = serviceAgreementTemplate.getConditions()
2018-11-05 10:01:58 +01:00
// create ddo conditions out of the keys
2018-11-05 14:56:14 +01:00
const ddoConditions: DDOCondition[] = conditions.map((condition: Condition): DDOCondition => {
2018-11-05 10:01:58 +01:00
return {
2018-11-05 14:56:14 +01:00
name: condition.methodReflection.methodName,
2018-11-05 10:01:58 +01:00
timeout: 100,
2018-11-05 14:56:14 +01:00
conditionKey: condition.condtionKey,
parameters: condition.methodReflection.inputs.map((input: ValuePair) => {
return {
...input,
value: "xxx",
} as Parameter
}),
} as DDOCondition
2018-11-05 10:01:58 +01:00
})
// create ddo itself
const ddo: DDO = new DDO({
id: did,
service: [
{
type: serviceName,
// tslint:disable
serviceEndpoint: "http://mybrizo.org/api/v1/brizo/services/consume?pubKey=${pubKey}&serviceId={serviceId}&url={url}",
purchaseEndpoint: "http://mybrizo.org/api/v1/brizo/services/access/purchase?",
// the id of the service agreement?
serviceDefinitionId: "0x" + IdGenerator.generateId(),
// the id of the service agreement template
2018-11-05 14:56:14 +01:00
templateId: serviceAgreementTemplate.getId(),
conditions: ddoConditions,
2018-11-05 10:01:58 +01:00
} as Service,
],
})
await AquariusProvider.getAquarius().storeDDO(ddo)
asset.setId(assetId)
2018-10-05 12:34:31 +02:00
2018-11-05 10:01:58 +01:00
await market.register(assetId, asset.price, asset.publisher.getId())
return ddo
2018-10-05 12:34:31 +02:00
}
2018-10-26 10:40:46 +02:00
2018-11-05 10:01:58 +01:00
public async searchAssets(query: SearchQuery): Promise<any[]> {
2018-10-26 10:40:46 +02:00
return AquariusProvider.getAquarius().queryMetadata(query)
}
2018-10-05 12:34:31 +02:00
}