@amplience/dc-cli
Version:
Dynamic Content CLI Tool
69 lines (68 loc) • 2.7 kB
JavaScript
;
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;