diff --git a/.zed/settings.json b/.zed/settings.json index 7c42f8b..154f057 100644 --- a/.zed/settings.json +++ b/.zed/settings.json @@ -8,6 +8,12 @@ "fmt.configPath": null } } + }, + "oxlint": { + "binary": { + "path": "mise", + "arguments": ["exec", "--", "oxlint", "--lsp"] + } } }, "languages": { diff --git a/packages/graphql/src/index.ts b/packages/graphql/src/index.ts index f24bb43..2105fcc 100644 --- a/packages/graphql/src/index.ts +++ b/packages/graphql/src/index.ts @@ -97,13 +97,7 @@ const fillOptions = (opt: YogaServerOptions): Required => ({ mailer: opt?.mailer ?? mockTransport(), emailFrom: opt?.emailFrom ?? "noreply@drfed.org", // FIXME: Properly parametrize the following allowlist: - origins: - opt?.origins ?? - new Set([ - "https://drfed.org", - "http://localhost:3000", - "http://0.0.0.0:3000", - ]), + origins: opt?.origins ?? new Set(["https://drfed.org"]), }); const getAccessToken = (headers: Headers) => diff --git a/packages/web/.env.example b/packages/web/.env.example deleted file mode 100644 index 8ed9c2c..0000000 --- a/packages/web/.env.example +++ /dev/null @@ -1 +0,0 @@ -VITE_DRFED_URL=http://0.0.0.0:8888/graphql diff --git a/packages/web/env.d.ts b/packages/web/env.d.ts index 9f25370..241f45f 100644 --- a/packages/web/env.d.ts +++ b/packages/web/env.d.ts @@ -1,5 +1,5 @@ interface ImportMetaEnv { - readonly VITE_DRFED_URL: string; + VITE_BACKEND_URL: string; } interface ImportMeta { diff --git a/packages/web/src/RelayEnvironment.ts b/packages/web/src/RelayEnvironment.ts index 66e8f94..8daffd5 100644 --- a/packages/web/src/RelayEnvironment.ts +++ b/packages/web/src/RelayEnvironment.ts @@ -35,7 +35,13 @@ const fetchFn: FetchFunction = async (params, variables) => { if (accessToken !== undefined) { headers.Authorization = `Bearer ${accessToken}`; } - const response = await fetch(import.meta.env.VITE_DRFED_URL, { + + const url = new URL( + "/graphql", + event?.request.url ?? globalThis.location.href, + ); + + const response = await fetch(url, { method: "POST", headers, body: JSON.stringify({ diff --git a/packages/web/vite.config.ts b/packages/web/vite.config.ts index a24320e..4a1b68b 100644 --- a/packages/web/vite.config.ts +++ b/packages/web/vite.config.ts @@ -14,20 +14,34 @@ // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see . +import process from "node:process"; + import { solidStart } from "@solidjs/start/config"; import { nitro } from "nitro/vite"; -import { defineConfig } from "vite"; +import { defineConfig, loadEnv } from "vite"; import { cjsInterop } from "vite-plugin-cjs-interop"; import relay from "vite-plugin-relay-lite"; -export default defineConfig(({ command }) => ({ - plugins: [ - solidStart(), - nitro(), - relay({ codegen: command !== "build" }), - { - ...cjsInterop({ dependencies: ["relay-runtime"] }), - applyToEnvironment: (environment) => environment.name === "ssr", - }, - ], -})); +export default defineConfig(({ mode, command }) => { + const env = loadEnv(mode, process.cwd()); + return { + plugins: [ + solidStart(), + nitro({ + routeRules: { + "/graphql": { + proxy: { + to: `${env.VITE_BACKEND_URL}/graphql`, + forwardHeaders: ["accept"], + }, + }, + }, + }), + relay({ codegen: command !== "build" }), + { + ...cjsInterop({ dependencies: ["relay-runtime"] }), + applyToEnvironment: (environment) => environment.name === "ssr", + }, + ], + }; +});