Source: logs.js

const Utils = require('@openeo/js-commons/src/utils');

/**
 * Interface to loop through the logs
 * 
 * @class
 */
class Logs {

	constructor(connection, endpoint) {
		this.connection = connection;
		this.endpoint = endpoint;
		this.lastId = "";
	}

	/**
	 * Retrieves the next log entries since the last request.
	 * 
	 * Retrieves log entries only.
	 * 
	 * @async
	 * @param {integer} limit - The number of log entries to retrieve per request.
	 * @returns {object[]}
	 */
	async nextLogs(limit = null) {
		let response = await this.next(limit);
		return Array.isArray(response.logs) ? response.logs : [];
	}

	/**
	 * Retrieves the next log entries since the last request.
	 * 
	 * Retrieves the full response compliant to the API, including log entries and links.
	 * 
	 * @async
	 * @param {integer} limit - The number of log entries to retrieve per request.
	 * @returns {object}
	 */
	async next(limit = null) {
		let query = {
			offset: this.lastId
		};
		if (limit > 0) {
			query.limit = limit;
		}
		let response = await this.connection._get(this.endpoint, query);
		if (Array.isArray(response.data.logs) && response.data.logs.length > 0) {
			response.data.logs = response.data.logs.filter(log => Utils.isObject(log) && typeof log.id === 'string');
			this.lastId = response.data.logs[response.data.logs.length - 1].id;
		}
		else {
			response.data.logs = [];
		}
		response.data.links = Array.isArray(response.data.links) ? response.data.links : [];
		return response.data;
	}

}

module.exports = Logs;