Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(web): get Env from API endpoint #678

Merged
merged 22 commits into from
Feb 13, 2025
Merged
Changes from 1 commit
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
880408e
feat(web): fetch env from API endpoint in client side
xFJA Jan 9, 2025
fe5837e
feat(web): adapt server side sentry env config for any environment
xFJA Jan 9, 2025
ce4bb56
fix(web): limit to '1' env query
xFJA Jan 9, 2025
c3d89ca
refactor(web): reset 'server' and 'edge' sentry config
xFJA Jan 13, 2025
652b4ac
refactor(web): move env endpoint from API package to Next API
xFJA Jan 13, 2025
d5b8a88
feat: remove default env value
xFJA Jan 13, 2025
bbf2fbc
feat(web): use Next env api endpoint to init sentry in clientside
xFJA Jan 13, 2025
b0ef04c
chore(web): remove unnecessary export
xFJA Jan 13, 2025
b88ada6
refactor(web): remove unnecessary env fetch utils file
xFJA Jan 13, 2025
62bbdea
Merge branch 'main' into create-env-endpoint
xFJA Jan 15, 2025
c12a61d
feat(web): validate env API request json parsing
xFJA Jan 27, 2025
85c704a
chore(web): update changeset
xFJA Jan 27, 2025
a84d3d6
refactor(web): infer clien env zod schema in Env provider
xFJA Jan 28, 2025
58d9788
feat(web): update client vars schema
xFJA Feb 4, 2025
264fd6f
feat(web): update client env var references after name refactor
xFJA Feb 4, 2025
68069a0
Merge branch 'main' into create-env-endpoint
xFJA Feb 10, 2025
0c3c817
style(web): type provider env vars
PJColombo Feb 13, 2025
b873dc4
chore: update `pnpm-lock`
PJColombo Feb 13, 2025
05a3b4f
chore(web): remove `NEXT` prefix env vars
PJColombo Feb 13, 2025
9632626
chore(web): parse env vars fetched from api
PJColombo Feb 13, 2025
6d0a4ef
chore(web): use type casting instead of Zod schema parsing on client …
PJColombo Feb 13, 2025
d80e5ea
chore(web): fix blobscan version info
PJColombo Feb 13, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
refactor(web): move env endpoint from API package to Next API
xFJA committed Jan 13, 2025
commit 652b4acf7b8ea8fb7e22377102cef21cea5d4178
22 changes: 22 additions & 0 deletions apps/web/src/pages/api/env/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
import type { NextApiRequest, NextApiResponse } from "next";

import { env } from "@blobscan/env";

export default async function (req: NextApiRequest, res: NextApiResponse) {
const method = req.method;

switch (method) {
case "POST": {
const clientEnv = Object.entries(env)
.filter(([key]) => key.startsWith("NEXT_"))
.map(([key, value]) => [key.replace(/^NEXT_/, ""), value]);

return res.status(200).json({
data: Object.fromEntries(clientEnv),
});
}

default:
throw new Error("Method not allowed");
}
}
46 changes: 20 additions & 26 deletions apps/web/src/providers/Env.tsx
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
import React, { createContext, useContext, useState, useEffect } from "react";

import { api } from "~/api-client";

interface EnvContextType {
env: Record<string, string | boolean | undefined>;
isLoading: boolean;
@@ -22,8 +20,6 @@ const DEFAULT_ENV = {
PUBLIC_VERCEL_GIT_COMMIT_SHA: undefined,
};

const LOCAL_STORAGE_KEY = "env";

const EnvContext = createContext<EnvContextType>({
env: DEFAULT_ENV,
isLoading: true,
@@ -32,32 +28,30 @@ const EnvContext = createContext<EnvContextType>({
export const EnvProvider: React.FC<{ children: React.ReactNode }> = ({
children,
}) => {
const { data: fetchedEnv, isLoading } = api.getEnv.useQuery(undefined, {
staleTime: Infinity,
cacheTime: Infinity,
});
const [env, setEnv] = useState<Record<string, string | boolean | undefined>>(
() => {
let storedEnv;
if (global?.window !== undefined) localStorage.getItem(LOCAL_STORAGE_KEY);
return storedEnv ? JSON.parse(storedEnv) : DEFAULT_ENV;
}
);
const [env, setEnv] =
useState<Record<string, string | boolean | undefined>>();

useEffect(() => {
if (
typeof window !== undefined &&
localStorage &&
fetchedEnv &&
!isLoading
) {
localStorage.setItem(LOCAL_STORAGE_KEY, JSON.stringify(fetchedEnv));
setEnv(fetchedEnv);
}
}, [fetchedEnv, isLoading]);
const fetchEnv = async () => {
try {
const request = await fetch("/api/env", { method: "POST" });
const data = await request.json();
setEnv(data.data);
} catch (error) {
console.error(
"Error fetching environment variables from server side:",
error
);
}
};

fetchEnv();
}, []);

return (
<EnvContext.Provider value={{ env, isLoading }}>
<EnvContext.Provider
value={{ env: env ? env : DEFAULT_ENV, isLoading: false }}
>
{children}
</EnvContext.Provider>
);
2 changes: 0 additions & 2 deletions packages/api/src/app-router.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
import { z } from "@blobscan/zod";

import { getEnv } from "./getEnv";
import { publicProcedure } from "./procedures";
import { blobRouter } from "./routers/blob";
import { blobStoragesStateRouter } from "./routers/blob-storages-state";
@@ -33,7 +32,6 @@ export const appRouter = t.router({
.input(z.void())
.output(z.string())
.query(() => "yay!"),
getEnv: getEnv,
});

// export type definition of API
11 changes: 0 additions & 11 deletions packages/api/src/getEnv.ts

This file was deleted.