264 lines
6.8 KiB
TypeScript
264 lines
6.8 KiB
TypeScript
import {
|
|
Arweave,
|
|
GraphqlQuery,
|
|
Smartcontract,
|
|
ComputeAlgorithm,
|
|
ComputeAsset,
|
|
ComputeEnvironment,
|
|
downloadFileBrowser,
|
|
FileInfo,
|
|
Ipfs,
|
|
LoggerInstance,
|
|
ProviderComputeInitializeResults,
|
|
ProviderInstance,
|
|
UrlFile,
|
|
AbiItem,
|
|
UserCustomParameters,
|
|
getErrorMessage
|
|
} from '@oceanprotocol/lib'
|
|
// if customProviderUrl is set, we need to call provider using this custom endpoint
|
|
import { customProviderUrl } from '../../app.config'
|
|
import { KeyValuePair } from '@shared/FormInput/InputElement/KeyValueInput'
|
|
import { Signer } from 'ethers'
|
|
import { getValidUntilTime } from './compute'
|
|
import { toast } from 'react-toastify'
|
|
import { tr } from 'date-fns/locale'
|
|
|
|
export async function initializeProviderForCompute(
|
|
dataset: AssetExtended,
|
|
algorithm: AssetExtended,
|
|
accountId: string,
|
|
computeEnv: ComputeEnvironment = null
|
|
): Promise<ProviderComputeInitializeResults> {
|
|
const computeAsset: ComputeAsset = {
|
|
documentId: dataset.id,
|
|
serviceId: dataset.services[0].id,
|
|
transferTxId: dataset.accessDetails.validOrderTx
|
|
}
|
|
const computeAlgo: ComputeAlgorithm = {
|
|
documentId: algorithm.id,
|
|
serviceId: algorithm.services[0].id,
|
|
transferTxId: algorithm.accessDetails.validOrderTx
|
|
}
|
|
|
|
const validUntil = getValidUntilTime(
|
|
computeEnv?.maxJobDuration,
|
|
dataset.services[0].timeout,
|
|
algorithm.services[0].timeout
|
|
)
|
|
|
|
try {
|
|
return await ProviderInstance.initializeCompute(
|
|
[computeAsset],
|
|
computeAlgo,
|
|
computeEnv?.id,
|
|
validUntil,
|
|
customProviderUrl || dataset.services[0].serviceEndpoint,
|
|
accountId
|
|
)
|
|
} catch (error) {
|
|
const message = getErrorMessage(JSON.parse(error.message))
|
|
LoggerInstance.error('[Initialize Provider] Error:', message)
|
|
toast.error(message)
|
|
return null
|
|
}
|
|
}
|
|
|
|
// TODO: Why do we have these one line functions ?!?!?!
|
|
export async function getEncryptedFiles(
|
|
files: any,
|
|
chainId: number,
|
|
providerUrl: string
|
|
): Promise<string> {
|
|
try {
|
|
// https://github.com/oceanprotocol/provider/blob/v4main/API.md#encrypt-endpoint
|
|
const response = await ProviderInstance.encrypt(
|
|
files,
|
|
chainId,
|
|
customProviderUrl || providerUrl
|
|
)
|
|
return response
|
|
} catch (error) {
|
|
const message = getErrorMessage(JSON.parse(error.message))
|
|
LoggerInstance.error('[Provider Encrypt] Error:', message)
|
|
toast.error(message)
|
|
}
|
|
}
|
|
|
|
export async function getFileDidInfo(
|
|
did: string,
|
|
serviceId: string,
|
|
providerUrl: string,
|
|
withChecksum = false
|
|
): Promise<FileInfo[]> {
|
|
try {
|
|
const response = await ProviderInstance.checkDidFiles(
|
|
did,
|
|
serviceId,
|
|
customProviderUrl || providerUrl,
|
|
withChecksum
|
|
)
|
|
return response
|
|
} catch (error) {
|
|
const message = getErrorMessage(JSON.parse(error.message))
|
|
LoggerInstance.error('[Initialize check file did] Error:', message)
|
|
toast.error(message)
|
|
}
|
|
}
|
|
|
|
export async function getFileInfo(
|
|
file: string,
|
|
providerUrl: string,
|
|
storageType: string,
|
|
query?: string,
|
|
headers?: KeyValuePair[],
|
|
abi?: string,
|
|
chainId?: number,
|
|
method?: string
|
|
): Promise<FileInfo[]> {
|
|
let response
|
|
const headersProvider = {}
|
|
if (headers?.length > 0) {
|
|
headers.map((el) => {
|
|
headersProvider[el.key] = el.value
|
|
return el
|
|
})
|
|
}
|
|
|
|
switch (storageType) {
|
|
case 'ipfs': {
|
|
const fileIPFS: Ipfs = {
|
|
type: storageType,
|
|
hash: file
|
|
}
|
|
try {
|
|
response = await ProviderInstance.getFileInfo(
|
|
fileIPFS,
|
|
customProviderUrl || providerUrl
|
|
)
|
|
} catch (error) {
|
|
const message = getErrorMessage(JSON.parse(error.message))
|
|
LoggerInstance.error('[Provider Get File info] Error:', message)
|
|
toast.error(message)
|
|
}
|
|
break
|
|
}
|
|
case 'arweave': {
|
|
const fileArweave: Arweave = {
|
|
type: storageType,
|
|
transactionId: file
|
|
}
|
|
try {
|
|
response = await ProviderInstance.getFileInfo(
|
|
fileArweave,
|
|
customProviderUrl || providerUrl
|
|
)
|
|
} catch (error) {
|
|
const message = getErrorMessage(JSON.parse(error.message))
|
|
LoggerInstance.error('[Provider Get File info] Error:', message)
|
|
toast.error(message)
|
|
}
|
|
break
|
|
}
|
|
case 'graphql': {
|
|
const fileGraphql: GraphqlQuery = {
|
|
type: storageType,
|
|
url: file,
|
|
headers: headersProvider,
|
|
query
|
|
}
|
|
try {
|
|
response = await ProviderInstance.getFileInfo(
|
|
fileGraphql,
|
|
customProviderUrl || providerUrl
|
|
)
|
|
} catch (error) {
|
|
const message = getErrorMessage(JSON.parse(error.message))
|
|
LoggerInstance.error('[Provider Get File info] Error:', message)
|
|
toast.error(message)
|
|
}
|
|
break
|
|
}
|
|
case 'smartcontract': {
|
|
// clean obj
|
|
const fileSmartContract: Smartcontract = {
|
|
chainId,
|
|
type: storageType,
|
|
address: file,
|
|
abi: JSON.parse(abi) as AbiItem
|
|
}
|
|
try {
|
|
response = await ProviderInstance.getFileInfo(
|
|
fileSmartContract,
|
|
customProviderUrl || providerUrl
|
|
)
|
|
} catch (error) {
|
|
const message = getErrorMessage(JSON.parse(error.message))
|
|
LoggerInstance.error('[Provider Get File info] Error:', message)
|
|
toast.error(message)
|
|
}
|
|
break
|
|
}
|
|
default: {
|
|
const fileUrl: UrlFile = {
|
|
type: 'url',
|
|
index: 0,
|
|
url: file,
|
|
headers: headersProvider,
|
|
method
|
|
}
|
|
try {
|
|
response = await ProviderInstance.getFileInfo(
|
|
fileUrl,
|
|
customProviderUrl || providerUrl
|
|
)
|
|
} catch (error) {
|
|
const message = getErrorMessage(JSON.parse(error.message))
|
|
LoggerInstance.error('[Provider Get File info] Error:', message)
|
|
toast.error(message)
|
|
}
|
|
break
|
|
}
|
|
}
|
|
return response
|
|
}
|
|
|
|
export async function downloadFile(
|
|
signer: Signer,
|
|
asset: AssetExtended,
|
|
accountId: string,
|
|
validOrderTx?: string,
|
|
userCustomParameters?: UserCustomParameters
|
|
) {
|
|
let downloadUrl
|
|
try {
|
|
downloadUrl = await ProviderInstance.getDownloadUrl(
|
|
asset.id,
|
|
asset.services[0].id,
|
|
0,
|
|
validOrderTx || asset.accessDetails.validOrderTx,
|
|
customProviderUrl || asset.services[0].serviceEndpoint,
|
|
signer,
|
|
userCustomParameters
|
|
)
|
|
} catch (error) {
|
|
const message = getErrorMessage(JSON.parse(error.message))
|
|
LoggerInstance.error('[Provider Get download url] Error:', message)
|
|
toast.error(message)
|
|
}
|
|
await downloadFileBrowser(downloadUrl)
|
|
}
|
|
|
|
export async function checkValidProvider(
|
|
providerUrl: string
|
|
): Promise<boolean> {
|
|
try {
|
|
const response = await ProviderInstance.isValidProvider(providerUrl)
|
|
return response
|
|
} catch (error) {
|
|
const message = getErrorMessage(JSON.parse(error.message))
|
|
LoggerInstance.error('[Provider Check] Error:', message)
|
|
toast.error(message)
|
|
}
|
|
}
|