1
0
mirror of https://github.com/oceanprotocol-archive/squid-js.git synced 2024-02-02 15:31:51 +01:00

Move WebServiceConnector to utils and make it instantiable.

This commit is contained in:
Pedro Gutiérrez 2019-05-08 14:14:19 +02:00 committed by Pedro Gutiérrez
parent f8606bb9aa
commit d779adc0a3
6 changed files with 25 additions and 38 deletions

View File

@ -1,7 +1,6 @@
import { URL } from "whatwg-url" import { URL } from "whatwg-url"
import { DDO } from "../ddo/DDO" import { DDO } from "../ddo/DDO"
import DID from "../ocean/DID" import DID from "../ocean/DID"
import WebServiceConnectorProvider from "../utils/WebServiceConnectorProvider"
import { Instantiable, InstantiableConfig } from "../Instantiable.abstract" import { Instantiable, InstantiableConfig } from "../Instantiable.abstract"
const apiPath = "/api/v1/aquarius/assets/ddo" const apiPath = "/api/v1/aquarius/assets/ddo"
@ -36,7 +35,7 @@ export class Aquarius extends Instantiable {
} }
public async getAccessUrl(accessToken: any, payload: any): Promise<string> { public async getAccessUrl(accessToken: any, payload: any): Promise<string> {
const accessUrl: string = await WebServiceConnectorProvider.getConnector() const accessUrl: string = await this.ocean.utils.fetch
.post(`${accessToken.service_endpoint}/${accessToken.resource_id}`, payload) .post(`${accessToken.service_endpoint}/${accessToken.resource_id}`, payload)
.then((response: any): string => { .then((response: any): string => {
if (response.ok) { if (response.ok) {
@ -63,7 +62,7 @@ export class Aquarius extends Instantiable {
* @return {Promise<QueryResult>} * @return {Promise<QueryResult>}
*/ */
public async queryMetadata(query: SearchQuery): Promise<QueryResult> { public async queryMetadata(query: SearchQuery): Promise<QueryResult> {
const result: QueryResult = await WebServiceConnectorProvider.getConnector() const result: QueryResult = await this.ocean.utils.fetch
.post(`${this.url}${apiPath}/query`, JSON.stringify(query)) .post(`${this.url}${apiPath}/query`, JSON.stringify(query))
.then((response: any) => { .then((response: any) => {
if (response.ok) { if (response.ok) {
@ -94,7 +93,7 @@ export class Aquarius extends Instantiable {
fullUrl.searchParams.append("sort", decodeURIComponent(JSON.stringify(query.sort))) fullUrl.searchParams.append("sort", decodeURIComponent(JSON.stringify(query.sort)))
fullUrl.searchParams.append("offset", query.offset.toString()) fullUrl.searchParams.append("offset", query.offset.toString())
fullUrl.searchParams.append("page", query.page.toString()) fullUrl.searchParams.append("page", query.page.toString())
const result: QueryResult = await WebServiceConnectorProvider.getConnector() const result: QueryResult = await this.ocean.utils.fetch
.get(fullUrl) .get(fullUrl)
.then((response: any) => { .then((response: any) => {
if (response.ok) { if (response.ok) {
@ -121,7 +120,7 @@ export class Aquarius extends Instantiable {
*/ */
public async storeDDO(ddo: DDO): Promise<DDO> { public async storeDDO(ddo: DDO): Promise<DDO> {
const fullUrl = `${this.url}${apiPath}` const fullUrl = `${this.url}${apiPath}`
const result: DDO = await WebServiceConnectorProvider.getConnector() const result: DDO = await this.ocean.utils.fetch
.post(fullUrl, DDO.serialize(ddo)) .post(fullUrl, DDO.serialize(ddo))
.then((response: any) => { .then((response: any) => {
if (response.ok) { if (response.ok) {
@ -148,7 +147,7 @@ export class Aquarius extends Instantiable {
*/ */
public async retrieveDDO(did: DID): Promise<DDO> { public async retrieveDDO(did: DID): Promise<DDO> {
const fullUrl = `${this.url}${apiPath}/${did.getDid()}` const fullUrl = `${this.url}${apiPath}/${did.getDid()}`
const result = await WebServiceConnectorProvider.getConnector() const result = await this.ocean.utils.fetch
.get(fullUrl) .get(fullUrl)
.then((response: any) => { .then((response: any) => {
if (response.ok) { if (response.ok) {

View File

@ -4,7 +4,6 @@ import save = require("save-file")
import { File } from "../ddo/MetaData" import { File } from "../ddo/MetaData"
import Account from "../ocean/Account" import Account from "../ocean/Account"
import { noZeroX } from "../utils" import { noZeroX } from "../utils"
import WebServiceConnectorProvider from "../utils/WebServiceConnectorProvider"
import { Instantiable, InstantiableConfig } from "../Instantiable.abstract" import { Instantiable, InstantiableConfig } from "../Instantiable.abstract"
const apiPath = "/api/v1/brizo/services" const apiPath = "/api/v1/brizo/services"
@ -57,8 +56,7 @@ export class Brizo extends Instantiable {
} }
try { try {
return await WebServiceConnectorProvider return await this.ocean.utils.fetch
.getConnector()
.post( .post(
this.getPurchaseEndpoint(), this.getPurchaseEndpoint(),
decodeURI(JSON.stringify(args)), decodeURI(JSON.stringify(args)),
@ -117,8 +115,7 @@ export class Brizo extends Instantiable {
} }
try { try {
const response = await WebServiceConnectorProvider const response = await this.ocean.utils.fetch
.getConnector()
.post( .post(
this.getEncryptEndpoint(), this.getEncryptEndpoint(),
decodeURI(JSON.stringify(args)), decodeURI(JSON.stringify(args)),
@ -134,8 +131,7 @@ export class Brizo extends Instantiable {
} }
private async downloadFile(url: string, destination?: string): Promise<string> { private async downloadFile(url: string, destination?: string): Promise<string> {
const response = await WebServiceConnectorProvider const response = await this.ocean.utils.fetch
.getConnector()
.get(url) .get(url)
if (!response.ok) { if (!response.ok) {
throw new Error("Response error.") throw new Error("Response error.")

View File

@ -2,6 +2,7 @@ import { Instantiable, InstantiableConfig } from "../../Instantiable.abstract"
import { ServiceAgreement } from "./ServiceAgreement" import { ServiceAgreement } from "./ServiceAgreement"
import { SignatureUtils } from "./SignatureUtils" import { SignatureUtils } from "./SignatureUtils"
import { WebServiceConnector } from "./WebServiceConnector"
/** /**
* Utils internal submodule of Ocean Protocol. * Utils internal submodule of Ocean Protocol.
@ -18,6 +19,7 @@ export class OceanUtils extends Instantiable {
instance.agreements = new ServiceAgreement(config) instance.agreements = new ServiceAgreement(config)
instance.signature = new SignatureUtils(config) instance.signature = new SignatureUtils(config)
instance.fetch = new WebServiceConnector(config)
return instance return instance
} }
@ -33,4 +35,10 @@ export class OceanUtils extends Instantiable {
* @type {SignatureUtils} * @type {SignatureUtils}
*/ */
public signature: SignatureUtils public signature: SignatureUtils
/**
* Fetch utils.
* @type {WebServiceConnector}
*/
public fetch: WebServiceConnector
} }

View File

@ -1,10 +1,15 @@
import fetch, { BodyInit, RequestInit, Response } from "node-fetch" import fetch, { BodyInit, RequestInit, Response } from "node-fetch"
import LoggerInstance from "./Logger" import { Instantiable, InstantiableConfig } from "../../Instantiable.abstract"
/** /**
* Provides a common interface to web services. * Provides a common interface to web services.
*/ */
export default class WebServiceConnector { export class WebServiceConnector extends Instantiable {
constructor(config: InstantiableConfig) {
super()
this.setInstanceConfig(config)
}
public post(url: string, payload: BodyInit): Promise<Response> { public post(url: string, payload: BodyInit): Promise<Response> {
return this.fetch(url, { return this.fetch(url, {
@ -38,8 +43,8 @@ export default class WebServiceConnector {
private async fetch(url: string, opts: RequestInit): Promise<Response> { private async fetch(url: string, opts: RequestInit): Promise<Response> {
const result = await fetch(url, opts) const result = await fetch(url, opts)
if (!result.ok) { if (!result.ok) {
LoggerInstance.error(`Error requesting [${opts.method}] ${url}`) this.logger.error(`Error requesting [${opts.method}] ${url}`)
LoggerInstance.error(`Response message: \n${await result.text()}`) this.logger.error(`Response message: \n${await result.text()}`)
throw result throw result
} }
return result return result

View File

@ -3,7 +3,6 @@ import Account from "./ocean/Account"
import DID from "./ocean/DID" import DID from "./ocean/DID"
import { Ocean } from "./ocean/Ocean" import { Ocean } from "./ocean/Ocean"
import { LoggerInstance as Logger} from "./utils/Logger" import { LoggerInstance as Logger} from "./utils/Logger"
import WebServiceConnectorProvider from "./utils/WebServiceConnectorProvider"
import Keeper from "./keeper/Keeper" import Keeper from "./keeper/Keeper"
import * as templates from "./keeper/contracts/templates" import * as templates from "./keeper/contracts/templates"
@ -25,7 +24,6 @@ export {
DID, DID,
Logger, Logger,
Keeper, Keeper,
WebServiceConnectorProvider,
conditions, conditions,
templates, templates,

View File

@ -1,19 +0,0 @@
import WebServiceConnector from "./WebServiceConnector"
export default class WebServiceConnectorProvider {
public static setConnector(connector: WebServiceConnector) {
WebServiceConnectorProvider.instance = connector
}
public static getConnector(): WebServiceConnector {
if (!WebServiceConnectorProvider.instance) {
WebServiceConnectorProvider.instance = new WebServiceConnector()
}
return WebServiceConnectorProvider.instance
}
private static instance: WebServiceConnector = null
}