Files
DeskcommCRM/Dockerfile.worker
T
ragaspaleilaoandClaude Sonnet 5 9e2b8637cc fix(worker): laço rápido do drain volta a montar o admin client
@react-pdf/hyphenate@0.1.0 é ESM puro e só definia a condição `import`
no exports map. O worker roda via tsx (CommonJS por padrão neste
repo), então qualquer import estático de @react-pdf/renderer (usado
pela exportação de dados LGPD) derrubava carregarDeps() do drain loop
com ERR_PACKAGE_PATH_NOT_EXPORTED — e como register-handlers.ts
registra os 12 handlers do event_log num só import chain, um pacote
quebrado tirava o laço rápido de TODOS eles, não só do LGPD, caindo
pro cron de 1x/min como única rede de segurança.

- patches/@react-pdf__hyphenate.patch (via pnpm.patchedDependencies)
  acrescenta a condição `require` ao exports map: Node 22.12+/24 já
  sabe carregar ESM via require() quando o mapa permite.
- Dockerfile e Dockerfile.worker: copia patches/ antes do
  `pnpm install --frozen-lockfile` (a otimização de cache de camada
  copiava só package.json+lockfile primeiro, e o install falhava sem
  encontrar o patch referenciado).
- tests/unit/react-pdf-resolve-sob-tsx.test.ts: regressão via processo
  filho tsx real (mesma técnica de import-puro-sem-env.test.ts) usando
  require() — import() dinâmico não serve de aparato aqui porque
  sempre passa pelo loader ESM nativo do Node, que já honrava a
  condição `import` e nunca detectaria a quebra.

Confirmado nos dois sentidos (aparato falha sem o patch, passa com
ele) e provado no worker real: o warning "event-log drain OFF" some
do log de boot depois do rebuild.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-08 12:24:31 -03:00

28 lines
976 B
Docker

# Worker 24/7 do agent-engine (fusão Vendaval) — processo long-running fora do Next.
# Roda TS direto via tsx (sem build): o worker é I/O-bound e o cold start não importa.
# ponytail: imagem single-stage com devDeps (tsx precisa); multi-stage + prune é Fase 4.
FROM node:22-alpine
WORKDIR /app
# Procedência (doutrina de packaging, invariante 2).
LABEL org.opencontainers.image.source="https://github.com/melgarafael/DeskcommCRM" \
org.opencontainers.image.licenses="MIT" \
org.opencontainers.image.title="DeskcommCRM worker"
ARG APP_VERSION=dev
ENV APP_VERSION=$APP_VERSION
# pnpm fixado na versão do lockfile do repo (pnpm 10 bloquearia build scripts).
RUN corepack enable && corepack prepare pnpm@9.15.9 --activate
COPY package.json pnpm-lock.yaml ./
COPY patches ./patches
RUN pnpm install --frozen-lockfile
COPY . .
# Healthz do worker (bind 0.0.0.0 dentro do container).
EXPOSE 8787
CMD ["pnpm", "exec", "tsx", "workers/agent-worker/main.ts"]