Este proyecto es una implementación de referencia mínima del SDK
@wave-telecom/render-block-sdk, armada para reproducir, con el
flow real del cliente, el comportamiento reportado: el botón
"Actualizar" a veces no respeta el cooldown de 30 segundos, y en la
consola del navegador aparece un warning del tipo:
[Violation] 'setTimeout' handler took Nms
No contiene lógica adicional: solo el setup estándar del SDK
(initialize() + RenderBlocksProvider + RendererScreen) apuntando
al flow configurado.
| Node.js | 18 (fijado en .nvmrc / package.json#engines, 18.20.8 LTS) |
| Vite | 6.4.3 |
| React | 18 |
@wave-telecom/render-block-sdk |
^1.0.3 |
nvm install # usa la versión fijada en .nvmrc (Node 18)
nvm use
cp .env.example .env
# completar VITE_WAVE_ACCESS_TOKEN, VITE_WAVE_EXTERNAL_CODE y
# VITE_WAVE_FLOW_ID (o VITE_WAVE_COMPONENT_ID) con los datos del flow
npm install
npm run devEl .env no debe compartirse ni commitearse (ya está en
.gitignore); cada quien lo completa con sus propias credenciales.
El escenario descrito abajo (Prueba realizada) está además automatizado
en e2e/cooldown.spec.ts con Playwright. El test:
- Carga la pantalla real del flow y espera a que se muestren el timestamp ("Información al...") y el botón "Actualizar".
- Dispara un burst de 7 clics consecutivos (intervalo de 400ms) y verifica que, de todo el burst, solo el primer clic haya generado una request real de refresh (los otros 6 deben quedar bloqueados por el cooldown.)
- Espera a que pasen los 30s del cooldown y hace un segundo clic real, verificando que esta vez sí dispara la request y que la respuesta es OK.
- Durante toda la ejecución monitorea la consola del navegador y
hace fallar el test si aparece algún
[Violation] 'setTimeout' handler took Nms, algún error de página, o alguna request fallida.
Requiere el .env ya configurado (ver sección Setup) y las
dependencias instaladas.
npx playwright install chromium # solo la primera vez, instala el navegador
npm run playwright # corre el test en modo headless
npm run playwright:ui # corre el test en modo UI (interactivo, para debug)El test levanta automáticamente el servidor de dev (npm run dev)
contra http://localhost:5173 (configurado en
playwright.config.ts), así que no hace falta tenerlo corriendo
antes (si ya está corriendo, lo reutiliza.)
El test tiene un timeout de 90s (porque espera los 30s reales del
cooldown). Si falla, Playwright genera trace y screenshot
(retain-on-failure / only-on-failure) que quedan en
test-results/ para inspeccionar.
Con el flow real del cliente cargado (misma pantalla de consumo ) se ejecutó, en Node 18:
- Clics repetidos en "Actualizar" — 6 clics consecutivos en menos de 3 segundos. El timestamp ("Información al ... h") no se actualizó en ninguno de los 6 clics: el cooldown bloqueó correctamente todos los reintentos.
- Clic después de pasado el cooldown (31s de espera) — el timestamp sí se actualizó, confirmando que el botón funciona normalmente cuando el cooldown ya expiró.
- Consola del navegador monitoreada durante toda la prueba —
ningún error, ninguna request fallida, y ningún
[Violation] 'setTimeout' handler took Nms'.
Con la misma versión de Node (18), Vite 6.4.3 +
React 18 + render-block-sdk 1.0.3, y el flow real, el problema no
se reprodujo: el cooldown de 30s se respetó en todos los intentos y
no apareció el warning de setTimeout en consola.
Esto sugiere que la causa está en algo específico del entorno o de la
integración del lado del cliente (versión de Node distinta a la
declarada, alguna dependencia con versión diferente, código adicional
alrededor del SDK, extensión del navegador, etc.), y no en el SDK en
sí. Quedamos a disposición para comparar configuraciones (package.json,
versión exacta de Node en producción, código alrededor del
initialize()) y ayudar a encontrar la diferencia.