Appearance improvements, update of endpoints, and implementation of .well-known for checking API URL #3

Merged
sauceyred merged 7 commits from dev into main 2025-05-30 23:21:01 +00:00
2 changed files with 29 additions and 13 deletions
Showing only changes of commit bc8e84b75d - Show all commits

View file

@ -48,24 +48,30 @@
<script lang="ts" setup> <script lang="ts" setup>
import { FetchError } from 'ofetch'; import { FetchError } from 'ofetch';
const redirectTo = useRoute().query.redirect_to;
const apiVersion = useRuntimeConfig().public.apiVersion; const apiVersion = useRuntimeConfig().public.apiVersion;
const instanceUrl = ref<string | null | undefined>(null); const instanceUrl = ref<string | null | undefined>(null);
const instanceUrlInput = ref<string>(); const instanceUrlInput = ref<string>();
const instanceError = ref<string>(); const instanceError = ref<string>();
const requestUrl = useRequestURL();
const apiBase = useCookie("api_base");
const auth = useAuth(); const auth = useAuth();
if (auth.accessToken.value) { const { status, data: gorbTxt } = await useFetch(`${requestUrl.protocol}//${requestUrl.host}/.well-known/gorb.txt`, { responseType: "text" });
//navigateTo(redirectTo ? redirectTo as string : useAppConfig().baseURL as string); if (status.value == "success" && gorbTxt.value) {
console.log("got gorb.txt:", gorbTxt.value);
const parsed = parseWellKnown(gorbTxt.value as string);
if (parsed.ApiBaseUrl) {
apiBase.value = parsed.ApiBaseUrl;
console.log("set apiBase to:", parsed.ApiBaseUrl);
}
} }
onMounted(() => { onMounted(async () => {
const cookie = useCookie("instance_url").value; const cookie = useCookie("instance_url").value;
instanceUrl.value = cookie; instanceUrl.value = cookie;
console.log(cookie); console.log(cookie);
console.log("set instance url to:", instanceUrl.value); console.log("set instance url to:", instanceUrl.value);
}); });
async function selectInstance(e: Event) { async function selectInstance(e: Event) {
@ -74,14 +80,13 @@ async function selectInstance(e: Event) {
const instanceUrlObj = new URL(`api/v${apiVersion}/stats`, instanceUrlInput.value.endsWith("/") ? instanceUrlInput.value : instanceUrlInput.value + "/"); const instanceUrlObj = new URL(`api/v${apiVersion}/stats`, instanceUrlInput.value.endsWith("/") ? instanceUrlInput.value : instanceUrlInput.value + "/");
try { try {
const res = await $fetch.raw(instanceUrlObj.href); const res = await $fetch.raw(instanceUrlObj.href);
console.log("instance res:", res);
instanceError.value = ""; instanceError.value = "";
const origin = new URL(res.url).origin; const origin = new URL(res.url).origin;
localStorage.setItem("instanceUrl", origin);
instanceUrl.value = origin; instanceUrl.value = origin;
useCookie("instance_url").value = origin; useCookie("instance_url").value = origin;
useCookie("api_base").value = origin + `/api/v${apiVersion}`;
localStorage.setItem("apiBase", origin + `/api/v${apiVersion}`); if (!apiBase.value) apiBase.value = origin + `/api/v${apiVersion}`;
} catch (error: any) { } catch (error: any) {
if (error instanceof FetchError) { if (error instanceof FetchError) {
console.log("Status code:", error.response?.status); console.log("Status code:", error.response?.status);

11
utils/parseWellKnown.ts Normal file
View file

@ -0,0 +1,11 @@
export default (wellKnownText: string): Record<string, string> => {
const lines = wellKnownText.trim().replaceAll(" ", "").split("\n");
const settings: Record<string, string> = {};
for (const line of lines) {
const separatorIndex = line.search(":");
const key = line.slice(0, separatorIndex);
const value = line.slice(separatorIndex + 1, line.length);
settings[key] = value;
}
return settings;
}