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

@crawly/proxy

Package Overview
Dependencies
Maintainers
6
Versions
14
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@crawly/proxy

Proxy loader/parser

  • 1.0.0
  • latest
  • npm
  • Socket score

Version published
Maintainers
6
Created
Source

@crawly/grasshopper-lib-proxy

Está biblioteca tem como objetivo gerenciar as configurações de proxy utilizadas nos projetos.

Utilização

Instalação

npm install @crawly/proxy

Valores padrão

Os valores abaixo são hardcoded, mas podem ser sobrescritos conforme a necessidade.

  • PROXY_LIST: nome da variável de ambiente para a lista de proxies;
  • PROXY_TUNNEL: nome da variável de ambiente para a configuração tunnel;
  • PROXY_DYNAMIC: nome da variável de ambiente que deverá conter a URL para requisição em proxies obtidas de forma dinamica;

Como funciona

A biblioteca segue o padrão Builder, adicionando as configurações ao contexto, e ao chamar o método .getInstance() é retornada a proxy atual.

import { ProxyBuilder } from '@crawly/proxy';

const proxy = await (new ProxyBuilder())
  .withProxyList()
  .withRandomToken()
  .withRandomInstance()
  .getInstance();

Utilizando com uma variável de ambiente customizada

Para utilizar uma variável de ambiente diferente de PROXY_LIST, basta fazer uma chamada ao método .withKey(key: string) informando o nome da nova variável de ambiente.

const proxy = await (new ProxyBuilder())
  .withKey('PROXY_LIST_GOL')
  .withProxyList()
  .withRandomToken()
  .withRandomInstance()
  .getInstance();

Utilizando com uma lista de proxies pré-definida

Para utilizar uma lista de proxies, sobrescrevendo a configuração da variável de ambiente PROXY_LIST, basta informar as proxies desejadas na chamada do método .withProxyList(proxies). O parâmetro deve ser uma string separada por vírgulas, semelhante ao formato utilizado para a variável de ambiente.

const proxyList = 'http://proxy1.com:2222'
  + ',http://proxy2.com:3333'
  + ',http://proxy3.com:5555'
  + ',http://proxy4.com:2289';

const proxy = await (new ProxyBuilder())
  .withProxyList(proxyList)
  .withRandomToken()
  .withRandomInstance()
  .getInstance();

Utilizando proxy com configuração dinâmica

A configuração dinâmica consiste em fazer uma requisição a um endpoint pré-definido, que deverá retornar um objeto contendo as informações: username, password, hostname, port.

Para utilizar a configuração dinâmica, o valor da variável de ambiente PROXY_LIST precisa estar definido como DYNAMIC. O endpoint a ser requisitado precisa estar definido na variável de ambiente PROXY_DYNAMIC, conforme exemplo abaixo.

PROXY_LIST=DYNAMIC
PROXY_DYNAMIC=http://exemplo.com
const proxy = await (new ProxyBuilder())
  .withProxyList()
  .withRandomToken()
  .withRandomInstance()
  .getInstance();

NOTA: Assim como podemos utilizar uma variável de ambiente diferente para a lista de proxies, podemos utilizar o método .withDynamicKey(key) para redefinir a variável de ambiente que contém o endpoint para a proxy dinâmica.

Obter metadados da instância atual de proxy

Ao utilizar o método .getMetadata(), será retornado um objeto contendo as informações da instancia atual de proxy, conforme exemplo.

const proxyList = `http://sb7257jvigmyz0:sb7257jvigmyz1@hostname.com:2222`;

const proxyData = await (new ProxyBuilder())
  .withProxyList(proxyList)
  .withRandomToken()
  .withRandomInstance()
  .getMetadata();

Retorno:

{
  username: 'sb7257jvigmyz0',
  password: 'sb7257jvigmyz1',
  hostname: 'hostname.com',
  protocol: 'http',
  port: '2222'
}

Sobrescrever o valor da instância atual de proxy

Ver utilização da função proxyOverride.

Métodos

.withKey(key: string): Proxy

Utilizado para redefinir o nome da variável de ambiente a ser utilizada para a lista de proxies.

NOTA: ver utilizando com uma variável de ambiente customizada.

