migrado de js para go

This commit is contained in:
Luiz Silva 2026-01-01 19:32:29 -03:00
parent 663a8d5bf2
commit 6f78511946
7 changed files with 964 additions and 83 deletions

View file

@ -27,6 +27,38 @@ O servidor controla o cache de `/static/e-li.nps.js` via **ETag**.
Isso evita problemas de clientes com JS antigo em cache após mudanças.
### WebAssembly (WASM) — regras do widget em Go
O widget `e-li.nps.js` carrega um módulo WASM compilado em Go, para concentrar
as regras de negócio do cliente (pré-validações, cooldown e decisão de abertura
com base na resposta do backend).
Arquivos servidos:
- `/static/e-li.nps.js` (arquivo único do widget)
- `/static/e-li.nps.wasm` (módulo WASM)
- `/static/wasm_exec.js` (runtime do Go para WASM)
Regras importantes:
- **Fail-closed**: se o WASM não carregar, o widget não abre.
- Cache é controlado por **ETag** e o browser sempre **revalida**.
- O backend Go continua sendo a **autoridade** das regras e persistência.
#### Build local do WASM
Para (re)gerar os arquivos do WASM localmente:
```bash
# gera o módulo WASM
GOOS=js GOARCH=wasm go build -o web/static/e-li.nps.wasm ./cmd/widgetwasm
# copia o runtime JS do Go para WASM
cp "$(go env GOROOT)/lib/wasm/wasm_exec.js" web/static/wasm_exec.js
```
> Observação: no build via Docker, esses passos já são executados no `Dockerfile`.
### Arquivo `.env`
O servidor carrega automaticamente um arquivo `.env` na raiz do projeto (se existir) usando `godotenv`.