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",
"axios": "^1.4.0",
"axios-rate-limit": "^1.3.1",
"gemory": "file:",
"loglevel": "^1.8.1",
"loglevel-plugin-prefix": "^0.8.4",
"oidc-client-ts": "^3.0.1",
@@ -30,9 +31,9 @@
"postcss": "^8.4.27",
"tailwindcss": "^3.3.3",
"typescript": "^5.0.2",
"vite": "^5.2.11",
"vite": "^6.3.5",
"vite-plugin-runtime-env": "^0.1.1",
"vitest": "^1.6.0",
"vitest": "^3.1.3",
"vue-tsc": "^2.0.18"
}
}

View File

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

View File

@@ -10,13 +10,13 @@ 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) {
throw new Error("Not logged in");
await authStore.redirect();
}
const accessToken = authStore.accessToken;
if (accessToken) {
@@ -29,6 +29,12 @@ marbasAxiosInstance.interceptors.request.use(r => {
})
logResource(marbasAxiosInstance)
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 results = r.data?.results;

View File

@@ -19,7 +19,7 @@ type RawMarbasAcquiredType = Omit<MarbasAcquiredType, 'date'> & {
date: string;
}
type InsertableRawMarbasAcquiredType = Omit<MarbasAcquiredType, 'id' | 'date'>;
type InsertableRawMarbasAcquiredType = Omit<MarbasAcquiredType, 'id' | 'date'>;
const mapRawMarbasAcquiredType = (raw: RawMarbasAcquiredType): MarbasAcquiredType => ({
...raw,
@@ -67,7 +67,9 @@ export const useAcquiredTypesStore = defineStore('market-acquisition', () => {
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;
});
export const getHistory = async (tyeId: number, regionId?: number): Promise<EsiMarketOrderHistory[]> => {
export const getHistory = async (typeId: number, regionId?: number): Promise<EsiMarketOrderHistory[]> => {
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;

View File

@@ -6,11 +6,12 @@ import { ref, watch } from 'vue';
const buyModal = ref<typeof BuyModal>();
const sellModal = ref<typeof SellModal>();
const apraisalStore = useApraisalStore();
const acquiredTypesStore = useAcquiredTypesStore();
const items = ref<AcquiredType[]>([]);
const refresh = async () => await acquiredTypesStore.refresh();
watch(() => acquiredTypesStore.acquiredTypes, async itms => {
if (itms.length === 0) {
return;
@@ -34,6 +35,9 @@ watch(() => acquiredTypesStore.acquiredTypes, async itms => {
<template>
<div class="mt-4">
<div class="flex">
<button class="ms-auto" @click="refresh">Refresh</button>
</div>
<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" />
<BuyModal ref="buyModal" />