Compare commits

..

8 Commits

3 changed files with 63 additions and 1 deletions

View File

@ -1,6 +1,6 @@
{ {
"license": "MIT", "license": "MIT",
"version": "1.0.0", "version": "1.1.0",
"name": "@flaschengeist/api", "name": "@flaschengeist/api",
"author": "Tim Gröger <flaschengeist@wu5.de>", "author": "Tim Gröger <flaschengeist@wu5.de>",
"homepage": "https://flaschengeist.dev/Flaschengeist", "homepage": "https://flaschengeist.dev/Flaschengeist",

61
api/src/stores/apiKeys.ts Normal file
View File

@ -0,0 +1,61 @@
import { defineStore } from 'pinia';
import { api } from '../internal';
import { isAxiosError, useMainStore } from '.';
export const useApiKeyStore = defineStore({
id: 'apiKeys',
state: () => ({
apiKeys: [] as FG.ApiKey[],
}),
getters: {},
actions: {
async getApiKeys(): Promise<FG.ApiKey[]> {
try {
const mainStore = useMainStore();
const { data } = await api.get<FG.ApiKey[]>(
`/users/${mainStore.currentUser.userid}/api_keys`
);
this.apiKeys = data;
return data;
} catch (error) {
return [] as FG.ApiKey[];
}
},
async deleteApiKey(id: number): Promise<boolean> {
const mainStore = useMainStore();
try {
await api.delete(`/users/${mainStore.currentUser.userid}/api_keys/${id}`);
this.apiKeys = this.apiKeys.filter((apiKey: FG.ApiKey) => apiKey.id !== id);
return true;
} catch (error) {
// Ignore 401, as this means we are already logged out, throw all other
if (!isAxiosError(error, 401)) throw error;
}
return false;
},
async createApiKey(apiKey: FG.ApiKey): Promise<FG.ApiKey> {
const mainStore = useMainStore();
try {
const { data } = await api.post<FG.ApiKey>(
`/users/${mainStore.currentUser.userid}/api_keys`,
apiKey
);
this.apiKeys.push(data);
return data;
} catch (error) {
throw error;
}
},
},
});

View File

@ -21,3 +21,4 @@ export function isAxiosError(error: unknown, status?: number) {
export * from './main'; export * from './main';
export * from './session'; export * from './session';
export * from './user'; export * from './user';
export * from './apiKeys';