Files
apps-registry/workloads/commerce-backend/src/subscribers/revalidate-storefront.ts
T
devops 8c52229e71 feat(commerce-backend): revalidar el storefront al crear/borrar productos
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.
2026-08-13 16:55:16 -05:00

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",
],
};