Files
webstudio/apps/builder/app/shared/context.server.ts
T
Bogdan Chadkin e1fa2075a5 Enforce server constraints for packages (#1507)
Ref
https://remix.run/docs/en/1.15.0/guides/constraints#server-code-pruning

Remix use NAME.server.ts extension to enforce omitting module from
client bundles. Though we heavily used `/server` in packages which had
no affect and blocked us in using a few node apis which were not
polifilled with empty modules while bundling for client.

Here I replaced `/server` with `/index.server` and removed all legacy
server entry points which are not longer necessary with new typescript
resolution.
2023-04-22 09:14:14 +07:00

47 lines
1.3 KiB
TypeScript

import type { AppContext } from "@webstudio-is/trpc-interface/index.server";
import { authenticator } from "~/services/auth.server";
import { trpcClient } from "~/services/trpc.server";
const createAuthorizationContext = async (
request: Request,
buildEnv: AppContext["authorization"]["buildEnv"]
): Promise<AppContext["authorization"]> => {
const originUrl = new URL(request.url);
let url = originUrl;
// In case of css use referrer as url to extract tokens from canvas iframe href
if (originUrl.pathname === "/s/css") {
const referer = request.headers.get("referer");
if (referer !== null) {
url = new URL(referer);
}
}
const authToken = url.searchParams.get("authToken") ?? url.hostname;
const user = await authenticator.isAuthenticated(request);
const context: AppContext["authorization"] = {
userId: user?.id,
authToken,
buildEnv,
authorizeTrpc: trpcClient.authorize,
};
return context;
};
/**
* argument buildEnv==="prod" only if we are loading project with production build
*/
export const createContext = async (
request: Request,
buildEnv: AppContext["authorization"]["buildEnv"] = "dev"
): Promise<AppContext> => {
const authorization = await createAuthorizationContext(request, buildEnv);
return {
authorization,
};
};