import axios from "axios" import { formatDate } from "utils" const baseURL = subdomain => { if (process.env.NODE_ENV === "production") { return `https://${encodeURIComponent( subdomain )}.mocoapp.com/api/browser_extensions` } else { return `http://${encodeURIComponent( subdomain )}.mocoapp.localhost:3001/api/browser_extensions` } } export default class Client { #client; #apiKey; constructor({ subdomain, apiKey, version }) { this.#apiKey = apiKey this.#client = axios.create({ responseType: "json", baseURL: baseURL(subdomain), headers: { common: { "x-api-key": apiKey, "x-extension-version": version } } }) } login = service => this.#client.post("session", { api_key: this.#apiKey, remote_service: service?.name, remote_id: service?.id }); projects = () => this.#client.get("projects"); schedules = (fromDate, toDate) => this.#client.get("schedules", { params: { date: `${formatDate(fromDate)}:${formatDate(toDate)}` } }); activities = (fromDate, toDate) => this.#client.get("activities", { params: { date: `${formatDate(fromDate)}:${formatDate(toDate)}` } }); bookedHours = service => { if (!service) { return Promise.resolve({ data: { hours: 0 } }) } return this.#client.get("activities/tags", { params: { selection: [service.id], remote_service: service.name } }) }; createActivity = activity => this.#client.post("activities", { activity }); }