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

110 lines
3.4 KiB
TypeScript
Raw Normal View History

2018-10-16 14:56:18 +02:00
import ConfigProvider from "../ConfigProvider"
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-10-17 18:24:01 +02:00
import Provider from "../provider/Provider"
import ProviderProvider from "../provider/ProviderProvider"
2018-10-25 17:18:57 +02:00
import SecretStoreProvider from "../secretstore/SecretStoreProvider"
2018-10-16 14:56:18 +02:00
import Logger from "../utils/Logger"
2018-10-05 12:34:31 +02:00
import Account from "./Account"
import Asset from "./Asset"
import Order from "./Order"
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) {
ConfigProvider.configure(config)
2018-10-25 17:18:57 +02:00
SecretStoreProvider.configure(config)
2018-10-17 18:24:01 +02:00
ProviderProvider.setProvider(Provider)
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
}
public async register(asset: Asset): Promise<string> {
2018-10-17 10:12:40 +02:00
const {market} = this.keeper
2018-10-16 14:56:18 +02:00
2018-10-25 17:18:57 +02:00
const secretStore = SecretStoreProvider.getSecretStore()
const id = Math.random().toString(10)
Logger.log("id", id)
const assetId = (await market.generateId(id)).replace("0x", "")
Logger.log(assetId.length)
const encryptedDocument = await secretStore.encryptDocument(assetId, asset)
const decryptedDocument = await secretStore.decryptDocument(assetId, encryptedDocument)
Logger.log(decryptedDocument, encryptedDocument)
2018-10-16 14:56:18 +02:00
// generate an id
2018-10-17 18:24:01 +02:00
Logger.log(`Registering: ${assetId} with price ${asset.price} for ${asset.publisher.getId()}`)
2018-10-16 14:56:18 +02:00
asset.setId(assetId)
2018-10-17 18:24:01 +02:00
const isAssetActive = await market.isAssetActive(assetId)
2018-10-16 14:56:18 +02:00
// register asset in the market
2018-10-17 18:24:01 +02:00
if (!isAssetActive) {
const result = await market.register(asset.getId(), asset.price, asset.publisher.getId())
Logger.log("Registered:", assetId, "in block", result.blockNumber)
} else {
throw new Error("Asset already registered")
}
return assetId
2018-10-16 14:56:18 +02:00
}
public async getOrdersByAccount(consumer: Account): Promise<Order[]> {
const {auth} = this.keeper
2018-10-16 14:56:18 +02:00
Logger.log("Getting orders")
const accessConsentRequestedData = await auth.getEventData(
"AccessConsentRequested", {
filter: {
_consumer: consumer.getId(),
},
fromBlock: 0,
toBlock: "latest",
})
const orders = await Promise.all(
accessConsentRequestedData
.map(async (event: any) => {
const {returnValues} = event
const order: Order = new Order(
2018-10-17 18:24:01 +02:00
null,
2018-10-16 14:56:18 +02:00
parseInt(returnValues._timeout, 10),
null, null)
order.setId(returnValues._id)
2018-10-05 12:34:31 +02:00
2018-10-16 14:56:18 +02:00
return order
}),
)
2018-10-05 12:34:31 +02:00
2018-10-16 14:56:18 +02:00
// Logger.log("Got orders:", JSON.stringify(orders, null, 2))
Logger.log(`Got ${Object.keys(orders).length} orders`)
2018-10-05 12:34:31 +02:00
2018-10-16 14:56:18 +02:00
return orders
2018-10-05 12:34:31 +02:00
}
}