🐛 Fix request issue in garfish
This commit is contained in:
		@@ -41,6 +41,7 @@ declare const __GARFISH_EXPORTS__: {
 | 
				
			|||||||
declare global {
 | 
					declare global {
 | 
				
			||||||
  interface Window {
 | 
					  interface Window {
 | 
				
			||||||
    __GARFISH__: boolean;
 | 
					    __GARFISH__: boolean;
 | 
				
			||||||
 | 
					    __LAUNCHPAD_TARGET__?: string;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -60,6 +61,7 @@ if (!window.__GARFISH__) {
 | 
				
			|||||||
  render(router, root!);
 | 
					  render(router, root!);
 | 
				
			||||||
} else if (typeof __GARFISH_EXPORTS__ !== "undefined") {
 | 
					} else if (typeof __GARFISH_EXPORTS__ !== "undefined") {
 | 
				
			||||||
  console.log("Running in launchpad container!")
 | 
					  console.log("Running in launchpad container!")
 | 
				
			||||||
 | 
					  console.log("Launchpad target:", window.__LAUNCHPAD_TARGET__)
 | 
				
			||||||
  if (__GARFISH_EXPORTS__.registerProvider) {
 | 
					  if (__GARFISH_EXPORTS__.registerProvider) {
 | 
				
			||||||
    __GARFISH_EXPORTS__.registerProvider(provider);
 | 
					    __GARFISH_EXPORTS__.registerProvider(provider);
 | 
				
			||||||
  } else {
 | 
					  } else {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,6 +1,7 @@
 | 
				
			|||||||
import { createSignal, Show } from "solid-js";
 | 
					import { createSignal, Show } from "solid-js";
 | 
				
			||||||
import { useLocation, useSearchParams } from "@solidjs/router";
 | 
					import { useLocation, useSearchParams } from "@solidjs/router";
 | 
				
			||||||
import { getAtk, useUserinfo } from "../../stores/userinfo.tsx";
 | 
					import { getAtk, useUserinfo } from "../../stores/userinfo.tsx";
 | 
				
			||||||
 | 
					import { request } from "../../scripts/request.ts";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export default function OauthConnectPage() {
 | 
					export default function OauthConnectPage() {
 | 
				
			||||||
  const [title, setTitle] = createSignal("Connect Third-party");
 | 
					  const [title, setTitle] = createSignal("Connect Third-party");
 | 
				
			||||||
@@ -18,7 +19,7 @@ export default function OauthConnectPage() {
 | 
				
			|||||||
  const location = useLocation();
 | 
					  const location = useLocation();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  async function preConnect() {
 | 
					  async function preConnect() {
 | 
				
			||||||
    const res = await fetch(`/api/auth/o/connect${location.search}`, {
 | 
					    const res = await request(`/api/auth/o/connect${location.search}`, {
 | 
				
			||||||
      headers: { "Authorization": `Bearer ${getAtk()}` }
 | 
					      headers: { "Authorization": `Bearer ${getAtk()}` }
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -51,7 +52,7 @@ export default function OauthConnectPage() {
 | 
				
			|||||||
    setLoading(true);
 | 
					    setLoading(true);
 | 
				
			||||||
    setStatus("Approving...");
 | 
					    setStatus("Approving...");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    const res = await fetch("/api/auth/o/connect?" + new URLSearchParams({
 | 
					    const res = await request("/api/auth/o/connect?" + new URLSearchParams({
 | 
				
			||||||
      client_id: searchParams["client_id"] as string,
 | 
					      client_id: searchParams["client_id"] as string,
 | 
				
			||||||
      redirect_uri: encodeURIComponent(searchParams["redirect_uri"] as string),
 | 
					      redirect_uri: encodeURIComponent(searchParams["redirect_uri"] as string),
 | 
				
			||||||
      response_type: "code",
 | 
					      response_type: "code",
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,6 +1,7 @@
 | 
				
			|||||||
import { readProfiles } from "../../stores/userinfo.tsx";
 | 
					import { readProfiles } from "../../stores/userinfo.tsx";
 | 
				
			||||||
import { useNavigate, useSearchParams } from "@solidjs/router";
 | 
					import { useNavigate, useSearchParams } from "@solidjs/router";
 | 
				
			||||||
import { createSignal, For, Match, Show, Switch } from "solid-js";
 | 
					import { createSignal, For, Match, Show, Switch } from "solid-js";
 | 
				
			||||||
 | 
					import { request } from "../../scripts/request.ts";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export default function LoginPage() {
 | 
					export default function LoginPage() {
 | 
				
			||||||
  const [title, setTitle] = createSignal("Sign in");
 | 
					  const [title, setTitle] = createSignal("Sign in");
 | 
				
			||||||
@@ -26,7 +27,7 @@ export default function LoginPage() {
 | 
				
			|||||||
      if (!data.id) return;
 | 
					      if (!data.id) return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      setLoading(true);
 | 
					      setLoading(true);
 | 
				
			||||||
      const res = await fetch("/api/auth", {
 | 
					      const res = await request("/api/auth", {
 | 
				
			||||||
        method: "PUT",
 | 
					        method: "PUT",
 | 
				
			||||||
        headers: { "Content-Type": "application/json" },
 | 
					        headers: { "Content-Type": "application/json" },
 | 
				
			||||||
        body: JSON.stringify(data)
 | 
					        body: JSON.stringify(data)
 | 
				
			||||||
@@ -51,7 +52,7 @@ export default function LoginPage() {
 | 
				
			|||||||
      if (!data.factor) return;
 | 
					      if (!data.factor) return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      setLoading(true);
 | 
					      setLoading(true);
 | 
				
			||||||
      const res = await fetch(`/api/auth/factors/${data.factor}`, {
 | 
					      const res = await request(`/api/auth/factors/${data.factor}`, {
 | 
				
			||||||
        method: "POST"
 | 
					        method: "POST"
 | 
				
			||||||
      });
 | 
					      });
 | 
				
			||||||
      if (res.status !== 200 && res.status !== 204) {
 | 
					      if (res.status !== 200 && res.status !== 204) {
 | 
				
			||||||
@@ -72,7 +73,7 @@ export default function LoginPage() {
 | 
				
			|||||||
      if (!data.credentials) return;
 | 
					      if (!data.credentials) return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      setLoading(true);
 | 
					      setLoading(true);
 | 
				
			||||||
      const res = await fetch(`/api/auth`, {
 | 
					      const res = await request(`/api/auth`, {
 | 
				
			||||||
        method: "POST",
 | 
					        method: "POST",
 | 
				
			||||||
        headers: { "Content-Type": "application/json" },
 | 
					        headers: { "Content-Type": "application/json" },
 | 
				
			||||||
        body: JSON.stringify({
 | 
					        body: JSON.stringify({
 | 
				
			||||||
@@ -102,7 +103,7 @@ export default function LoginPage() {
 | 
				
			|||||||
  };
 | 
					  };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  async function grantToken(tk: string) {
 | 
					  async function grantToken(tk: string) {
 | 
				
			||||||
    const res = await fetch("/api/auth/token", {
 | 
					    const res = await request("/api/auth/token", {
 | 
				
			||||||
      method: "POST",
 | 
					      method: "POST",
 | 
				
			||||||
      headers: { "Content-Type": "application/json" },
 | 
					      headers: { "Content-Type": "application/json" },
 | 
				
			||||||
      body: JSON.stringify({
 | 
					      body: JSON.stringify({
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,6 +1,7 @@
 | 
				
			|||||||
import { createSignal, Show } from "solid-js";
 | 
					import { createSignal, Show } from "solid-js";
 | 
				
			||||||
import { useWellKnown } from "../../stores/wellKnown.tsx";
 | 
					import { useWellKnown } from "../../stores/wellKnown.tsx";
 | 
				
			||||||
import { useNavigate, useSearchParams } from "@solidjs/router";
 | 
					import { useNavigate, useSearchParams } from "@solidjs/router";
 | 
				
			||||||
 | 
					import { request } from "../../scripts/request.ts";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export default function RegisterPage() {
 | 
					export default function RegisterPage() {
 | 
				
			||||||
  const [title, setTitle] = createSignal("Create an account");
 | 
					  const [title, setTitle] = createSignal("Create an account");
 | 
				
			||||||
@@ -22,7 +23,7 @@ export default function RegisterPage() {
 | 
				
			|||||||
    if (!data.name || !data.nick || !data.email || !data.password) return;
 | 
					    if (!data.name || !data.nick || !data.email || !data.password) return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    setLoading(true);
 | 
					    setLoading(true);
 | 
				
			||||||
    const res = await fetch("/api/users", {
 | 
					    const res = await request("/api/users", {
 | 
				
			||||||
      method: "POST",
 | 
					      method: "POST",
 | 
				
			||||||
      headers: { "Content-Type": "application/json" },
 | 
					      headers: { "Content-Type": "application/json" },
 | 
				
			||||||
      body: JSON.stringify(data)
 | 
					      body: JSON.stringify(data)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,5 +1,6 @@
 | 
				
			|||||||
import { getAtk, readProfiles, useUserinfo } from "../stores/userinfo.tsx";
 | 
					import { getAtk, readProfiles, useUserinfo } from "../stores/userinfo.tsx";
 | 
				
			||||||
import { createSignal, For, Show } from "solid-js";
 | 
					import { createSignal, For, Show } from "solid-js";
 | 
				
			||||||
 | 
					import { request } from "../scripts/request.ts";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export default function DashboardPage() {
 | 
					export default function DashboardPage() {
 | 
				
			||||||
  const userinfo = useUserinfo();
 | 
					  const userinfo = useUserinfo();
 | 
				
			||||||
@@ -19,7 +20,7 @@ export default function DashboardPage() {
 | 
				
			|||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  async function readNotification(item: any) {
 | 
					  async function readNotification(item: any) {
 | 
				
			||||||
    const res = await fetch(`/api/notifications/${item.id}/read`, {
 | 
					    const res = await request(`/api/notifications/${item.id}/read`, {
 | 
				
			||||||
      method: "PUT",
 | 
					      method: "PUT",
 | 
				
			||||||
      headers: { Authorization: `Bearer ${getAtk()}` }
 | 
					      headers: { Authorization: `Bearer ${getAtk()}` }
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,5 +1,6 @@
 | 
				
			|||||||
import { getAtk, readProfiles, useUserinfo } from "../stores/userinfo.tsx";
 | 
					import { getAtk, readProfiles, useUserinfo } from "../stores/userinfo.tsx";
 | 
				
			||||||
import { createSignal, Show } from "solid-js";
 | 
					import { createSignal, Show } from "solid-js";
 | 
				
			||||||
 | 
					import { request } from "../scripts/request.ts";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export default function PersonalPage() {
 | 
					export default function PersonalPage() {
 | 
				
			||||||
  const userinfo = useUserinfo();
 | 
					  const userinfo = useUserinfo();
 | 
				
			||||||
@@ -14,7 +15,7 @@ export default function PersonalPage() {
 | 
				
			|||||||
    const data = Object.fromEntries(new FormData(evt.target as HTMLFormElement));
 | 
					    const data = Object.fromEntries(new FormData(evt.target as HTMLFormElement));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    setLoading(true);
 | 
					    setLoading(true);
 | 
				
			||||||
    const res = await fetch("/api/users/me", {
 | 
					    const res = await request("/api/users/me", {
 | 
				
			||||||
      method: "PUT",
 | 
					      method: "PUT",
 | 
				
			||||||
      headers: {
 | 
					      headers: {
 | 
				
			||||||
        "Content-Type": "application/json",
 | 
					        "Content-Type": "application/json",
 | 
				
			||||||
@@ -38,7 +39,7 @@ export default function PersonalPage() {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    setLoading(true);
 | 
					    setLoading(true);
 | 
				
			||||||
    const data = new FormData(evt.target as HTMLFormElement);
 | 
					    const data = new FormData(evt.target as HTMLFormElement);
 | 
				
			||||||
    const res = await fetch("/api/avatar", {
 | 
					    const res = await request("/api/avatar", {
 | 
				
			||||||
      method: "PUT",
 | 
					      method: "PUT",
 | 
				
			||||||
      headers: { "Authorization": `Bearer ${getAtk()}` },
 | 
					      headers: { "Authorization": `Bearer ${getAtk()}` },
 | 
				
			||||||
      body: data
 | 
					      body: data
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,5 +1,6 @@
 | 
				
			|||||||
import { getAtk } from "../stores/userinfo.tsx";
 | 
					import { getAtk } from "../stores/userinfo.tsx";
 | 
				
			||||||
import { createSignal, For, Match, Show, Switch } from "solid-js";
 | 
					import { createSignal, For, Match, Show, Switch } from "solid-js";
 | 
				
			||||||
 | 
					import { request } from "../scripts/request.ts";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export default function DashboardPage() {
 | 
					export default function DashboardPage() {
 | 
				
			||||||
  const [challenges, setChallenges] = createSignal<any[]>([]);
 | 
					  const [challenges, setChallenges] = createSignal<any[]>([]);
 | 
				
			||||||
@@ -15,7 +16,7 @@ export default function DashboardPage() {
 | 
				
			|||||||
  const [contentTab, setContentTab] = createSignal(0);
 | 
					  const [contentTab, setContentTab] = createSignal(0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  async function readChallenges() {
 | 
					  async function readChallenges() {
 | 
				
			||||||
    const res = await fetch("/api/users/me/challenges?take=10", {
 | 
					    const res = await request("/api/users/me/challenges?take=10", {
 | 
				
			||||||
      headers: { Authorization: `Bearer ${getAtk()}` }
 | 
					      headers: { Authorization: `Bearer ${getAtk()}` }
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
    if (res.status !== 200) {
 | 
					    if (res.status !== 200) {
 | 
				
			||||||
@@ -28,7 +29,7 @@ export default function DashboardPage() {
 | 
				
			|||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  async function readSessions() {
 | 
					  async function readSessions() {
 | 
				
			||||||
    const res = await fetch("/api/users/me/sessions?take=10", {
 | 
					    const res = await request("/api/users/me/sessions?take=10", {
 | 
				
			||||||
      headers: { Authorization: `Bearer ${getAtk()}` }
 | 
					      headers: { Authorization: `Bearer ${getAtk()}` }
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
    if (res.status !== 200) {
 | 
					    if (res.status !== 200) {
 | 
				
			||||||
@@ -41,7 +42,7 @@ export default function DashboardPage() {
 | 
				
			|||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  async function readEvents() {
 | 
					  async function readEvents() {
 | 
				
			||||||
    const res = await fetch("/api/users/me/events?take=10", {
 | 
					    const res = await request("/api/users/me/events?take=10", {
 | 
				
			||||||
      headers: { Authorization: `Bearer ${getAtk()}` }
 | 
					      headers: { Authorization: `Bearer ${getAtk()}` }
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
    if (res.status !== 200) {
 | 
					    if (res.status !== 200) {
 | 
				
			||||||
@@ -55,7 +56,7 @@ export default function DashboardPage() {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  async function killSession(item: any) {
 | 
					  async function killSession(item: any) {
 | 
				
			||||||
    setSubmitting(true);
 | 
					    setSubmitting(true);
 | 
				
			||||||
    const res = await fetch(`/api/users/me/sessions/${item.id}`, {
 | 
					    const res = await request(`/api/users/me/sessions/${item.id}`, {
 | 
				
			||||||
      method: "DELETE",
 | 
					      method: "DELETE",
 | 
				
			||||||
      headers: { Authorization: `Bearer ${getAtk()}` }
 | 
					      headers: { Authorization: `Bearer ${getAtk()}` }
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,6 +1,7 @@
 | 
				
			|||||||
import { createSignal, Show } from "solid-js";
 | 
					import { createSignal, Show } from "solid-js";
 | 
				
			||||||
import { useNavigate, useSearchParams } from "@solidjs/router";
 | 
					import { useNavigate, useSearchParams } from "@solidjs/router";
 | 
				
			||||||
import { readProfiles } from "../../stores/userinfo.tsx";
 | 
					import { readProfiles } from "../../stores/userinfo.tsx";
 | 
				
			||||||
 | 
					import { request } from "../../scripts/request.ts";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export default function ConfirmRegistrationPage() {
 | 
					export default function ConfirmRegistrationPage() {
 | 
				
			||||||
  const [error, setError] = createSignal<string | null>(null);
 | 
					  const [error, setError] = createSignal<string | null>(null);
 | 
				
			||||||
@@ -15,7 +16,7 @@ export default function ConfirmRegistrationPage() {
 | 
				
			|||||||
      setError("Bad Request: Code was not exists");
 | 
					      setError("Bad Request: Code was not exists");
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    const res = await fetch("/api/users/me/confirm", {
 | 
					    const res = await request("/api/users/me/confirm", {
 | 
				
			||||||
      method: "POST",
 | 
					      method: "POST",
 | 
				
			||||||
      headers: { "Content-Type": "application/json" },
 | 
					      headers: { "Content-Type": "application/json" },
 | 
				
			||||||
      body: JSON.stringify({
 | 
					      body: JSON.stringify({
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										4
									
								
								pkg/view/src/scripts/request.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								pkg/view/src/scripts/request.ts
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,4 @@
 | 
				
			|||||||
 | 
					export async function request(input: string, init?: RequestInit) {
 | 
				
			||||||
 | 
					  const prefix = window.__LAUNCHPAD_TARGET__ ?? "";
 | 
				
			||||||
 | 
					  return await fetch(prefix + input, init)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -1,6 +1,7 @@
 | 
				
			|||||||
import Cookie from "universal-cookie";
 | 
					import Cookie from "universal-cookie";
 | 
				
			||||||
import { createContext, useContext } from "solid-js";
 | 
					import { createContext, useContext } from "solid-js";
 | 
				
			||||||
import { createStore } from "solid-js/store";
 | 
					import { createStore } from "solid-js/store";
 | 
				
			||||||
 | 
					import { request } from "../scripts/request.ts";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export interface Userinfo {
 | 
					export interface Userinfo {
 | 
				
			||||||
  isLoggedIn: boolean,
 | 
					  isLoggedIn: boolean,
 | 
				
			||||||
@@ -31,7 +32,7 @@ function checkLoggedIn(): boolean {
 | 
				
			|||||||
export async function readProfiles() {
 | 
					export async function readProfiles() {
 | 
				
			||||||
  if (!checkLoggedIn()) return;
 | 
					  if (!checkLoggedIn()) return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  const res = await fetch("/api/users/me", {
 | 
					  const res = await request("/api/users/me", {
 | 
				
			||||||
    credentials: "include"
 | 
					    credentials: "include"
 | 
				
			||||||
  });
 | 
					  });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,12 +1,13 @@
 | 
				
			|||||||
import { createContext, useContext } from "solid-js";
 | 
					import { createContext, useContext } from "solid-js";
 | 
				
			||||||
import { createStore } from "solid-js/store";
 | 
					import { createStore } from "solid-js/store";
 | 
				
			||||||
 | 
					import { request } from "../scripts/request.ts";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const WellKnownContext = createContext<any>();
 | 
					const WellKnownContext = createContext<any>();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const [wellKnown, setWellKnown] = createStore<any>(null);
 | 
					const [wellKnown, setWellKnown] = createStore<any>(null);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export async function readWellKnown() {
 | 
					export async function readWellKnown() {
 | 
				
			||||||
  const res = await fetch("/.well-known")
 | 
					  const res = await request("/.well-known")
 | 
				
			||||||
  setWellKnown(await res.json())
 | 
					  setWellKnown(await res.json())
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user