Skip to content

feat(evohub): canal EvoHub na criação de instância (Fase 1)#29

Merged
DavidsonGomes merged 3 commits into
developfrom
feat/evohub-channel-phase1
Jun 10, 2026
Merged

feat(evohub): canal EvoHub na criação de instância (Fase 1)#29
DavidsonGomes merged 3 commits into
developfrom
feat/evohub-channel-phase1

Conversation

@DavidsonGomes

Copy link
Copy Markdown
Member

O que é

Adiciona o EvoHub como 4ª opção de canal na criação de instância do manager-v2. EvoHub é um proxy transparente da Meta Cloud API — uma alternativa ao WhatsApp Cloud direto.

Os 3 canais existentes (Baileys, WhatsApp Business, Evolution) ficam idênticos — é só adição.

Fluxos (ambos funcionais)

  • Vincular canal existente (single-step): lista canais WhatsApp do hub → seleciona → cria a Instance com token + phone_number_id resolvidos server-side (o front nunca vê o token).
  • Criar canal novo (multi-step): provisiona no hub → abre o public_link para autorizar a Meta → botão "Já autorizei, finalizar" cria a Instance reusando o link-existing.

Mudanças

  • evolution.types.ts: shapes do contrato Hub (HubPlan, MetaAppOptions, HubChannel, EvoHubProvisionResponse).
  • NewInstance.tsx: EVOHUB no enum Zod + options + render condicional <EvoHubConnect/>; esconde o Save global no EVOHUB (evita double-create).
  • EvoHubConnect.tsx (novo): painel de conexão (modo novo/existente, shared/BYO, state machine). Channel type fixado em WhatsApp (evolution-api é API de WhatsApp).
  • evohubService.ts (novo): serviço control-plane via apiGlobal (apikey global; nunca toca a API-key do hub).
  • i18n nos 4 idiomas (en-US, pt-BR, es-ES, fr-FR).
  • fix pré-existente: message-content.tsx reaction senderName ("You" || x"You", comportamento idêntico) para destravar o type-check.

Depende de

PR correspondente no evolution-api (endpoints control-plane /evohub/* + canal EvoHub no backend).

Verificação

  • tsc --noEmit ✅ · vite build ✅ · eslint ✅
  • Testado ponta-a-ponta: vincular-existente e criar-novo criam a Instance corretamente; webhook inbound recebido.

Releases the license-aware manager-v2 alongside Evolution API v2.4.0:
- evolution-go provider support + design-system refactor + i18n
- Sessions* features ported from #14
- React port of the interactive-message tester
- Branding updates to Evolution Foundation domains
- License-aware login flow (Phase 2 of the licensing rollout)
Adiciona EvoHub como 4ª opção de canal no NewInstance (manager-v2), Fase 1 =
vincular canal existente. Os 3 canais existentes ficam idênticos.

- evolution.types.ts: shapes Hub (HubPlan, MetaAppOptions, HubChannel,
  EvoHubProvisionResponse) + EVOHUB_INTEGRATION + tipos de canal
- i18n: chave integration.evohub + bloco instance.form.evohub.* nos 4 idiomas
- NewInstance.tsx: EVOHUB no enum Zod + options + render condicional
  <EvoHubConnect/>; esconde o Save global no EVOHUB (evita double-create)
- evohubService.ts: serviço control-plane via apiGlobal (apikey global);
  linkExisting (Fase 1) envia só { instanceName, hub_channel_id, channel_type },
  token resolvido server-side — o front nunca vê o token
- EvoHubConnect.tsx: painel de conexão; Fase 1 = modo existing (single-step,
  estado linked legítimo). Modo new (public_link) atrás de flag PHASE2_CREATE_NEW

tsc --noEmit verde, eslint limpo. (build tsc -b acusa erro PRÉ-EXISTENTE em
message-content.tsx:64 — fora do escopo desta feature.)
…nderName

- EvoHubConnect: o criar-novo agora FINALIZA a criação da Instance. O botão
  pós-OAuth ('Já autorizei, finalizar') chama linkExisting com o hub_channel_id
  do canal recém-provisionado, reusando o caminho testado (resolve token +
  phone_number_id server-side). Antes só fechava o diálogo sem criar nada.
- Guarda 422: se o usuário clicar antes de concluir o OAuth (canal sem
  phone_number_id), toast pedindo para concluir e tentar de novo. disabled
  durante o finalize evita double-create.
- Channel type fixado em WhatsApp (evolution-api é API de WhatsApp); removido
  o seletor de tipo. available-channels e provision sempre whatsapp.
- i18n: chaves button.finalize + error.notAuthorizedYet nos 4 idiomas.
- fix pré-existente: message-content.tsx reaction senderName ('You' || x →
  'You', comportamento idêntico) para destravar o type-check.

@sourcery-ai sourcery-ai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sorry @DavidsonGomes, you have reached your weekly rate limit of 500000 diff characters.

Please try again later or upgrade to continue using Sourcery

@DavidsonGomes DavidsonGomes merged commit 8f18a1d into develop Jun 10, 2026
3 of 4 checks passed
@DavidsonGomes DavidsonGomes deleted the feat/evohub-channel-phase1 branch June 10, 2026 20:03
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant