Files
sar/package.json
julian 055f9f98f0 feat(api): foundation canon JCS — Pino+CLS+RFC9457+health+ping (Frente A)
Estabelece a fundação operacional de apps/api conforme STACK.md v2.2 e
CODING-RULES.md v2.0, substituindo o hello-world scaffolded.

- tracing.ts primeiro import (PGD-OBS-001) — stub OTel ativável por env
- EnvSchema Zod 4 com fail-fast (superRefine guarda prod) + EnvModule global
- nestjs-pino com redact LGPD (*.cpf|*.cardNumber|*.password|auth|cookie)
- main.ts hardenizado: helmet, CORS por env, compression, versionamento URI
  /api/v1, graceful shutdown
- ProblemDetailsFilter global (RFC 9457 application/problem+json), Zod -> 422
- Health endpoints /api/v1/health/{live,ready} com memory.checkHeap(350MB)
  (ready skeleton documenta K=3 LRU pool conforme PGD-OBS-003)
- WorkspaceModule via ClsModule.forRootAsync — requestId+workspaceId no CLS,
  idGenerator alinhado com pino-http para mesmo UUID em header e body
- GET /api/v1/ping retornando workspaceId+requestId (alvo de smoke test e
  futuro healthcheck do docker compose)
- ZodValidationPipe (nestjs-zod) como APP_PIPE global
- tsconfig.app.json target ES2023 (alinhado ao base)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 17:50:42 +00:00

108 lines
3.1 KiB
JSON

{
"name": "sar",
"version": "0.1.0",
"private": true,
"description": "SAR — Força de Vendas · JCS Sistemas (monorepo Nx)",
"license": "UNLICENSED",
"type": "module",
"engines": {
"node": ">=24.0.0",
"pnpm": ">=11.1.0"
},
"packageManager": "pnpm@11.1.0",
"scripts": {
"build": "nx run-many -t build",
"lint": "nx run-many -t lint",
"test": "nx run-many -t test",
"e2e": "nx run-many -t e2e",
"dev:api": "nx run api:serve",
"dev:web": "nx run web:serve",
"dev:up": "docker compose -f docker-compose.dev.yml up -d",
"dev:down": "docker compose -f docker-compose.dev.yml down",
"dev:logs": "docker compose -f docker-compose.dev.yml logs -f",
"graph": "nx graph",
"affected": "nx affected",
"format": "prettier --write .",
"format:check": "prettier --check ."
},
"devDependencies": {
"@eslint/js": "^9.8.0",
"@nestjs/schematics": "^11.0.0",
"@nestjs/testing": "^11.0.0",
"@nx/devkit": "22.7.4",
"@nx/eslint": "^22.7.4",
"@nx/eslint-plugin": "22.7.4",
"@nx/jest": "22.7.4",
"@nx/js": "^22.7.4",
"@nx/nest": "^22.7.4",
"@nx/node": "^22.7.4",
"@nx/playwright": "^22.7.4",
"@nx/react": "^22.7.4",
"@nx/vite": "^22.7.4",
"@nx/vitest": "22.7.4",
"@nx/web": "^22.7.4",
"@nx/webpack": "22.7.4",
"@nx/workspace": "^22.7.4",
"@playwright/test": "^1.36.0",
"@swc-node/register": "~1.11.1",
"@swc/cli": "~0.8.0",
"@swc/core": "~1.15.5",
"@swc/helpers": "~0.5.18",
"@testing-library/dom": "10.4.0",
"@testing-library/react": "16.3.0",
"@types/compression": "^1.8.1",
"@types/express": "^5.0.6",
"@types/jest": "~30.0.0",
"@types/node": "catalog:",
"@types/react": "^19.0.0",
"@types/react-dom": "^19.0.0",
"@vitejs/plugin-react": "^6.0.0",
"@vitest/coverage-v8": "~4.1.0",
"@vitest/ui": "~4.1.0",
"eslint": "^9.8.0",
"eslint-config-prettier": "^10.0.0",
"eslint-plugin-import": "2.31.0",
"eslint-plugin-jsx-a11y": "6.10.1",
"eslint-plugin-playwright": "^1.6.2",
"eslint-plugin-react": "7.35.0",
"eslint-plugin-react-hooks": "5.0.0",
"jest": "~30.3.0",
"jest-environment-node": "~30.3.0",
"jest-util": "~30.3.0",
"jiti": "2.4.2",
"jsdom": "~22.1.0",
"jsonc-eslint-parser": "^2.1.0",
"nx": "^22.7.4",
"prettier": "^3.8.3",
"ts-jest": "^29.4.0",
"ts-node": "10.9.1",
"typescript": "catalog:",
"typescript-eslint": "^8.40.0",
"vite": "^8.0.0",
"vitest": "~4.1.0",
"webpack-cli": "^5.1.4"
},
"dependencies": {
"@nestjs/common": "^11.0.0",
"@nestjs/config": "^4.0.4",
"@nestjs/core": "^11.0.0",
"@nestjs/platform-express": "^11.0.0",
"@nestjs/terminus": "^11.1.1",
"axios": "^1.6.0",
"compression": "^1.8.1",
"helmet": "^8.2.0",
"nestjs-cls": "^5.4.3",
"nestjs-pino": "^4.6.1",
"nestjs-zod": "^4.3.1",
"pino": "^9.14.0",
"pino-http": "^10.5.0",
"pino-pretty": "^13.1.3",
"react": "^19.0.0",
"react-dom": "^19.0.0",
"reflect-metadata": "^0.1.13",
"rxjs": "^7.8.0",
"tslib": "^2.3.0",
"zod": "catalog:"
}
}