Is it possible to set caching headers on the response of a 2nd gen https callable function? Namely, the cache-control headers to tell the browser to keep it in cache for a while.
Here’s my typical boilerplate for a https callable:
<code>import { getErrorMessage } from "@repo/common";
import { logger } from "firebase-functions";
import { z } from "zod";
import { region } from "~/config.js";
import { onCall, HttpsError } from "firebase-functions/v2/https";
const schema = z.object({
something: z.string(),
});
export const my_callable_function = onCall(
{
region,
},
async (event) => {
try {
const { something } = schema.parse(event.data);
console.log(`Do something: ${something}`);
} catch (err) {
const message = getErrorMessage(err);
logger.error(`Failed to get something: ${message}`);
throw new HttpsError("internal", message, err);
}
}
);
</code>
<code>import { getErrorMessage } from "@repo/common";
import { logger } from "firebase-functions";
import { z } from "zod";
import { region } from "~/config.js";
import { onCall, HttpsError } from "firebase-functions/v2/https";
const schema = z.object({
something: z.string(),
});
export const my_callable_function = onCall(
{
region,
},
async (event) => {
try {
const { something } = schema.parse(event.data);
console.log(`Do something: ${something}`);
} catch (err) {
const message = getErrorMessage(err);
logger.error(`Failed to get something: ${message}`);
throw new HttpsError("internal", message, err);
}
}
);
</code>
import { getErrorMessage } from "@repo/common";
import { logger } from "firebase-functions";
import { z } from "zod";
import { region } from "~/config.js";
import { onCall, HttpsError } from "firebase-functions/v2/https";
const schema = z.object({
something: z.string(),
});
export const my_callable_function = onCall(
{
region,
},
async (event) => {
try {
const { something } = schema.parse(event.data);
console.log(`Do something: ${something}`);
} catch (err) {
const message = getErrorMessage(err);
logger.error(`Failed to get something: ${message}`);
throw new HttpsError("internal", message, err);
}
}
);
These functions are only used internally to our Firebase application. I see that there is also onRequest that you can use in place of onCall, which gives the express request and response objects, but I would like to stick to onCall because it does the user auth is handled and the functions are not publicly accessible.