New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

@crawly/proxy-log-request-client

Package Overview
Dependencies
Maintainers
6
Versions
7
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@crawly/proxy-log-request-client

A awesome project

  • 1.0.6
  • latest
  • npm
  • Socket score

Version published
Maintainers
6
Created
Source

proxy-log-request-client

Este projeto tem o objetivo de disponibilizar um plugin que irá fazer um log das requisições em nossa biblioteca request-client.

Instalando

Instalando o projeto:

npm i --save @crawly/proxy-log-request-client

Sobre o projeto

A biblioteca divide as funcionalidades em 2 grupos: Loggers e Transports. Os transports são as classses responsáveis por enviar a informação para algum lugar, cada transport envia a informação apenas para um lugar, essa informação é recebida de um logger. Os logger são as classes responsáveis por obter as informações e enviá-las, quando necessário, para os transports. Exemplificando, a comunicação poderia ser algo como: Temos um logger que obtem as informações apenas quando as requisições derem erro e um transport que envia para o redis, então quando a requisição resultar em erro, o logger obtém as informações do proxy e envia para o transport, que por sua vez irá armazenar a informação no redis. Obviamente, os transports e os loggers praticamente não são correlacionados, então você pode usar qualquer transport para qualquer logger.

Atualmente temos 5 informações que são armazenadas, sendo:

  1. A mensagem informada ao instanciar o logger;
  2. O nível da informação que é definida pelo objetivo do logger, sendo: error ou info;
  3. O IP que o Proxy disponibilizou (que o alvo recebe);
  4. O Proxy definido na função .proxy() na lib de request;
  5. O IP externo da maquina que o serviço está rodando, obtido na URL http://ipv4bot.whatismyipaddress.com/.

Todas essas 5 informações são armazenadas em JSON com a seguinte estrutura:

{
  "message": "",
  "level": "info",
  "proxyIp": "",
  "proxy": "",
  "externalIp": ""
}

É importante saber também que o Proxy definido na lib de request, caso tenha alguma senha, ela será mascarada por asteriscos, por exemplo:

Se temos http://username:password@zproxy.lum-superproxy.io:22225, o resultado será: http://username:********@zproxy.lum-superproxy.io:22225.

Basicamente você irá utilizar um logger baseado na situação que você quer que seja logado (sucesso ou erro) com os transports que representam onde a informação será disponibilizada (redis, console, etc.).

Como utilizar

Loggers disponíveis:

  • SuccessLogger
  • ErrorLogger

Transports disponíveis:

  • RedisTransport
  • ConsoleTransport

Para se utilizar, basta instanciar um Logger, informando a mensagem que será logada e os transports que serão utilizados:

import { Request } from '@crawly/request-client';
import { SuccessLogger, RedisTransport, ConsoleTransport } from '@crawly/proxy-log-request-client';

new Request()
    .queryString({
        format: 'json'
    })
    .proxy('10.10.10.10')
    .use((new SuccessLogger('Ipify Success', [ new RedisTransport(), new ConsoleTransport() ])).install())
    .get('https://api.ipify.org/')

Atenção: O log só irá funcionar se a requisição onde a biblioteca for instalada estiver utilizando um proxy e se o ambiente estiver com a váriavel de ambiente PROXY_LOG_IS_ENABLED com o valor true.

Para desabilitar os logs por váriavel de ambiente, basta definir PROXY_LOG_IS_ENABLED com o valor false.

Mensagem do Logger

A mensagem que será informada no logger pode conter algumas expressões que podem ser sobreescrevidas para detalhar melhor o log. As expressões disponíveis:

  • {proxyIp} será substituído pelo IP que o Proxy disponibilizou (que o alvo recebe);
  • {externalIp} será substituído pelo IP externo da maquina que o serviço está rodando, obtido na URL http://ipv4bot.whatismyipaddress.com/;
  • {proxy} será substituído pelo proxy definido ao se utilizar a biblioteca de rquests.

Então se tivermos uma mensagem como:

Requisição feita com o {proxy} que disponibilizou o IP {proxyIp} na maquina com o IP externo {externalIp}

O resultado seria algo assim (exemplo):

Requisição feita com o 10.10.10.10 que disponibilizou o IP 186.20.37.40 na maquina com o IP externo 200.30.63.102

SuccessLogger

Esse logger é responsável por armazenar toda vez que uma requisição for concluída com sucesso, inclusive em retentativas (.retry()). Caso o site que foi requisitado responda com algo que a lib de request entenda que é um erro, a informação não será armazenada.

O logger está disponível com a classe SuccessLogger:

import { SuccessLogger } from '@crawly/proxy-log-request-client'

ErrorLogger

Esse logger é responsável por armazenar toda vez que uma requisição falhar, inclusive em retentativas (.retry()). Caso o site que foi requisitado responda com algo que a lib de request entenda que é um erro, a informação será armazenada.

O logger está disponível com a classe ErrorLogger:

import { ErrorLogger } from '@crawly/proxy-log-request-client'

RedisTransport

Esse transport é responsável por armazenar a informação no redis.

É possível informar algumas opções ao instanciar a classe, mas esses valores não são obrigatórios pois caso não informados, eles tem valores padrões. Além disso, caso você não forneça os valores ao instanciar a classe, pode ser possível definir esses valores globalmente pelas váriaveis de ambiente. Os valores são:

  • host é o IP onde o servidor do redis está, por padrão o valor é localhost e pode ser informado também pela váriavel de ambiente LOG_REDIS_HOST;
  • port é a porta usada para se conectar ao redis, por padrão o valor é 6379 e pode ser informado também pela váriavel de ambiente LOG_REDIS_PORT;
  • container é a chave da lista onde será armazenado os logs, por padrão o valor é proxy e pode ser informado também pela váriavel de ambiente LOG_REDIS_CONTAINER.

O transport está disponível com a classe RedisTransport:

import { RedisTransport } from '@crawly/proxy-log-request-client'

ConsoleTransport

Esse transport é responsável por disponibilizar a informação no console.

O transport está disponível com a classe ConsoleTransport:

import { ConsoleTransport } from '@crawly/proxy-log-request-client'

FAQs

Package last updated on 10 Aug 2020

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc