Executando verificação de segurança...
6

Como eu mandei milhares de requisições para a API do TabNews sem querer 😅

Primeiramente meu ultimo post chegou no "top 3" na aba dos posts relevantes, agradeço a todos que votaram!

Como já detelhei, a CLI que estou construindo foi feita utilizando o React, com a biblioteca Ink, (em breve farei um post sobre ela). E umas das funcionalidades que implementei foi a de fazer login:

asciicast

Quando o usuário faz login, a sessão é salva em um arquivo json. Toda fez que ele entra na CLI, é possivel ver a quantidade de tabcoins e tabcash.

Para obter esses dados, estou fazendo da seguinte forma:

const [token, setToken] = useState<string | null>(null)

const { data: userData } = useSWR(
  token ? "/user" : null,
  (url: string) =>
    request(
      `https://www.tabnews.com.br/api/v1${url}`,
      {
        headers: {
          "cookie": `session_id=${token}`
        }
      }
    )
      .then(res => res.body.json())
      .then(data => data)
)

const [loadingUser, setLoadingUser] = useState(userData != undefined)

useEffect(() => {
  readFile("session.json")
    .then(async data => {
      const dataJSON = JSON.parse(data.toString())
      setToken(dataJSON.token)
    })
    .catch(() => setLoadingUser(false))
}, [])

Estou utilizando a biblioteca swr junto com a undici para fazer as requisições. Dentro do useEffect (quem manja de React deve saber o que é, mas de maneira bem resumida para quem não sabe, a função passada para ela é executada sempre que o aplicativo abre), é lido o arquivo que armazena a sessão, logo após isso o token é salvo em um state, que faz com que a requisição para obter os dados do usuário seja executada.

Mas enquanto eu estava implementando isso, tudo isso (a leitura do arquivo, a requisição e a mudança de estados) estava aconteçendo dentro do useEffect (não fiz commit disso, ent n vou ter o código completo de cm estava), ent creio que por conta de uma mistura de um bug do ink, junto com a grande quantidade de mudanças de estado que estavam ocorrendo, o componente estava sendo renderizado repetidamente, o que resultava nessa função ser chamada várias vezes, e em uma grande quantidade de requests (cerca de 1600 por minuto). E consequntemente, no bloqueio do meu IP (cm eu ainda não sabia do que estava aconteçendo, abri uma issue).

Foram tantas requisições que o Filipe até mandou um email perguntando o que havia acontecido:

É isso, não sei dizer detalhadamente oque aconteceu, mas creio que agora não irá acontecer de novo.

E Filipe, mais uma vez, obrigado pela compreensão e perdão pelo transtorno 😅

Digam ai, já tiveram algum problema parecido?

Carregando publicação patrocinada...
3

Sensacional vadolasi obrigado pelos detalhes! E sobre a API, não se preocupe, o TabNews deverá ser sempre um lugar seguro para pessoas implementarem seus experimentos, e disso naturalmente algumas falhas irão aparecer, mas o mais importante é aprendermos com elas 🤝

2

Realmente, um artigo bom de se ler nessa plataforma :D

Mas devo dar os parabéns, tanto ao @vadolasi quanto ao @filipedeschamps pela atitude profissional de ambos.

Pelo fato de deixar público o ocorrido, com o máximo de detalhes e sem nenhuma vergonha (até porque não precisa).

E também pelo fato de ser prestativo em informar a posição da plataforma sobre o ocorrido de maneira rápida e efetiva.

se ficou confuso, coloquei respectivamente o porquê dos parabens a ambos

2

Este é o mais genuino entretenimento! hahahahahaha. Eu estava prestes a fazer um post de que estavamos há alguns dias sem incidentes rs. Eu amo a efervescência desse lugar. Eu estou acompanhando o seu projeto de um cli para o tabnews e pretendo usa-lo assim que instalar linux na minha maquina com um gestor de janelas charmoso. Espero que consiga descobrir a fundo o que ocorreu, boa venturança na sua jornada.