1
0
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:
ssallam 2018-12-08 00:46:18 +01:00
parent 30fa16d1d5
commit 1756903005
5 changed files with 43 additions and 9 deletions

5
package-lock.json generated
View File

@ -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",

View File

@ -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",

View File

@ -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) {

View File

@ -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")

View File

@ -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 {