FieldOps/apps/operator-pwa/package.json
Pedro Gomes b7e3208eb2 MAI CALL - step 12
Passo 12 completo. Build limpo, AC server-side totalmente verificado.

O que foi implementado:

lib/queue/ — camada de persistência offline:

db.ts — Dexie 4 com tabelas pending e deadLetters
broadcast.ts — BroadcastChannel helper (mai-call-sync) para comunicar entre tabs
sync.ts — loop de sync com retry/backoff: signPhotoUpload → PUT MinIO → create; 409 = sucesso; 4xx = dead-letter; erros de rede = paragem + retry na próxima volta
SyncProvider — React Context que:

Arranca sync ao reconectar (online event + visibilitychange)
Polling de 10s como fallback
Regista Background Sync API quando disponível
Expõe pendingCount / deadLetterCount via useSyncState()
Formulário (/maintenance/new) — refatorado: ao submeter, escreve em IndexedDB e navega imediatamente para /sent sem esperar pelo servidor. O SyncProvider processa a fila em background.

Feedback visual:

SyncChip na home: "Tudo sincronizado" / "N pedidos por enviar" / erro dead-letter
/maintenance/sent: mostra "Em fila" (Clock) ou "Enviado" (CheckCircle2) reactivamente via BroadcastChannel
Workbox (@ducanh2912/next-pwa) — app shell precaching ativo, para que o app carregue mesmo sem rede depois da primeira visita.
2026-05-16 16:55:59 +01:00

49 lines
1.3 KiB
JSON

{
"name": "@repo/operator-pwa",
"version": "0.0.0",
"private": true,
"type": "module",
"scripts": {
"dev": "dotenv -e ../../.env -- next dev --port 3000",
"build": "dotenv -e ../../.env -- next build",
"start": "dotenv -e ../../.env -- next start --port 3000",
"lint": "next lint",
"typecheck": "tsc --noEmit",
"clean": "rimraf .next .turbo node_modules"
},
"dependencies": {
"@ducanh2912/next-pwa": "^10.2.9",
"@repo/api": "workspace:*",
"@repo/db": "workspace:*",
"@repo/domain": "workspace:*",
"@repo/ui": "workspace:*",
"dexie": "^4.0.10",
"@t3-oss/env-nextjs": "^0.11.1",
"@tanstack/react-query": "^5.62.10",
"@trpc/client": "^11.0.0",
"@trpc/react-query": "^11.0.0",
"@trpc/server": "^11.0.0",
"lucide-react": "^0.469.0",
"next": "15.3.9",
"next-auth": "5.0.0-beta.25",
"pino": "^9.5.0",
"pino-pretty": "^11.3.0",
"react": "^19.0.0",
"react-dom": "^19.0.0",
"superjson": "^2.2.2",
"zod": "^3.24.1"
},
"devDependencies": {
"@repo/config": "workspace:*",
"@types/node": "^22.10.2",
"@types/react": "^19.0.2",
"@types/react-dom": "^19.0.2",
"autoprefixer": "^10.4.20",
"dotenv-cli": "^8.0.0",
"postcss": "^8.4.49",
"rimraf": "^6.0.1",
"tailwindcss": "^3.4.17",
"typescript": "^5.7.2"
}
}