mirror of
https://github.com/oceanprotocol-archive/squid-js.git
synced 2024-02-02 15:31:51 +01:00
Handle the access granted event. Invoke the consume endpoint. Fix issue in the generated serviceEndpoint.
This commit is contained in:
parent
30fa16d1d5
commit
1756903005
5
package-lock.json
generated
5
package-lock.json
generated
@ -2350,6 +2350,11 @@
|
||||
"integrity": "sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w==",
|
||||
"dev": true
|
||||
},
|
||||
"file-saver": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/file-saver/-/file-saver-2.0.0.tgz",
|
||||
"integrity": "sha512-cYM1ic5DAkg25pHKgi5f10ziAM7RJU37gaH1XQlyNDrtUnzhC/dfoV9zf2OmF0RMKi42jG5B0JWBnPQqyj/G6g=="
|
||||
},
|
||||
"file-type": {
|
||||
"version": "5.2.0",
|
||||
"resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz",
|
||||
|
@ -57,6 +57,7 @@
|
||||
"eth-crypto": "^1.2.7",
|
||||
"eth-ecies": "^1.0.3",
|
||||
"ethereumjs-util": "^6.0.0",
|
||||
"file-saver": "^2.0.0",
|
||||
"jsonwebtoken": "^8.4.0",
|
||||
"node-fetch": "^2.3.0",
|
||||
"uuid": "^3.3.2",
|
||||
|
@ -15,8 +15,8 @@ export default class Brizo {
|
||||
return `${this.url}${apiPath}/access/purchase?`
|
||||
}
|
||||
|
||||
public getConsumeEndpoint(pubKey: string, serviceId: string, url: string) {
|
||||
return `${this.url}${apiPath}/consume?pubKey=${pubKey}&serviceId=${serviceId}&url=${url}`
|
||||
public getConsumeEndpoint() {
|
||||
return `${this.url}${apiPath}/consume`
|
||||
}
|
||||
|
||||
public getComputeEndpoint(pubKey: string, serviceId: string, algo: string, container: string) {
|
||||
|
@ -23,12 +23,11 @@ import * as config from "./config.json"
|
||||
copyrightHolder: "Met Office",
|
||||
encoding: "UTF-8",
|
||||
compression: "zip",
|
||||
contentType: "text/csv",
|
||||
contentType: "Application/pdf",
|
||||
// tslint:disable-next-line
|
||||
workExample: "stationId,latitude,longitude,datetime,temperature,humidity423432fsd,51.509865,-0.118092,2011-01-01T10:55:11+00:00,7.2,68",
|
||||
contentUrls: [
|
||||
"https://testocnfiles.blob.core.windows.net/testfiles/testzkp.zip",
|
||||
"https://testocnfiles.blob.core.windows.net/testfiles/testzkp.zip",
|
||||
"https://testocnfiles.blob.core.windows.net/testfiles/testzkp.pdf"
|
||||
],
|
||||
links: [
|
||||
{sample1: "http://data.ceda.ac.uk/badc/ukcp09/data/gridded-land-obs/gridded-land-obs-daily/"},
|
||||
@ -42,7 +41,7 @@ import * as config from "./config.json"
|
||||
} as MetaData)
|
||||
|
||||
const ddo: DDO = await ocean.registerAsset(metaData, publisher)
|
||||
Logger.log("did", ddo.id)
|
||||
Logger.log("Registered asset with did:", ddo.id)
|
||||
|
||||
const accessService = ddo.findServiceByType("Access")
|
||||
|
||||
|
@ -24,7 +24,10 @@ import ServiceAgreement from "./ServiceAgreements/ServiceAgreement"
|
||||
import ServiceAgreementTemplate from "./ServiceAgreements/ServiceAgreementTemplate"
|
||||
import Access from "./ServiceAgreements/Templates/Access"
|
||||
|
||||
import { saveAs } from "file-saver"
|
||||
|
||||
import EventListener from "../keeper/EventListener"
|
||||
import WebServiceConnectorProvider from "../utils/WebServiceConnectorProvider"
|
||||
|
||||
export default class Ocean {
|
||||
|
||||
@ -100,8 +103,7 @@ export default class Ocean {
|
||||
{
|
||||
type: template.templateName,
|
||||
purchaseEndpoint: brizo.getPurchaseEndpoint(),
|
||||
serviceEndpoint: brizo.getConsumeEndpoint(publisher.getId(),
|
||||
accessServiceDefinitionId, metadata.base.contentUrls[0]),
|
||||
serviceEndpoint: brizo.getConsumeEndpoint(),
|
||||
// the id of the service agreement?
|
||||
serviceDefinitionId: accessServiceDefinitionId,
|
||||
// the id of the service agreement template
|
||||
@ -186,7 +188,34 @@ export default class Ocean {
|
||||
metadataService.metadata.base.price,
|
||||
consumer,
|
||||
)
|
||||
Logger.log("Paid asset")
|
||||
Logger.log("Completed asset payment, now access should be granted.")
|
||||
})
|
||||
const accessEvent: ContractEvent = EventListener.subscribe(
|
||||
accessService.conditions[1].contractName,
|
||||
accessService.conditions[1].events[1].name, {})
|
||||
accessEvent.listenOnce(async (data) => {
|
||||
Logger.log("Awesome; got a AccessGranted Event. Let's download the asset files.")
|
||||
const webConnector = WebServiceConnectorProvider.getConnector()
|
||||
const contentUrls = await SecretStoreProvider.getSecretStore()
|
||||
.decryptDocument(id, metadataService.metadata.base.contentUrls[0])
|
||||
const serviceUrl: string = accessService.serviceEndpoint
|
||||
Logger.log("Consuming asset files using service url: ", serviceUrl)
|
||||
for (const cUrl of contentUrls) {
|
||||
let url: string = serviceUrl + `?url=${cUrl}`
|
||||
url = url + `&serviceAgreementId=${serviceAgreementId}`
|
||||
url = url + `&consumerAddress=${consumer.getId()}`
|
||||
Logger.log("Fetching asset from: ", url)
|
||||
const response: any = await webConnector.get(url)
|
||||
const blob: object = await response.blob()
|
||||
// Logger.log("response: ", response.headers, response)
|
||||
const parts: string[] = cUrl.split("/")
|
||||
const filename: string = parts[parts.length - 1]
|
||||
Logger.log("got blob: ", filename, blob)
|
||||
// :FIXME: this does not save the file, debug and fix
|
||||
saveAs(blob, "./downloads/" + filename)
|
||||
Logger.log("saved file to:", "./downloads/" + filename)
|
||||
}
|
||||
Logger.log("Done downloading asset files.")
|
||||
})
|
||||
|
||||
return {
|
||||
|
Loading…
Reference in New Issue
Block a user