From 3f31e25ae77e69a38c74edd1f5e774cced1313e6 Mon Sep 17 00:00:00 2001 From: Horux Dev Date: Mon, 3 Aug 2026 03:58:29 +0000 Subject: [PATCH] chore(sat): prepara entorno para proxies - Agrega dependencia https-proxy-agent. - Documenta variables SAT_PROXY_LIST, SAT_PROXY_STRATEGY y SAT_PROXY_FALLBACK_DIRECT en .env.example. - Actualiza pnpm-lock.yaml. --- apps/api/.env.example | 10 ++++++++++ apps/api/package.json | 1 + pnpm-lock.yaml | 33 +++++++++++++++++++++++++++++++++ 3 files changed, 44 insertions(+) diff --git a/apps/api/.env.example b/apps/api/.env.example index 89274e1..6ffd2fc 100644 --- a/apps/api/.env.example +++ b/apps/api/.env.example @@ -91,3 +91,13 @@ METABASE_PG_PASSWORD= # ----- SAT Playwright headless toggle (debug temporal) ---------------------- # SAT_HEADLESS=false # solo dev — muestra browser para debug de scrapers + +# ----- Proxies SAT (opcional) ------------------------------------------------ +# Lista de proxies HTTP/HTTPS para descargas masivas del SAT. Formato: +# http://user:pass@host:port,http://user:pass@host:port,... +# Si se deja vacío, el sistema usa la IP pública del servidor (comportamiento actual). +SAT_PROXY_LIST= +# Estrategia de rotación: round-robin | random (default: round-robin) +SAT_PROXY_STRATEGY=round-robin +# Si es true, cuando todos los proxies fallan se intenta con la IP directa del servidor. +SAT_PROXY_FALLBACK_DIRECT=true diff --git a/apps/api/package.json b/apps/api/package.json index 118b8c4..290d06b 100644 --- a/apps/api/package.json +++ b/apps/api/package.json @@ -35,6 +35,7 @@ "facturapi": "^4.14.2", "fast-xml-parser": "^5.3.3", "helmet": "^8.0.0", + "https-proxy-agent": "^7.0.6", "jsonwebtoken": "^9.0.2", "mercadopago": "^2.12.0", "node-cron": "^4.2.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 3c62371..f4a4241 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -70,6 +70,9 @@ importers: helmet: specifier: ^8.0.0 version: 8.1.0 + https-proxy-agent: + specifier: ^7.0.6 + version: 7.0.6 jsonwebtoken: specifier: ^9.0.2 version: 9.0.3 @@ -1378,6 +1381,10 @@ packages: resolution: {integrity: sha512-TGw5yVi4saajsSEgz25grObGHEUaDrniwvA2qwSC060KfqGPdglhvPMA2lPIoxs3PQIItj2iag35fONcQqgUaQ==} engines: {node: '>=12.0'} + agent-base@7.1.4: + resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==} + engines: {node: '>= 14'} + any-promise@1.3.0: resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} @@ -1663,6 +1670,15 @@ packages: supports-color: optional: true + debug@4.4.3: + resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + decimal.js-light@2.5.1: resolution: {integrity: sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg==} @@ -1931,6 +1947,10 @@ packages: resolution: {integrity: sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==} engines: {node: '>= 0.8'} + https-proxy-agent@7.0.6: + resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} + engines: {node: '>= 14'} + iconv-lite@0.4.24: resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} engines: {node: '>=0.10.0'} @@ -3767,6 +3787,8 @@ snapshots: adm-zip@0.5.16: {} + agent-base@7.1.4: {} + any-promise@1.3.0: {} anymatch@3.1.3: @@ -4076,6 +4098,10 @@ snapshots: dependencies: ms: 2.0.0 + debug@4.4.3: + dependencies: + ms: 2.1.3 + decimal.js-light@2.5.1: {} delayed-stream@1.0.0: {} @@ -4398,6 +4424,13 @@ snapshots: statuses: 2.0.2 toidentifier: 1.0.1 + https-proxy-agent@7.0.6: + dependencies: + agent-base: 7.1.4 + debug: 4.4.3 + transitivePeerDependencies: + - supports-color + iconv-lite@0.4.24: dependencies: safer-buffer: 2.1.2