mirror of
https://github.com/oceanprotocol/ocean.js.git
synced 2024-11-26 20:39:05 +01:00
Delete ServiceUtils.ts
This commit is contained in:
parent
271f451d1d
commit
83fa8a704d
@ -1,115 +0,0 @@
|
|||||||
import { DDO } from '../../ddo/DDO'
|
|
||||||
import Account from '../Account'
|
|
||||||
import { zeroX, Logger, generateId } from '../../utils'
|
|
||||||
import { Ocean } from '../../squid'
|
|
||||||
import { Condition } from '../../keeper/contracts/conditions'
|
|
||||||
import { ServiceType, Service } from '../../ddo/Service'
|
|
||||||
|
|
||||||
export enum OrderProgressStep {
|
|
||||||
CreatingAgreement,
|
|
||||||
AgreementInitialized,
|
|
||||||
LockingPayment,
|
|
||||||
LockedPayment
|
|
||||||
}
|
|
||||||
|
|
||||||
export class ServiceUtils {
|
|
||||||
private ocean: Ocean
|
|
||||||
private logger: Logger
|
|
||||||
|
|
||||||
constructor(ocean: Ocean, logger: Logger) {
|
|
||||||
this.ocean = ocean
|
|
||||||
this.logger = logger
|
|
||||||
}
|
|
||||||
|
|
||||||
public async order(
|
|
||||||
type: ServiceType,
|
|
||||||
condition: Condition,
|
|
||||||
observer: any,
|
|
||||||
consumerAccount: Account,
|
|
||||||
ddo: DDO,
|
|
||||||
provider?: string
|
|
||||||
): Promise<string> {
|
|
||||||
const { keeper, agreements } = this.ocean
|
|
||||||
|
|
||||||
const agreementId = zeroX(generateId())
|
|
||||||
const service: Service = ddo.findServiceByType(type)
|
|
||||||
const metadata = ddo.findServiceByType('metadata')
|
|
||||||
|
|
||||||
const templateName = service.attributes.serviceAgreementTemplate.contractName
|
|
||||||
const template = keeper.getTemplateByName(templateName)
|
|
||||||
|
|
||||||
// use price from compute service,
|
|
||||||
// otherwise always take the price from metadata
|
|
||||||
const price =
|
|
||||||
type === 'compute'
|
|
||||||
? service.attributes.main.price
|
|
||||||
: metadata.attributes.main.price
|
|
||||||
|
|
||||||
// eslint-disable-next-line no-async-promise-executor
|
|
||||||
const paymentFlow = new Promise(async (resolve, reject) => {
|
|
||||||
await template.getAgreementCreatedEvent(agreementId).once()
|
|
||||||
|
|
||||||
this.logger.log('Agreement initialized')
|
|
||||||
observer.next(OrderProgressStep.AgreementInitialized)
|
|
||||||
|
|
||||||
this.logger.log('Locking payment')
|
|
||||||
|
|
||||||
const serviceGranted = condition
|
|
||||||
.getConditionFulfilledEvent(agreementId)
|
|
||||||
.once()
|
|
||||||
|
|
||||||
observer.next(OrderProgressStep.LockingPayment)
|
|
||||||
const paid = await agreements.conditions.lockReward(
|
|
||||||
agreementId,
|
|
||||||
price,
|
|
||||||
consumerAccount
|
|
||||||
)
|
|
||||||
observer.next(OrderProgressStep.LockedPayment)
|
|
||||||
|
|
||||||
if (paid) {
|
|
||||||
this.logger.log('Payment was OK')
|
|
||||||
} else {
|
|
||||||
this.logger.error('Payment was KO')
|
|
||||||
this.logger.error('Agreement ID: ', agreementId)
|
|
||||||
this.logger.error('DID: ', ddo.id)
|
|
||||||
reject(new Error('Error on payment'))
|
|
||||||
}
|
|
||||||
|
|
||||||
await serviceGranted
|
|
||||||
|
|
||||||
this.logger.log(`Service ${type} granted`)
|
|
||||||
resolve()
|
|
||||||
})
|
|
||||||
|
|
||||||
observer.next(OrderProgressStep.CreatingAgreement)
|
|
||||||
this.logger.log('Creating agreement')
|
|
||||||
|
|
||||||
// Get provider from didRegistry if not given in arguments
|
|
||||||
let _provider = provider
|
|
||||||
if (!provider) {
|
|
||||||
const providers = await keeper.didRegistry.getDIDProviders(ddo.shortId())
|
|
||||||
if (providers) {
|
|
||||||
_provider = providers[0]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
await agreements.create(
|
|
||||||
ddo.id,
|
|
||||||
agreementId,
|
|
||||||
service.index,
|
|
||||||
undefined,
|
|
||||||
consumerAccount,
|
|
||||||
_provider,
|
|
||||||
consumerAccount
|
|
||||||
)
|
|
||||||
this.logger.log('Agreement created')
|
|
||||||
|
|
||||||
try {
|
|
||||||
await paymentFlow
|
|
||||||
} catch (e) {
|
|
||||||
throw new Error(`Error paying the ${type} service.`)
|
|
||||||
}
|
|
||||||
|
|
||||||
return agreementId
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
x
Reference in New Issue
Block a user