.withDynamicKey(key: string): Proxy

Utilizado para redefinir o nome da variável de ambiente a ser utilizada para a lista de proxies.

const proxy = await (new ProxyBuilder())
  .withKey('PROXY_LIST_GOL')
  .withDynamicKey('PROXY_DYNAMIC_GOL')
  .withProxyList()
  .withRandomToken()
  .withRandomInstance()
  .getInstance();

.withTunnelKey(key: string): Proxy

Utilizado para redefinir o nome da variável de ambiente a ser utilizada para definir se a configuração tunnel estará habilitada nas requisições.

const proxyTunnel = await (new ProxyBuilder())
  .withTunnelKey('PROXY_TUNNEL_GOL')
  .getTunnel();

.withRandomToken(): Proxy

Define o token randômico para ser concatenado ao nome de usuário da proxy atual, conforme a documentação das proxies: É possível adicionar flags ao Username, como -session-<string> para manter sticky ips.

.withProxyList(list?: string): Proxy

Define a lista de proxies que será utilizada. Por padrão, o valor é obtido a partir da variável de ambiente PROXY_LIST, ou utilizando o parametro recebido (string de elementos separados por vírgulas).

A lista de proxies informada por parâmetro, tem maior prioridade sobre a variável de ambiente PROXY_LIST.

.withProxyDynamic(url?: string): Proxy

Define a URL que será utilizada para obter a proxy dinâmica. Por padrão, o valor é obtido a partir da variável de ambiente PROXY_DYNAMIC, ou utilizando o parametro recebido (string).

A URL informada por parâmetro tem maior prioridade sobre a variável de embiente PROXY_DYNAMIC.

.withRandomInstance(): Proxy

Define, de forma randômica, qual item da lista de proxies será utilizada para a instância atual.

.getRandomToken(): string

Retorna o valor do token utilizado pela intancia de proxy atual.

const builder = new ProxyBuilder();
const proxy = await builder
  .withProxyList()
  .withRandomToken()
  .withRandomInstance()
  .getInstance();
const token = builder.getRandomToken();

.getDynamicInstance(): Promise

Retorna uma instância de proxy conforme a requisição feita para um endpoint externo.

Este método é chamado internamente de .getInstance() quando o valor da variável de ambiente PROXY_LIST for igual a DYNAMIC, mas pode ser chamado diretamente.

const proxy = (new ProxyBuilder())
  .getDynamicInstance();

.getInstance(): Promise

Método final do Builder, retorna uma promise com a string final da proxy atual.

const proxy = await (new ProxyBuilder())
  .withProxyList()
  .withRandomInstance()
  .getInstance();

.getTunnel(): boolean | undefined

Retorna o valor atual da variável de ambiente PROXY_TUNNEL, ou variável redefinida pelo método .withTunnelKey(key;

const proxyTunnel = await (new ProxyBuilder())
  .getTunnel();

.getProxyList(): string[]

Retorna a lista de proxies conforme o valor definido na variável de ambiente, ou valor redefinido pelo metódo .withProxyList(list).

const proxyList = await (new ProxyBuilder())
  .withProxyList()
  .getProxyList();

.getMetadata(url?: string): Promise

Método final do Builder, retorna uma promise que contém os dados da instância de proxy atual.

Ver obter metadados da instância atual de proxy.

proxyOverride(event: any): void

Função utilizada para sobrescrever o valor das variáveis de ambiente relacionadas à proxy atual.

Recebe como parametro um objeto, que pode ser um event quando usado com lambda, ou uma request quando usado com express.

A função busca pela variável de ambiente contendo o prefixo PROXY_LIST, se o header contiver uma propriedade correspondente X-PROXY_LIST, o valor da variável de ambiente será redefinido.

Ex.: se existe uma variável de ambiente PROXY_LIST_GOL, a função irá procurar no header a propriedade X-PROXY_LIST_GOL.

// lambda
export const lambda: Handler = async (event: any, context: Context, callback: Callback) => {
  proxyOverride(event);
  ...
}
// express
const searchHandler = async (req: Request, res: Response): Promise<void> => {
  proxyOverride(req);
  ...
}

Keywords

FAQs

Package last updated on 12 Feb 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