yxaepnm
yxaepnm
TtRPC
Created by yxaepnm on 8/13/2023 in #❓-help
Set server response headers from TRPC standalone adapter
Thanks for the idea, managed to do it as follows: server initialization:
const { databaseUrl } = parseEnvironmentVariables();
const appContext = await createAppContext({ databaseUrl });

const server = createServer((req, res) => {
const requestContext = createRequestContext({
appContext,
request: req,
response: res,
});
const handler = createHTTPHandler({
router: initRouter(),
createContext: () => requestContext,
});
handler(req, res);
});

server.listen(options.port);
const { databaseUrl } = parseEnvironmentVariables();
const appContext = await createAppContext({ databaseUrl });

const server = createServer((req, res) => {
const requestContext = createRequestContext({
appContext,
request: req,
response: res,
});
const handler = createHTTPHandler({
router: initRouter(),
createContext: () => requestContext,
});
handler(req, res);
});

server.listen(options.port);
mutation definition:
export const initRouter = () =>
router({
create: publicProcedure.mutation(async (opts) => {
const { appContext, requestContext } = opts.ctx;

const sessionToken = nanoid(21);
const sessionCookie = new Cookie({
key: sessionTokenCookieName,
value: sessionToken,
sameSite: "strict",
httpOnly: true,
});

const csrfToken = nanoid(21);
const csrfCookie = new Cookie({
key: csrfTokenCookieName,
value: csrfToken,
sameSite: "strict",
httpOnly: true,
});

requestContext.response.setHeader("Set-Cookie", [
sessionCookie.toString(),
csrfCookie.toString(),
]);

await appContext.db.insert(session).values({
sessionToken,
});

return csrfToken;
}),
});
export const initRouter = () =>
router({
create: publicProcedure.mutation(async (opts) => {
const { appContext, requestContext } = opts.ctx;

const sessionToken = nanoid(21);
const sessionCookie = new Cookie({
key: sessionTokenCookieName,
value: sessionToken,
sameSite: "strict",
httpOnly: true,
});

const csrfToken = nanoid(21);
const csrfCookie = new Cookie({
key: csrfTokenCookieName,
value: csrfToken,
sameSite: "strict",
httpOnly: true,
});

requestContext.response.setHeader("Set-Cookie", [
sessionCookie.toString(),
csrfCookie.toString(),
]);

await appContext.db.insert(session).values({
sessionToken,
});

return csrfToken;
}),
});
Not the full code due to character limit, but should suffice if you are looking to do the same :)!
5 replies