@rezakalfane/dc-cli
Version:
Dynamic Content CLI Tool
119 lines (118 loc) • 5.51 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const node_fetch_1 = __importDefault(require("node-fetch"));
class FetchUtilities {
constructor() {
this.authUrl = process.env.AUTH_URL || "https://auth.adis.ws";
this.apiUrl = process.env.API_URL || "https://api.amplience.net/v2/content";
this.PAGE_SIZE = 20;
}
async init(argv) {
this.accessToken = await this.getAccessToken(argv.clientId, argv.clientSecret);
}
async getAccessToken(clientId, clientSecret) {
const authUrlFinal = `${this.authUrl}/oauth/token?client_id=${clientId}&client_secret=${clientSecret}&grant_type=client_credentials`;
const response = await node_fetch_1.default(authUrlFinal, { method: 'POST', headers: { "Content-Type": "application/x-www-form-urlencoded" } });
const authorization = await response.json();
return authorization.access_token;
}
async fetchResource(endpointUri) {
let resource = {};
if (this.accessToken) {
const response = await node_fetch_1.default(`${this.apiUrl}${endpointUri}`, { method: 'GET', headers: { "Authorization": "Bearer " + this.accessToken } });
if (response.ok) {
resource = await response.json();
}
delete resource._links;
}
return resource;
}
async fetchPaginatedResourcesList(endpointUri, resourceName) {
let resourcesList = [];
if (this.accessToken) {
const response = await node_fetch_1.default(`${this.apiUrl}${endpointUri}?size=${this.PAGE_SIZE}`, { method: 'GET', headers: { "Authorization": "Bearer " + this.accessToken } });
const resources = await response.json();
if (resources._embedded && resources._embedded[resourceName]) {
const resourceFinal = resources._embedded[resourceName];
resourceFinal.forEach((entry) => delete entry._links);
resourcesList = resourceFinal;
}
if (resources.page) {
let totalPages = resources.page.totalPages;
let pageNumber = 0;
while (pageNumber < totalPages - 1) {
pageNumber++;
const resourcesUrl = `${this.apiUrl}${endpointUri}?size=${this.PAGE_SIZE}&page=${pageNumber}`;
const response = await node_fetch_1.default(resourcesUrl, { method: 'GET',
headers: { "Authorization": "Bearer " + this.accessToken } });
const resources = await response.json();
if (resources._embedded && resources._embedded[resourceName]) {
const resourceFinal = resources._embedded[resourceName];
resourceFinal.forEach((entry) => delete entry._links);
resourcesList = [...resourcesList, ...resourceFinal];
}
}
}
}
return resourcesList;
}
async fetchPaginatedResourcesListWithDetails(endpointUri, resourceName) {
let resourcesList = await this.fetchPaginatedResourcesList(endpointUri, resourceName);
let resourcesListDetails = await Promise.all(resourcesList.map((item) => node_fetch_1.default(`${this.apiUrl}${endpointUri}/${item.id}`, { method: 'GET', headers: { "Authorization": "Bearer " + this.accessToken } })
.then(r => r.json())
.catch(error => ({ error }))));
resourcesListDetails.forEach(entry => delete entry._links);
return resourcesListDetails;
}
async deleteResource(endpointUri, resourceId) {
let finalResourceId = "";
if (this.accessToken) {
const response = await node_fetch_1.default(`${this.apiUrl}${endpointUri}`, { method: 'DELETE',
headers: { "Authorization": "Bearer " + this.accessToken } });
if (response.ok) {
finalResourceId = resourceId;
}
}
return resourceId;
}
async createResource(endpointUri, data) {
let resource = {};
let resourceId = "";
if (this.accessToken) {
const response = await node_fetch_1.default(`${this.apiUrl}${endpointUri}`, {
method: 'POST',
headers: {
"Authorization": "Bearer " + this.accessToken,
"Content-Type": "application/json"
},
body: JSON.stringify(data)
});
if (response.ok) {
resource = await response.json();
resourceId = resource.id;
}
}
return resourceId;
}
async updateResource(endpointUri, resourceId, data) {
let updatedResourceId = "";
if (this.accessToken) {
const response = await node_fetch_1.default(`${this.apiUrl}${endpointUri}`, {
method: 'PATCH',
headers: {
"Authorization": "Bearer " + this.accessToken,
"Content-Type": "application/json"
},
body: JSON.stringify(data)
});
if (response.ok) {
updatedResourceId = resourceId;
}
}
return resourceId;
}
}
exports.FetchUtilities = FetchUtilities;