Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
65 commits
Select commit Hold shift + click to select a range
5499b7b
fix: resolve catalog pagination limits and add GHCR CI/CD
kelvinzer0 Jun 18, 2026
e02109f
feat: add OpenAPI documentation with swagger-jsdoc
kelvinzer0 Jun 18, 2026
642a416
fix: resolve Docker build and lint errors
kelvinzer0 Jun 18, 2026
3c1ff61
fix: convert limit to number type in catalog endpoints
kelvinzer0 Jun 18, 2026
f4eefcb
fix: accept both string and number types for limit parameter
kelvinzer0 Jun 18, 2026
d892c4b
fix: make fetchBusinessProfile non-fatal in catalog/collections
kelvinzer0 Jun 19, 2026
49a661b
chore: update Baileys from 7.0.0-rc.9 to 7.0.0-rc13
kelvinzer0 Jun 19, 2026
bc6f1b7
Update whatsapp.baileys.service.ts
kelvinzer0 Jun 28, 2026
3dcb586
Update data validation to use business DTOs
kelvinzer0 Jun 28, 2026
723ff2d
Update fetchCatalog to use getCatalogDto
kelvinzer0 Jun 28, 2026
74f0cae
feat(catalog): add browser-based catalog & collections provider
kelvinzer0 Jul 12, 2026
c27eb23
docs: add catalog-browser-provider usage docs
kelvinzer0 Jul 12, 2026
c3dda71
fix(deps): regenerate package-lock.json with puppeteer-core
kelvinzer0 Jul 12, 2026
fa74c0d
fix(catalog-browser): remove NestJS deps, use Evolution API's native …
kelvinzer0 Jul 12, 2026
3499784
style: auto-fix prettier formatting and duplicate imports
kelvinzer0 Jul 12, 2026
6057376
ci: remove Docker Hub publish workflows, use GHCR only
kelvinzer0 Jul 12, 2026
b0cd83b
fix(catalog-browser): remove --single-process causing Chromium crash
kelvinzer0 Jul 12, 2026
743aeba
fix(catalog-browser): clean stale Chromium locks before launch
kelvinzer0 Jul 12, 2026
765aca2
fix(catalog-browser): inject @wppconnect/wa-js for window.WPP API
kelvinzer0 Jul 12, 2026
d722812
refactor(catalog-browser): use whatsapp-web.js (proper implementation)
kelvinzer0 Jul 12, 2026
05bbb46
feat(catalog-browser): add pairing UI + auth state endpoints
kelvinzer0 Jul 12, 2026
5c5e426
style: fix lint errors (unused import, formatting)
kelvinzer0 Jul 12, 2026
8964565
ci: build amd64 only — fix QEMU Illegal instruction crash
kelvinzer0 Jul 12, 2026
e098bff
fix(catalog-browser): sanitize clientId + audit library usage
kelvinzer0 Jul 12, 2026
04cdf4a
fix(catalog-browser): pass InstanceDto as ClassRef, not null
kelvinzer0 Jul 12, 2026
2e87d07
fix(catalog-browser): inject @wppconnect/wa-js after client ready
kelvinzer0 Jul 12, 2026
4d36d1a
style: fix lint — use ES import for readFileSync, eslint-disable for …
kelvinzer0 Jul 12, 2026
1530b23
fix(catalog-browser): call injectWaJs in fetchCatalog/fetchCollection…
kelvinzer0 Jul 12, 2026
0cd76a4
fix(catalog-browser): don't hard-fail on WPP.isReady timeout
kelvinzer0 Jul 12, 2026
f9928b3
fix(catalog-browser): use wa-js public API (WPP.catalog.*)
kelvinzer0 Jul 12, 2026
07f9efd
fix(catalog-browser): wait for WPP.isFullReady before fetching
kelvinzer0 Jul 12, 2026
313b093
fix(catalog-browser): use Puppeteer waitForFunction for WPP.isReady
kelvinzer0 Jul 12, 2026
c840f48
fix(catalog-browser): remove injectWaJs from ready handler (race cond…
kelvinzer0 Jul 12, 2026
dce4064
fix(catalog-browser): restore 4-layer fetch with pagination cursor
kelvinzer0 Jul 12, 2026
cc952cc
fix(catalog-browser): add null check for page.evaluate result
kelvinzer0 Jul 12, 2026
1a6184e
fix(catalog-browser): serialize products before returning from page.e…
kelvinzer0 Jul 12, 2026
aeded23
fix: TypeScript type error in page.evaluate return type
kelvinzer0 Jul 12, 2026
c2cb669
fix: price field + lint — use JSON.stringify to capture getter proper…
kelvinzer0 Jul 12, 2026
fda0209
style: eslint --fix formatting
kelvinzer0 Jul 12, 2026
8fd1346
fix(catalog-browser): return ALL product properties via JSON.stringify
kelvinzer0 Jul 12, 2026
c24943d
fix(catalog-browser): serialize inside browser context + compute price
kelvinzer0 Jul 12, 2026
0f09f82
style: remove unused addProduct function
kelvinzer0 Jul 12, 2026
31999cf
fix(catalog-browser): use CatalogStore as primary (queryCatalog errors)
kelvinzer0 Jul 12, 2026
34f8ed2
feat(catalog-browser): implement findNextProductPage pagination loop
kelvinzer0 Jul 12, 2026
bb6ce93
feat(catalog-browser): load products per collection via findCollectio…
kelvinzer0 Jul 13, 2026
7b9a2e5
feat(catalog-browser): cross-reference collections with catalog products
kelvinzer0 Jul 13, 2026
a6ab794
fix(catalog-browser): batch findCollectionMembership to prevent timeout
kelvinzer0 Jul 13, 2026
f8557c1
fix(catalog-browser): simplify fetchCollections — metadata only
kelvinzer0 Jul 13, 2026
f9c030a
feat(catalog-browser): hybrid getCollections — Baileys protocol for p…
kelvinzer0 Jul 13, 2026
084c845
chore: remove unused BrowserCollection import (eslint)
kelvinzer0 Jul 13, 2026
46576e1
feat(catalog-browser): add browser fallback for collection→product ma…
kelvinzer0 Jul 13, 2026
293daef
fix(catalog-browser): use WidFactory.createWid + add diagnostic info
kelvinzer0 Jul 13, 2026
f6d0b01
feat(catalog-browser): pure wa-js collection→product mapping (drop hy…
Jul 13, 2026
f8931fc
style: fix prettier formatting in catalog-browser.service.ts
Jul 13, 2026
da17eaf
fix(catalog-browser): remove slow Method B, add timeout + error handling
Jul 13, 2026
6b64b20
feat(catalog-browser): try getCollectionModels + _products field
Jul 13, 2026
feb24bb
feat(catalog-browser): populate store + try findCollectionMembership
Jul 13, 2026
2ecd0f3
feat(catalog-browser): dump collection model attrs + skip invalid Wid…
Jul 13, 2026
7c65a6f
fix(catalog-browser): access products via attributes, not model level
Jul 13, 2026
73a7613
style: fix unused var + prettier formatting
Jul 13, 2026
3849f33
chore: trigger rebuild with cache busting
Jul 13, 2026
74378bb
fix(ci): disable Docker build cache to force fresh build
Jul 13, 2026
1aa36ae
diag: inspect embedded products structure to debug serialization
Jul 13, 2026
9fdc3ad
fix(catalog-browser): don't overwrite embedded products with empty Map
Jul 13, 2026
40e91dd
feat(catalog-browser): download images locally to avoid CDN URL expiry
Jul 13, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
50 changes: 0 additions & 50 deletions .github/workflows/publish_docker_image.yml

This file was deleted.

50 changes: 0 additions & 50 deletions .github/workflows/publish_docker_image_homolog.yml

This file was deleted.

50 changes: 0 additions & 50 deletions .github/workflows/publish_docker_image_latest.yml

This file was deleted.

68 changes: 68 additions & 0 deletions .github/workflows/publish_ghcr.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
name: Build and Publish to GHCR

on:
push:
branches:
- main
- 'release/**'
tags:
- 'v*.*.*'
pull_request:
branches:
- main

env:
REGISTRY: ghcr.io
IMAGE_NAME: ${{ github.repository }}

jobs:
build:
name: Build and Publish
runs-on: ubuntu-latest
permissions:
contents: read
packages: write
steps:
- name: Checkout
uses: actions/checkout@v5
with:
submodules: recursive

- name: Docker meta
id: meta
uses: docker/metadata-action@v5
with:
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
tags: |
type=ref,event=branch
type=ref,event=pr
type=semver,pattern={{version}}
type=semver,pattern={{major}}.{{minor}}
type=sha,prefix=

- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3

- name: Login to GitHub Container Registry
if: github.event_name != 'pull_request'
uses: docker/login-action@v3
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}

- name: Build and push
id: docker_build
uses: docker/build-push-action@v6
with:
context: .
platforms: linux/amd64
push: ${{ github.event_name != 'pull_request' }}
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
# Disable cache to ensure fresh build (cache was returning stale compiled JS)
no-cache: true

- name: Image digest
if: github.event_name != 'pull_request'
run: echo ${{ steps.docker_build.outputs.digest }}
26 changes: 21 additions & 5 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -1,11 +1,16 @@
FROM node:24-alpine AS builder

RUN apk update && \
apk add --no-cache git ffmpeg wget curl bash openssl
apk add --no-cache git ffmpeg wget curl bash openssl \
chromium nss freetype harfbuzz ttf-freefont

LABEL version="2.3.1" description="Api to control whatsapp features through http requests."
LABEL maintainer="Davidson Gomes" git="https://github.com/DavidsonGomes"
LABEL contact="contato@evolution-api.com"
LABEL version="2.3.7-catalog-browser" description="Api to control whatsapp features through http requests. Adds browser-based catalog fetch provider."
LABEL maintainer="Kelvin Yuli Andrian" git="https://github.com/kelvinzer0/evolution-api"
LABEL contact="kelvinzer0@users.noreply.github.com"

# Tell Puppeteer to use system Chromium instead of downloading its own
ENV PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true
ENV PUPPETEER_EXECUTABLE_PATH=/usr/bin/chromium-browser

WORKDIR /evolution

Expand Down Expand Up @@ -33,11 +38,22 @@ RUN npm run build
FROM node:24-alpine AS final

RUN apk update && \
apk add tzdata ffmpeg bash openssl
apk add --no-cache tzdata ffmpeg bash openssl \
chromium nss freetype harfbuzz ttf-freefont font-noto-emoji

ENV TZ=America/Sao_Paulo
ENV DOCKER_ENV=true

# Puppeteer config — use system Chromium
ENV PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true
ENV PUPPETEER_EXECUTABLE_PATH=/usr/bin/chromium-browser

# Catalog Browser Service config (overridable at runtime)
ENV CATALOG_BROWSER_ENABLED=false
ENV CATALOG_BROWSER_IDLE_TIMEOUT_MS=600000
ENV CATALOG_BROWSER_MAX_SESSIONS=5
ENV CATALOG_BROWSER_HEADLESS=true

WORKDIR /evolution

COPY --from=builder /evolution/package.json ./package.json
Expand Down
Loading