import axios, { AxiosInstance } from 'axios'; import Vue from 'vue'; class OVDashboardPlugin { private axios: AxiosInstance; public constructor() { // Full config: https://github.com/axios/axios#request-config // axios.defaults.baseURL = process.env.baseURL || process.env.apiUrl || ''; // axios.defaults.headers.common['Authorization'] = AUTH_TOKEN; // axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded'; const config = { // baseURL: process.env.baseURL || process.env.apiUrl || "" // timeout: 60 * 1000, // Timeout // withCredentials: true, // Check cross-site Access-Control }; this.axios = axios.create(config); } public install(vue: typeof Vue) { vue.prototype.$axios = this.axios; vue.prototype.$ovdashboard = this; } private get api_baseurl(): string { if (process.env.NODE_ENV === "production") { return "//" + window.location.host + "/api/v1"; } else { if (process.env.NODE_ENV !== "development") { console.warn("Unexpected NODE_ENV value"); } return "//" + window.location.hostname + ":8000/api/v1"; } } public api_url(endpoint?: string): string { if (endpoint === undefined) return this.api_baseurl; else return this.api_baseurl + "/" + endpoint; } public fail(name: string): (reason: unknown) => void { return (reason: unknown) => console.warn("Failed to query", name, "-", reason); } public api_query_simple( endpoint: string, on_success: (data: unknown) => void ): void { this.axios .get(this.api_url(endpoint)) .then((response) => on_success(response.data)) .catch(this.fail(endpoint)); } public api_query_simple_string( endpoint: string, on_success: (data: string) => void ): void { this.api_query_simple(endpoint, (data) => { if (typeof data !== "string") return; on_success(data); }); } public api_query_simple_list( endpoint: string, on_success: (data: string[]) => void ): void { this.api_query_simple(endpoint, (data) => { if (!Array.isArray(data)) return; if (!data.every((value) => typeof value === "string")) return; on_success(data); }); } public api_query_simple_object( endpoint: string, on_success: (data: Record) => void ): void { this.api_query_simple(endpoint, (data) => { if (typeof data !== "object") return; if (data === null) return; on_success(data as Record); }); } } export default new OVDashboardPlugin();