142 lines
3.6 KiB
JavaScript
142 lines
3.6 KiB
JavaScript
import { data } from 'autoprefixer';
|
|
import axios from 'axios';
|
|
import UserStore from './UserStore';
|
|
|
|
axios.interceptors.response.use(response => {
|
|
return response;
|
|
}, error => {
|
|
if (error.response.status === 401) {
|
|
UserStore.logout();
|
|
}
|
|
return error;
|
|
});
|
|
|
|
export default class Apiclient {
|
|
|
|
/**
|
|
* API-Getter for the linkylinky api stats endpoint
|
|
* @returns Current linkylinky stats (url count, total visits)
|
|
*/
|
|
static async getStats() {
|
|
return (
|
|
await axios.get('https://kauft.es/api/stats')
|
|
).data;
|
|
}
|
|
|
|
/**
|
|
* API-Getter for the linkylinky api all urls endpoint (needs auth)
|
|
* @returns All urls with shortcode, target, full url and visits in an array of objects
|
|
*/
|
|
static async getUrls() {
|
|
return (
|
|
await axios.get('https://kauft.es/api?showVisits=true', {
|
|
headers: { Authorization: `Bearer ${UserStore.state.token}` }
|
|
})
|
|
).data;
|
|
}
|
|
|
|
/**
|
|
* API-Getter for the linkylinky api url details endpoint (needs auth)
|
|
* @param {*} shortcode The shortcode of your favourite url
|
|
* @returns Url shortcode, target, full url and visit count in an object
|
|
*/
|
|
static async getUrlDetails(shortcode) {
|
|
//TODO: Handle 404
|
|
return (
|
|
await axios.get(`https://kauft.es/api/${shortcode}`, {
|
|
headers: { Authorization: `Bearer ${UserStore.state.token}` }
|
|
})
|
|
).data;
|
|
}
|
|
|
|
/**
|
|
* API-Getter for the linkylinky api url vists endpoint (needs auth)
|
|
* @param {*} shortcode The shortcode of your favourite url
|
|
* @returns Url visit details as an object for each visits (r/n they only contain timestamps)
|
|
*/
|
|
static async getUrlVisits(shortcode) {
|
|
//TODO: Handle 404
|
|
return (
|
|
await axios.get(`https://kauft.es/api/${shortcode}/visits`, {
|
|
headers: { Authorization: `Bearer ${UserStore.state.token}` }
|
|
})
|
|
).data;
|
|
}
|
|
|
|
/**
|
|
* API-Getter for the linkylinky api all vists endpoint (needs auth)
|
|
* @returns Url visit details for each visit in an array of objects.
|
|
*/
|
|
static async getVisits() {
|
|
return (
|
|
await axios.get(`https://kauft.es/api/visits`, {
|
|
headers: { Authorization: `Bearer ${UserStore.state.token}` }
|
|
})
|
|
).data;
|
|
}
|
|
|
|
/**
|
|
* Create a new shorturl via the api
|
|
* @param {*} target The target (rediction) url for the new shorturl.
|
|
* @param {*} shortcode A custom shortcode (if needed)
|
|
* @returns The response data/error
|
|
*/
|
|
static async createUrl(target, shortcode) {
|
|
const res = (
|
|
await axios.post(`https://kauft.es/api`, {
|
|
target,
|
|
shortcode
|
|
}, {
|
|
validateStatus: null
|
|
})
|
|
);
|
|
return {
|
|
status: res.status,
|
|
data: res.data
|
|
}
|
|
}
|
|
|
|
/**
|
|
* API-Delet for the linkylinky api url deletion endpoint (needs auth)
|
|
* @param {*} shortcode The shortcode of your most hated url
|
|
* @returns Just a 204 (no matter if the url got deleted or didn't exist in the first place)
|
|
*/
|
|
static async deleteUrl(shortcode) {
|
|
return (
|
|
await axios.delete(`https://kauft.es/api/${shortcode}`, {
|
|
headers: { Authorization: `Bearer ${UserStore.state.token}` }
|
|
})
|
|
).status;
|
|
}
|
|
|
|
/**
|
|
* Login and receive a JWT for future auth.
|
|
* @param {*} username Your username (cleartext)
|
|
* @param {*} password Your password (cleartext)
|
|
* @returns A user login object containing your jwt
|
|
*/
|
|
static async login(username, password) {
|
|
return (
|
|
await axios.post(`https://kauft.es/api/auth/login`, {}, {
|
|
auth: {
|
|
username, password
|
|
}
|
|
})
|
|
).data;
|
|
}
|
|
|
|
/**
|
|
* Log yourself out -> Invalidates your current (and past) JWTs
|
|
* @returns Done!
|
|
*/
|
|
static async logout() {
|
|
return (
|
|
await axios.post(`https://kauft.es/api/auth/logout`, {}, {
|
|
headers: { Authorization: `Bearer ${UserStore.state.token}`,
|
|
validateStatus: null
|
|
}
|
|
})
|
|
).data;
|
|
}
|
|
}
|