El subscriber revalidate-storefront.ts (PR #9) solo escuchaba product.updated y los eventos de variante, asi que un producto nuevo (product.created) o eliminado (product.deleted) no disparaba revalidateTag: el storefront tardaba hasta el ciclo normal de cache (~60s por pod) en reflejar altas/bajas de catalogo, a diferencia de precio/descripcion/imagenes en productos existentes, que ya viajan por product.updated.
47 lines
1.2 KiB
TypeScript
47 lines
1.2 KiB
TypeScript
import type { SubscriberArgs, SubscriberConfig } from "@medusajs/framework";
|
|
import { ContainerRegistrationKeys } from "@medusajs/framework/utils";
|
|
|
|
export default async function revalidateStorefrontHandler({
|
|
container,
|
|
}: SubscriberArgs) {
|
|
const logger = container.resolve(ContainerRegistrationKeys.LOGGER);
|
|
|
|
const storefrontUrl = process.env.STOREFRONT_URL;
|
|
const secret = process.env.REVALIDATE_SECRET;
|
|
|
|
if (!storefrontUrl || !secret) {
|
|
logger.warn(
|
|
"STOREFRONT_URL o REVALIDATE_SECRET no configurados; se omite la revalidación del storefront.",
|
|
);
|
|
return;
|
|
}
|
|
|
|
try {
|
|
const response = await fetch(`${storefrontUrl}/api/revalidate`, {
|
|
method: "POST",
|
|
headers: { "x-revalidate-secret": secret },
|
|
});
|
|
|
|
if (!response.ok) {
|
|
logger.warn(
|
|
`Revalidación del storefront respondió HTTP ${response.status}.`,
|
|
);
|
|
}
|
|
} catch (error) {
|
|
logger.warn(
|
|
`No se pudo revalidar el storefront: ${(error as Error).message}`,
|
|
);
|
|
}
|
|
}
|
|
|
|
export const config: SubscriberConfig = {
|
|
event: [
|
|
"product.created",
|
|
"product.updated",
|
|
"product.deleted",
|
|
"product-variant.updated",
|
|
"product-variant.created",
|
|
"product-variant.deleted",
|
|
],
|
|
};
|