Histórico de mensagens sobre input em sugestões

EXIBINDO CONVERSAS RECENTES:

Texto: input
Canal: sugestões
Avatar discord do usuario christianefi

christianefi

Ver Respostas

Pessoal, bom dia.

Sobre a proposta puxada pelo <@!440035527127990273>, corroborada pelo <@!780500321994539068> e pelo <@!522899003663450113>, entendemos que se faz interessante no momento que estamos (antes da implantação). Na verdade, chegamos a discutir isso internamente mas acabou passando. Basicamente precisaremos alterar a nossa camada de comunicação da API, input e output.

Como resposta ao <@!742492546198143151> e sinalização de prazo aos interessados, já estávamos validando a solução desenvolvida, bem com toda a sua integração interna, mas alinhei com as frentes aqui e vimos a alteração como algo positivo e mais tranquilo de ser feito agora, entrando em produção se torna mais difícil.

Vamos fazê-la mas aumentamos em um dia a data proposta para a entrega, passando para quinta-feira (11/03).

Avatar discord do usuario francisco.carvalho

francisco.carvalho

Traduzindo as ideias para o input no endpoint /gn/config

Avatar discord do usuario francisco.carvalho

francisco.carvalho

<@!370847985199742977> eu acho que é possível dar uma simplificada no input, de forma que, no final das contas, não importa se o backend trata o match com ifs ou glob ou até uma "regex confiável"

Avatar discord do usuario francisco.carvalho

francisco.carvalho

Ver Respostas

Boa tarde @everyone !

Retomando o assunto endpoint de configurações (https://www.notion.so/Endpoint-de-configura-es-0a97faee68f845ab96ec21551862fe6c).

Nosso time de engenharia observou que existem possíveis situações em que o match do regex com a string do txid pode demorar muitos segundos ou até minutos. Existem situações inclusive de crash da aplicação. Em outras palavras: não é seguro recebermos via input qualquer regex.

Um exemplo que vocês podem testar no browser:

let regexp = /^(\d+)$/;
let str = "012345678901234567890123456789z";
alert( regexp.test(str) );

O alert acima levará um longo tempo até que apareça. Imaginem isso no ato de recebimento de um Pix, no qual cada milisegundo é um fator determinante para um timeout inesperado.

A conclusão é que precisamos controlar melhor quais regex serão aceitas.

A proposta é, ao invés de receber um txidRegex, receber algo mais limitado que também atenda da mesma forma:

"recebimento": {
"txid": {
"comecaCom": "gnPix"
}
}

"recebimento": {
"txid": {
"terminaCom": "gnPix"
}
}

"recebimento": {
"txid": {
"contem": "gnPix"
}
}

comecaCom/terminaCom/contem: a-zA-Z0-9{0,15} //caracteres aceitos

Gostaria de opinião de vocês em relação a essa nova proposta, bem como sugestões dentro dessa nova abordagem.

Para quem interessar, uma referência sobre o assunto regexp-catastophic-backtracking com mais detalhes.
https://javascript.info/regexp-catastrophic-backtracking

Avatar discord do usuario francisco.carvalho

francisco.carvalho

Por Pix Manual podemos entender que são aqueles nos quais o usuário inputa dados bancários (ag, conta, banco..)

Avatar discord do usuario francisco.carvalho

francisco.carvalho

Ver Respostas

## Objetivo

Permitir que o EC defina algumas configurações:

- Quando aceitar um txid;
- Aceitar ou não Pix Manual;
- Quais notificações receber via webhooks;
- Receber ou não a tarifa no webhook;
- Outras configurações podem surgir.

---

# PUT /gn/config

## Input

json
{
"pix": {
"aceitarSemChave": true,
"chaves": [{
"valor": "[email protected]",
"webhook": {
"notificar": {
"envio": true,
"recebimento": true,
"devolucao": true,
"recusa": true
},
"incluir": {
"tarifa": true
}
},
"recebimento": {
"txidRegex": "^[a-zA-Z0-9]+$"
}
}, {
"valor": "[email protected]",
"webhook": {
"notificar": {
"envio": false,
"recusa": false
}
}
}]
}
}

## Output: 200

---

## Definições

Por default:
→ Todas as notificações nascem habilitadas;
→ Não há match de regex: aceita-se qualquer txid;
→ Tarifa não é retornada no webhook;
→ Pix Manual é acatado sempre;

Default em JSON

json

{
"pix": {
"aceitarSemChave": true,
"chaves": [{
"valor": "[email protected]",
"webhook": {
"notificar": {
"envio": true,
"recebimento": true,
"devolucao": true,
"recusa": true
},
"incluir": {
"tarifa": true
}
},
"recebimento": {
"txidRegex": "" // se vazio, desconsiderar
}
}]
}

Avatar discord do usuario francisco.carvalho

francisco.carvalho

E o input está ficando assim:

{
"pix": {
"webhooks": {
"notificar": {
"envio": true,
"recebimento": true,
"devolucao": true,
"recusa": true
},
"incluir": {
"tarifas": true
}
},
"recebimentos": {
"txidRegex": "^[a-zA-Z0-9]+$"
}
}
}