UNPKG

@amplience/dc-cli

Version:
69 lines (68 loc) 2.7 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.DefaultApiClient = void 0; const HttpError_1 = require("../../http/HttpError"); const HttpRequest_1 = require("../../http/HttpRequest"); const URL_1 = require("../../utils/URL"); const ApiEndpoints_1 = require("./ApiEndpoints"); const CURIEs_1 = require("./CURIEs"); class DefaultApiClient { constructor(baseUrl, httpClient, tokenProvider) { this.baseUrl = baseUrl; this.httpClient = httpClient; this.tokenProvider = tokenProvider; this.endpoints = new ApiEndpoints_1.ApiEndpoints(this); } async fetchRawResource(path, params) { path = CURIEs_1.CURIEs.expand(path, params.query); path = path.replace(/%20/g, '+'); const response = await this.invoke({ method: HttpRequest_1.HttpMethod.GET, url: path }); return response.data; } async fetchResource(path, params, resourceConstructor) { const data = await this.fetchRawResource(path, params); return this.parse(data, resourceConstructor); } parse(data, resourceConstructor) { const instance = new resourceConstructor(data); instance.setClient(this); return instance; } transformDamResponse(data) { if (data.status !== 'success') { throw new Error(`Request failed with status ${data.status}: ${JSON.stringify(data.content)}`); } return data.content; } async invoke(request) { const token = await this.tokenProvider.getToken(); const fullRequest = { data: request.data, headers: { 'X-Amp-Auth': token.access_token, ...request.headers }, method: request.method, url: (0, URL_1.combineURLs)(this.baseUrl, request.url) }; return this.httpClient.request(fullRequest).then(response => { if (response.status >= 200 && response.status < 300) { if (typeof response.data === 'string') { response.data = JSON.parse(response.data); } response.data = this.transformDamResponse(response.data); return response; } else { const message = response.status ? `Request failed with status code ${response.status}: ${JSON.stringify(response.data)}` : `Error: No response from server - check your network connection.`; throw new HttpError_1.HttpError(message, fullRequest, response); } }); } } exports.DefaultApiClient = DefaultApiClient;