Compare commits

...

4 Commits

Author SHA1 Message Date
e81fdc24bb fix is logged in check 2025-05-10 09:33:43 +02:00
778de8ca14 update an fix login 2025-05-10 09:30:16 +02:00
00c37c0a37 update an cleanup 2025-03-08 14:38:05 +01:00
a56580ce27 refresh acquisitions 2024-06-18 12:02:56 +02:00
8 changed files with 1163 additions and 1156 deletions

2278
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -16,6 +16,7 @@
"@vueuse/integrations": "^10.2.1", "@vueuse/integrations": "^10.2.1",
"axios": "^1.4.0", "axios": "^1.4.0",
"axios-rate-limit": "^1.3.1", "axios-rate-limit": "^1.3.1",
"gemory": "file:",
"loglevel": "^1.8.1", "loglevel": "^1.8.1",
"loglevel-plugin-prefix": "^0.8.4", "loglevel-plugin-prefix": "^0.8.4",
"oidc-client-ts": "^3.0.1", "oidc-client-ts": "^3.0.1",
@@ -30,9 +31,9 @@
"postcss": "^8.4.27", "postcss": "^8.4.27",
"tailwindcss": "^3.3.3", "tailwindcss": "^3.3.3",
"typescript": "^5.0.2", "typescript": "^5.0.2",
"vite": "^5.2.11", "vite": "^6.3.5",
"vite-plugin-runtime-env": "^0.1.1", "vite-plugin-runtime-env": "^0.1.1",
"vitest": "^1.6.0", "vitest": "^3.1.3",
"vue-tsc": "^2.0.18" "vue-tsc": "^2.0.18"
} }
} }

View File

@@ -17,7 +17,7 @@ export const useAuthStore = defineStore('auth', () => {
}); });
const user = ref<User>(); const user = ref<User>();
const isLoggedIn = computed(() => !!user.value); const isLoggedIn = computed(() => user.value?.expired === false);
const accessToken = computed(() => user.value?.access_token); const accessToken = computed(() => user.value?.access_token);
const username = computed(() => user.value?.profile.name ?? ""); const username = computed(() => user.value?.profile.name ?? "");
const userId = computed(() => user.value?.profile.sub ?? ""); const userId = computed(() => user.value?.profile.sub ?? "");

View File

@@ -10,11 +10,11 @@ export const marbasAxiosInstance = axios.create({
}, },
}) })
marbasAxiosInstance.interceptors.request.use(r => { const authStore = useAuthStore();
const authStore = useAuthStore();
marbasAxiosInstance.interceptors.request.use(async r => {
if (!authStore.isLoggedIn) { if (!authStore.isLoggedIn) {
throw new Error("Not logged in"); await authStore.redirect();
} }
const accessToken = authStore.accessToken; const accessToken = authStore.accessToken;
@@ -29,6 +29,12 @@ marbasAxiosInstance.interceptors.request.use(r => {
}) })
logResource(marbasAxiosInstance) logResource(marbasAxiosInstance)
marbasAxiosInstance.interceptors.response.use(async r => { marbasAxiosInstance.interceptors.response.use(async r => {
if (r.status === 401) {
await authStore.redirect();
return marbasAxiosInstance.request(r.config);
}
let next: string = r.data?.next; let next: string = r.data?.next;
let results = r.data?.results; let results = r.data?.results;

View File

@@ -19,7 +19,7 @@ type RawMarbasAcquiredType = Omit<MarbasAcquiredType, 'date'> & {
date: string; date: string;
} }
type InsertableRawMarbasAcquiredType = Omit<MarbasAcquiredType, 'id' | 'date'>; type InsertableRawMarbasAcquiredType = Omit<MarbasAcquiredType, 'id' | 'date'>;
const mapRawMarbasAcquiredType = (raw: RawMarbasAcquiredType): MarbasAcquiredType => ({ const mapRawMarbasAcquiredType = (raw: RawMarbasAcquiredType): MarbasAcquiredType => ({
...raw, ...raw,
@@ -67,7 +67,9 @@ export const useAcquiredTypesStore = defineStore('market-acquisition', () => {
log.info(`Acquired type ${item.id} remaining: ${item.remaining}`, item); log.info(`Acquired type ${item.id} remaining: ${item.remaining}`, item);
}; };
marbasAxiosInstance.get<RawMarbasAcquiredType[]>(endpoint).then(res => acquiredTypes.value = res.data.map(mapRawMarbasAcquiredType)); const refresh = () => marbasAxiosInstance.get<RawMarbasAcquiredType[]>(endpoint).then(res => acquiredTypes.value = res.data.map(mapRawMarbasAcquiredType));
return { acquiredTypes: types, addAcquiredType, removeAcquiredType }; refresh();
return { acquiredTypes: types, addAcquiredType, removeAcquiredType, refresh };
}); });

View File

@@ -23,8 +23,8 @@ const historyCache: RegionalMarketCache<EsiMarketOrderHistory[]> = new RegionalM
return date; return date;
}); });
export const getHistory = async (tyeId: number, regionId?: number): Promise<EsiMarketOrderHistory[]> => { export const getHistory = async (typeId: number, regionId?: number): Promise<EsiMarketOrderHistory[]> => {
const rId = regionId ?? jitaId; const rId = regionId ?? jitaId;
return historyCache.computeIfAbsent(rId, tyeId, async () => (await esiAxiosInstance.get(`/markets/${rId}/history/`, { params: { type_id: tyeId } })).data); return historyCache.computeIfAbsent(rId, typeId, async () => (await esiAxiosInstance.get(`/markets/${rId}/history/`, { params: { type_id: typeId } })).data);
} }

View File

@@ -1,3 +1 @@
export const jitaId = 10000002; export const jitaId = 10000002;

View File

@@ -6,11 +6,12 @@ import { ref, watch } from 'vue';
const buyModal = ref<typeof BuyModal>(); const buyModal = ref<typeof BuyModal>();
const sellModal = ref<typeof SellModal>(); const sellModal = ref<typeof SellModal>();
const apraisalStore = useApraisalStore(); const apraisalStore = useApraisalStore();
const acquiredTypesStore = useAcquiredTypesStore(); const acquiredTypesStore = useAcquiredTypesStore();
const items = ref<AcquiredType[]>([]); const items = ref<AcquiredType[]>([]);
const refresh = async () => await acquiredTypesStore.refresh();
watch(() => acquiredTypesStore.acquiredTypes, async itms => { watch(() => acquiredTypesStore.acquiredTypes, async itms => {
if (itms.length === 0) { if (itms.length === 0) {
return; return;
@@ -34,6 +35,9 @@ watch(() => acquiredTypesStore.acquiredTypes, async itms => {
<template> <template>
<div class="mt-4"> <div class="mt-4">
<div class="flex">
<button class="ms-auto" @click="refresh">Refresh</button>
</div>
<template v-if="items.length > 0"> <template v-if="items.length > 0">
<AcquisitionResultTable :items="items" @buy="(types, price, buy, sell) => buyModal?.open(types[0].type, { 'Price': price, 'Buy': buy, 'Sell': sell })" @sell="types => sellModal?.open(types)" ignoredColums="date" /> <AcquisitionResultTable :items="items" @buy="(types, price, buy, sell) => buyModal?.open(types[0].type, { 'Price': price, 'Buy': buy, 'Sell': sell })" @sell="types => sellModal?.open(types)" ignoredColums="date" />
<BuyModal ref="buyModal" /> <BuyModal ref="buyModal" />