Estrutura do Changelog
Cada versão é organizada em seções para facilitar a leitura:- Added: novos recursos e funcionalidades.
- Changed: mudanças em recursos existentes.
- Fixed: correções de bugs.
- Removed: recursos ou funcionalidades removidos.
- Deprecated: recursos ou funcionalidades que estão obsoletos e serão removidos em futuras versões.
- Security: atualizações relacionadas à segurança.
- Performance: melhorias de desempenho.
- Documentation: atualizações na documentação.
- Notes: notas adicionais sobre a versão, como links para pull requests, issues ou detalhes técnicos.
- Contributors: lista de colaboradores que contribuíram para a versão, com links para seus perfis.
- Other: outras mudanças que não se encaixam nas categorias acima.
v16.09.2026
Added- Paginação por cursor em todos os endpoints de listagem:
GET /stores,GET /stores/:storeId/categories,GET /stores/:storeId/products,GET /stores/:storeId/coupons,GET /stores/:storeId/affiliates,GET /stores/:storeId/paymentseGET /stores/:storeId/payments/filter. - Parâmetro
cursor(string) para avançar na lista usandonextCursorda resposta anterior. - Parâmetros
sortBy(campo) eorder(asc/desc) para ordenação nos endpoints com cursor. - Respostas incluem
nextCursorehasMoreno modo offset, permitindo migração sem recomeçar do zero.
- Documentação de paginação em
limitations.mdxatualizada com seção dedicada a cursor.
- @sebastianjnuwu - Sebastian Jn.
v11.09.2026
Added- Rastreio de cliques de afiliados: endpoints públicos
POST /stores/:storeId/clicks(registra clique comref) ePOST /stores/:storeId/clicks/verify(valida origem e marca o script instalado). Validação daOrigincontrastore.trackingDomain. - Campos de tracking na loja:
trackingDomain,scriptInstalledescriptInstalledAtretornados porGET /stores/:storeIde atualizáveis viaPUT /stores/:storeId(STORE_UPDATE).
- O link de afiliado passou a usar o
trackingDomainda loja (fallback para o domínio da loja), permitindo rastreio em domínio externo.
v08.09.2026
Added- Nova seção Afiliados na referência da API:
GET/POST /stores/:storeId/affiliatesePUT/DELETE /stores/:storeId/affiliates/:affiliateId, comcommissionRules(DEFAULT/PRODUCT/CATEGORY/COUPON, menorpositionvence) estatistics=trueparastatistics/metrics. GET /stores/:storeId/payments/:paymentId: pagamento completo com produtos (preço, estoque, categorias) emetadata(cupom emmetadata.items[].coupon).
- Todos os endpoints
DELETEagora usam soft delete (deletedAt): o registro some das listagens, mas é preservado no banco (nunca mais remoção física).
v07.09.2026
Added- Toggle de ativar/desativar gateway de pagamento (Mercado Pago e Asaas) direto no card, sem precisar recadastrar as credenciais.
- Nova rota de reativação no backend:
POST /user/gatewaycomactive: truee sem credenciais reativa a gateway usando as chaves já salvas. - Card colapsável de “Recebimento líquido por gateway” no editor de produto, agrupado por gateway (Mercado Pago/Asaas), com previsão de taxa e valor líquido por método.
- Indicador “Receita Bruta” ao lado da “Receita Líquida” no dashboard.
- Botão “Atualizar dados” no dashboard (ícone de refresh ao lado do seletor de loja) que recarrega lojas, pagamentos, categorias, produtos e cupons em paralelo, com spinner de ~450ms.
- Realtime: atualização automática periódica em lojas (60s), categorias, produtos e cupons (30s).
- Logos reais das gateways em
public/images/gateways/(Mercado Pago e Asaas) usados nos formulários do dashboard. - Asaas adicionada aos tipos dos SDKs (
sdk-node-browser-bunesdk-java-kotlin): novas opçõesASAAS(gateway) eASAAS_ORDER_PIX/ASAAS_ORDER_CARD/ASAAS_ORDER_BOLETOemPaymentCreateGateway. - Parcelamento no cartão no checkout (Asaas e Mercado Pago): seletor de parcelas limitado ao
maxInstallmentsconfigurado pelo lojista no form do gateway (padrão1, máximo12). - Tabela de taxa por faixa de parcelas (
installmentFees) no form do gateway: cada faixade X até Y parcelastempercent+fixedpróprios, com até 12 faixas; validada no front end (destaque vermelho por linha) e no back end (sobreposição,min > max, limite). GET /stores/:storeId/feesagora expõemaxInstallmentseinstallmentFeespor gateway, permitindo o checkout exibir as parcelas disponíveis e as taxas reais (valores e percentuais) configuradas.- Reautenticação step-up (código por e-mail, reutilizando o fluxo 2FA) para ações sensíveis do dashboard, como visualizar credenciais de gateway e alterar senha.
- Desativar uma gateway agora preserva as credenciais cadastradas, permitindo reativar sem redigitar as chaves (antes apagava as credenciais).
- Botão de gateway renomeado de “Remover” para “Desativar” refletindo o novo comportamento.
MetricCarddo dashboard com altura e alinhamento uniformes (h-full min-h-[92px],mt-autopara o trend), grid de 6 colunas para comportar o novo card de Receita Bruta.- Imagens das gateways reorganizadas de
public/images/banner/parapublic/images/gateways/, com nomes normalizados (mp.jpg→mercadopago.jpg,assas.png→asaas.png). - Logos das gateways no card de recebimento do produto com arredondamento médio (
rounded-md). - Sessões mais estáveis: tolerância de 90s de graça no
AUTH2e troca de IP não destrói mais a sessão (apenas marca como suspeita para reautenticação). - Preço cobrado em pagamento com cartão agora usa a faixa de parcelas do
installmentCount(installmentFees) em vez da taxa plana defees.card, persistindometadata.gateway.card.installmentCountno pagamento — o valor cobrado passa a bater com o exibido no checkout. - O número de parcelas escolhido é o que vale em todas as gateways: a API valida o
installmentCountcontra omaxInstallmentsda loja e recusa acima do limite (novos códigos400 INVALID_INSTALLMENT_COUNTe400 MAX_INSTALLMENTS_EXCEEDED, semmessage— padrão da rota). - As gateways de cartão (Asaas e Mercado Pago) aplicam o
installmentCountescolhido em todos os fluxos: a Asaas divide o total igualmente nas N× (inclusive na fatura hospedada, antes só no cartão tokenizado) e o Mercado Pago limita o checkout ao número escolhido (max_installments).
- Erro de hidratação do React causado por
<button>dentro de<button>no cabeçalho dos cards de gateway (switch agora é irmão do botão de expandir, não filho). - Métodos de pagamento duplicados no card de “Recebimento líquido” (aliases PIX/BANK_TRANSFER, CARD/CREDIT_CARD, BOLETO/TICKET) agora deduplicados por label.
- Taxa menor que 1 centavo (ex.: 0,99% de R 0,01” em vez de desaparecer/ficar zerada.
- Reativação de gateway sem credenciais cadastradas agora devolve erro claro (
GATEWAY_NOT_FOUND/GATEWAY_NO_CREDENTIALS). - Checkout cartão: cada opção de parcela calculava o valor com a taxa da seleção atual (e não da própria faixa), exibindo valores errados ao alternar 1x/2x/… — corrigido para
totalForInstallments(n)com a faixa den. - Checkout 500:
ReferenceError: Cannot access 'discountAmount' before initializationao aplicar cupom (declaração movida antes detotalForInstallments). - Faixas de parcelas duplicadas/sobrepostas agora bloqueadas no save do gateway (
400 INVALID_DATAno back end + destaque vermelho no form). - Step-up: mensagens de erro nunca mais exibem códigos crus (
TOO_MANY_REQUESTSetc.) — fallback amigável em português.
- Changelog atualizado com o novo fluxo de ativar/desativar gateways, card de recebimento líquido, botão de atualizar no dashboard e organização dos logos.
api-reference/payment/post.mdxcom a tabela completa de gateways/métodos (<PROVEDOR>_ORDER_<MÉTODO>), exemplos para Asaas (PIX) e documentação das respostas (QR code,init_point/invoiceUrl,pixQrCode).api-reference/payment/filter.mdxcomASAASno parâmetro de filtrogateway(EFI_BANKmarcado como legado).api-reference/store/fees.mdxesclarecendo que as taxas retornadas são as definidas pelo lojista (não o custo cobrado pela gateway), conforme configurado no dashboard.api-reference/store/fees.mdxatualizado com os novos camposmaxInstallmentseinstallmentFees(faixas de parcelas) por gateway.api-reference/payment/post.mdxdocumentando o parcelamento no cartão viametadata.gateway.card.installmentCount(limitemaxInstallments, taxa por faixa aplicada sobre o total e persistência doinstallmentCountno pagamento), com exemplo de cartão parcelado em 6x.api-reference/payment/post.mdxatualizado com o comportamento final do parcelamento: escolhido vale em Asaas (fatura hospedada e tokenizado) e Mercado Pago (limitado ao escolhido), recusa acima do limite e novos códigosINVALID_INSTALLMENT_COUNT/MAX_INSTALLMENTS_EXCEEDED(tabela de erros).- Changelog atualizado com a validação de parcelas, aplicação nas duas gateways e cobertura de testes (unitários de
ASAAS_SERVICE/MERCADOPAGO_SERVICE+ rotas). - Repos de SDK atualizados com Asaas (SDK Node/Browser/Bun: tipos
PaymentGateway/PaymentCreateGateway+ camposinit_point,pixQrCode,copyPastePix; SDK Java: enums + README corrigido). - README do SDK Java: valor desatualizado
MERCADOPAGO_SERVICE_PIXcorrigido paraMERCADOPAGO_ORDER_PIX.
- @sebastianjnuwu - Sebastian Jn.
v20.04.2026
Added- Serviço centralizado
SendPushna API para unificar o envio de notificações Firebase. - Suporte a envio de push com
token,tokens,url,route,typeedatano mesmo payload. - Abertura automática do pagamento específico ao clicar na notificação, usando
paymentIdno fluxo do dashboard.
- Fluxo de assinatura atualizado para disparar notificação push e e-mail de plano ativado com o mesmo padrão de contexto.
- Push de pagamento atualizado para abrir diretamente a aba de pagamentos e focar o pagamento correspondente.
- Service worker do site ajustado para respeitar
url,routeehashao abrir notificações. - Frontend do Firebase ajustado para redirecionar notificações em foreground com o mesmo comportamento do service worker.
- Correção do clique em notificações para evitar abertura genérica da página inicial quando existe destino específico.
- Normalização automática de campos do payload de push para evitar envio de valores não suportados pelo FCM.
- Changelog atualizado com a refatoração do fluxo de push e a integração de abertura direta do pagamento via notificação.
- @sebastianjnuwu - Sebastian Jn.
v19.04.2026
Added- Novo controle de bônus de renovação na assinatura: ao contratar um novo plano, o usuário pode receber os dias restantes como bônus, com limite máximo de 7 dias.
- Ajuste no seed da API para ativar apenas a assinatura padrão definida em
SEED_ACTIVE_PLAN, sem recriar usuário ou loja. - Melhorias visuais no card de assinatura do dashboard, com ícones nos campos de plano, vencimento e status.
- Lógica de assinatura atualizada para calcular dias bônus com base no vencimento atual da assinatura ativa.
- Card de assinatura do dashboard simplificado para exibir apenas o status baseado no vencimento.
- @sebastianjnuwu - Sebastian Jn.
v18.04.2026
Added- Suporte ao campo opcional
metadata(JSON) no model de categorias da API. - Persistência e retorno de
metadatanos fluxos de criação, edição e consulta de categorias (POST,PUT,GETeGET por ID). - Campo de metadata em formato JSON no painel de categorias (Site) para criar e editar usando editor Monaco, com validação de sintaxe em tempo real.
- Novo sistema automático de reversão de stock e cupom quando pagamentos não são concluídos.
- Função utility
revertPaymentAllocation()para reverter atomicamente a alocação de stock e useLimit de cupons. - Integração de reversão automática no fluxo de expiração de pagamentos (após 24h sem confirmação).
- Integração de reversão automática no webhook do Mercado Pago para status:
REJECTED,CANCELLED,REFUNDED,CHARGED_BACK.
- Fluxo de categorias no frontend atualizado para enviar payload com
metadatajunto aos demais campos. - Cliente de API do site para categorias atualizado para aceitar
metadataopcional em criação e atualização. - Chave de cache de categorias mantida no padrão original (
stores:{storeId}:categories) após ajustes no rollout. - Fluxo de expiração de pagamento (
paymentQueue) agora reverte stock e cupom antes de marcar comoEXPIRED. - Webhook do Mercado Pago agora detecta automaticamente falhas de pagamento e reverte alocações correspondentes.
- Correção crítica: Stock e cupons NÃO eram revertidos quando pagamentos falhavam, resultando em inconsistência de dados.
- Implementação de reversão transacional para garantir consistência mesmo em falhas parciais.
- Referência da API de categorias atualizada para incluir o campo
metadatanos endpoints:api-reference/category/postapi-reference/category/putapi-reference/category/getapi-reference/category/get-by-id
- Exemplos de request/response de categoria revisados para refletir payload e retorno com
metadata. - Documentação de limites de produtos e cupons atualizada para refletir comportamento de reversão em pagamentos não-aprovados.
- @sebastianjnuwu - Sebastian Jn.
v16.04.2026
Added- Novo endpoint privado de filtros para pagamentos:
GET /stores/:storeId/payments/filter. - Suporte a filtros combináveis por campos do pagamento:
id,uuid,status,name,email,cpf,price,coupon,gateway,shipment, etc, paginação e ordenação. - Suporte a filtros de metadata com caminho aninhado (dot notation), por exemplo:
metadataKey=items.0.product.sold&metadataValue=19.
- Controller de filtros de pagamentos ajustado para tratar metadata aninhada com maior consistência.
- Lógica de filtro de metadata consolidada para evitar sobrescrita entre critérios (
metadataKey,metadataValue). - Navegação da documentação atualizada para incluir a nova página
api-reference/payment/filterna seção de Pagamentos. - Ajuste de nomenclatura e formatação para manter consistência com outras páginas de API.
- @sebastianjnuwu - Sebastian Jn.
v15.04.2026
Added- Novas rotas autenticadas de push token na API:
POST /user/push-token(registro) eDELETE /user/push-token(remoção). - Novo fluxo de boas-vindas via Firebase no registro de token: ao cadastrar um token válido, o sistema envia uma notificação inicial de confirmação.
- Persistência de tokens em
user.metadata.pushTokenscom atualização do cache Redis do usuário após alterações.
- Lógica de registro de push token atualizada para evitar duplicidade, manter até 3 tokens por usuário e priorizar os tokens mais recentes.
- Service Worker de notificações do site revisado para suportar melhor payloads Firebase em background e exibição mais completa (title/body/icon/image/badge).
- Adicionado tratamento de clique em notificação no Service Worker para focar janela existente ou abrir a URL enviada no payload.
- Ajustes no fluxo de exibição de push em background para reduzir casos em que a notificação não aparecia corretamente em alguns payloads.
- Changelog atualizado com as melhorias de notificações push (API + Site) implementadas nesta data.
- @sebastianjnuwu - Sebastian Jn.
v15.03.2026
Added- Atualização dos models User e Store para suportar URLs de webhook (API)
- Refatoração do upload de imagens para usar blob server interno e atualização dos componentes relacionados (Site)
- Aprimoramento da gestão de webhooks com melhor controle de estado e feedback ao usuário (Site)
- Ajuste no package.json da API e do Site para nova versão 15.03.2026
- Ajuste no controle de sessão e logging de erros nos controllers de autenticação (API)
- Correção de logging de erro e ajuste no skip de recuperação de sessão nos controllers de autenticação (API)
- Atualização de versão e dependências nos pacotes (API e Site)
- @sebastianjnuwu - Sebastian Jn.
v14.03.2026
Added- Nova estrutura de documentação para Webhooks: seção própria, endpoints GET/POST/DELETE documentados separadamente.
- Documentação de payload criptografado e exemplo de decifragem no tutorial.
- Navegação da documentação reorganizada: webhooks não aparecem mais em lojas, mas em grupo próprio.
- Tutorial de webhooks revisado para alinhar com a API real e o formato criptografado.
- Ajuste nos exemplos e explicações para refletir a implementação real do backend.
- Removido campo/menção a webhooks da resposta de loja na documentação.
- Arquivo antigo de webhooks dentro de stores removido.
- @sebastianjnuwu - Sebastian Jn.
v13.03.2026
Added- Revisão do job de expiração de planos (
billing.job.js) para garantir compatibilidade com a estrutura atual de assinaturas baseada emUserSubscriptionHistory. - Validação da lógica de assinatura ativa usando
getPrimarySubscriptione conferência dos critérios de expiração e notificações. - Função minimalista para setar plano do usuário (
setUserPlan). - Refatoração do helper
ACTIVE_SUBSCRIPTIONpara lógica direta e enxuta. - Validação e documentação dos códigos de erro do endpoint de criação de loja.
- Ajuste no frontend: tratamento de erros no modal de criação de loja agora impede feedback de sucesso indevido.
- Documentação do fluxo de assinatura e expiração revisada via IA.
- Refatoração dos schedulers e filas: nomes de jobs e filas padronizados para evitar conflitos e garantir processamento correto.
- Limpeza automática de jobs concluídos e falhados agora é padrão em todas as filas (removeOnComplete/removeOnFail).
- Atualização dos métodos de agendamento para usar apenas as opções essenciais, centralizando a configuração de limpeza no core da fila.
- Atualização do webhook de assinatura para usar a nova assinatura do
ACTIVE_SUBSCRIPTION. - Padronização dos retornos de status e códigos de erro no backend de lojas.
- E-mails de expiração e expiração de plano revisados e corrigidos, agora enviados com novo design padronizado.
- Correção do job de expiração para processar assinaturas já vencidas, não apenas ativas.
- Atualização direta do metadata do histórico de assinatura, sem dependência de função externa.
- Correção do switch/case de erros no modal de criação de loja para garantir UX correta.
- Ajuste de classes Tailwind para evitar warnings de build.
- @sebastianjnuwu - Sebastian Jn.
v11.03.2026
Added- Suporte a múltiplos métodos de pagamento via Mercado Pago: PIX e Cartão de Crédito (
MERCADOPAGO_SERVICE_PIX,MERCADOPAGO_SERVICE_CARD). - Campo
feeAppliedTonas credenciais do gateway para definir em quais métodos de pagamento a taxa é aplicada (ex: apenas cartão, apenas pix, ou ambos). - Estrutura padronizada de resposta de pagamento com objetos
serviceepaymentseparados. - Registro do campo
gatewayMethodnos metadados internos do pagamento para rastreabilidade.
- Lógica de cálculo de taxa (
feePercentage) agora considerafeeAppliedTo— a taxa só é aplicada se o método de pagamento estiver listado. - Resposta da API de pagamento reestruturada: agora retorna
{ service, payment }em vez de dados planos. - Pagamentos gratuitos agora retornam
service.type: "FREE_PAYMENT"para consistência com os demais fluxos. - Gateway de cartão migrado para Checkout Pro do Mercado Pago com exclusão de métodos não desejados via
excluded_payment_typeseexcluded_payment_methods.
- Correção de bug onde
MERCADOPAGO_SERVICEnão retornava o resultado do axios por ausência dereturn. - Correção de bug onde
value.gatewayera sobrescrito comgatewayType, fazendo o serviço sempre cair no fluxoUNSUPPORTED_PAYMENT_TYPE. - Correção do campo
gatewaysalvo no banco para usar o enum correto do Prisma (MERCADOPAGO) em vez do método completo. - Remoção de
default_payment_method_id: "credit_card"que causava erroinvalid default_payment_method_idna API do Mercado Pago.
- Nova página de referência para o endpoint
POST /stores/:storeId/paymentscom exemplos de requisição, snippets cURL e respostas documentadas para PIX, Cartão e pagamento gratuito.
- @sebastianjnuwu - Sebastian Jn.
v08.03.2026
Added- Changelog atualizado para documentar os novos schedulers automáticos (UserDelete, Billing) e a tradução de todas as mensagens de scheduler/fila para inglês.
- Opção para configurar taxa (%) repassada ao cliente ao usar gateways de pagamento (frontend e backend).
- Campo
feePercentageagora pode ser definido por gateway e salvo nas credenciais criptografadas. - Aplicação automática da taxa no valor final do pagamento, tanto na API pública quanto na admin.
- Registro dos campos
gatewayFeePercentageegatewayFeeAmountnos metadados do pagamento. - IDs e htmlFor dos campos do modal de gateways agora seguem o padrão
gateway-TIPO-campopara compatibilidade e acessibilidade. - Mensagens de validação dos gateways exibidas em português, tanto no frontend quanto no backend.
- Estrutura dos metadados de pagamento na API admin agora está idêntica à pública para taxas de gateway.
- Validação aprimorada para garantir que
feePercentageseja respeitado e aplicado corretamente. - Dashboard de pagamentos agora exibe os pagamentos mais recentes por padrão, mesmo na opção “Todos”.
- Ajuste nos checkboxes de métodos de pagamento para garantir compatibilidade com o backend e scripts de validação.
- Correção de erro de reatribuição de variável (
finalPrice) no controller de pagamento admin. - Ajustes para garantir consistência entre API pública e admin na lógica de taxas.
- Correção de erro
TypeError: Cannot read properties of undefined (reading 'split')ao salvar gateways sem id nos inputs. - Checagem extra para ignorar elementos sem id no script de gateways.
- Aplicação de optional chaining (
?.) para evitar erros de acesso a propriedades indefinidas. - Checagem de lint/type em API e site para garantir ausência de erros críticos.
- @sebastianjnuwu - Sebastian Jn.
v05.03.2026
Added- Aba dedicada Changelog na navegação principal da documentação.
- Estrutura inicial para registro contínuo de versões e mudanças.
- Copiar o ID de usuário no modal do perfil para facilitar a integração com outras ferramentas.
- Suporte a ordenação de categorias com campo
positionno backend. - Novo endpoint privado
PUT /stores/:storeId/categories/reorderpara salvar a ordem por lista de IDs. - Ações de painel para organizar categorias com
Mover para cimaeMover para baixo. - Suporte a ordenação de produtos, cupons e lojas com campo
positionno backend. - Novos endpoints privados
PUT /stores/:storeId/products/reorder,PUT /stores/:storeId/coupons/reorderePUT /stores/reorder. - Ações de painel para organizar produtos, cupons e lojas com
Mover para cimaeMover para baixo.
- Ajuste de navegação para separar atualizações da aba de tutoriais.
- Melhoria no agrupamento da documentação para facilitar descoberta de mudanças recentes.
GET /stores/:storeId/categoriesagora retorna categorias na ordem deposition.GET /stores/:storeId/categories/:categoryIde respostas de criação/edição de categoria agora incluemposition.GET /stores,GET /stores/:storeId/productseGET /stores/:storeId/couponsagora retornam dados na ordem deposition.- Respostas de criação/edição e detalhes de produtos, cupons e lojas agora incluem
position.
- Correção de links quebrados relacionados a tutoriais de integração.
- Correção de inconsistências na nomenclatura de versões anteriores.
- Correção de formatação em seções de changelog anteriores.
- Erros de rotas que era privada e agora é pública.
- Atualização da documentação para incluir o changelog e instruções de uso.
- Novos tutoriais de integração adicionados à documentação, como Mercado Pago, EFI Bank (apenas as abas).
- Documentação da API de categorias atualizada com o campo
position. - Nova página da API para reordenação:
api-reference/category/reorder. - Documentação da API de produtos, cupons e lojas atualizada com o campo
position. - Novas páginas de reordenação:
api-reference/product/reorder,api-reference/coupon/reordereapi-reference/store/reorder.
- Esta é a versão inicial do changelog, e as versões anteriores estão sendo documentadas retroativamente.
- As versões anteriores estão sendo revisadas para garantir que todas as mudanças significativas sejam registradas.
- O changelog será atualizado regularmente com cada nova versão lançada, e as versões anteriores serão revisadas para garantir que todas as mudanças significativas sejam registradas.
- @sebastianjnuwu - Sebastian Jn.