# Bibliotecas disponíveis

## Introdução

Trabalhar em um ambiente seguro e isolado é essencial para garantir a eficiência, especialmente ao explorar os workspaces do Floui. Nessas situações, ter acesso a bibliotecas nativas ou externas da sua linguagem de preferência pode ser um diferencial significativo, economizando tempo no desenvolvimento de fluxos de integração e reduzindo o esforço técnico necessário.

Neste artigo, vamos apresentar as principais bibliotecas internas e externas para Node.js e Python, destacando como elas podem ser utilizadas de maneira prática e eficiente para otimizar os projetos de integração da sua equipe.

## **Versão instalada**

Os workspaces no Floui são configurados com suporte às linguagens Node.js v18 e Python 3.11 através de conectores de funçõe, suportados por imagens Docker otimizadas com base na distribuição Alpine Linux.&#x20;

{% hint style="success" %}
A versão **Alpine** é uma distribuição Linux conhecida por ser leve, minimalista e segura, ideal para ambientes de contêineres e aplicações que priorizam eficiência, favorecendo cenários com a redução de consumo de recursos e o tempo de inicialização.
{% endhint %}

## Node.js 18

### Bibliotecas nativas

Estas bibliotecas fazem parte do Node.js e não exigem instalação adicional ou importação no conector Function JavaScript.

* **Crypto:** biblioteca para operações criptográficas como hashing e geração de chaves. Aplicada em segurança, encriptação de dados.
* **Buffer:** utilizado para manipulação de dados binários. Comumente usada com trabalhos em arquivos, sockets e streams.
* **FormData:** classe para criar e manipular dados de formulários. Usada no envio de arquivos e dados de requisições HTTP.
* **URLSearchParams:** classe para lidar com parâmetros de URLs. Gerar, parsear ou modificar query strings.
* [**fetch**](#user-content-fn-1)[^1]**:** API para realizar requisições HTTP de forma nativa. Utilizada em requisições REST e chamadas de APIs.

### Bibliotecas externas

Bibliotecas externas requerem o uso da propriedade *require* e podem ser usadas na função reservada do Floui, a *handler(msg)*.

* **cheerio:** biblioteca para manipulação de HTML e scraping. Aplicada no parseamento de HTML e extração de dados de páginas web.
* **lodash:** uma biblioteca utilitária para manipulação de arrays, objetos e outros tipos de dados.  Usada na clonagem, ordenação, filtragem, agrupamento, entre outros.
* **underscore:** outra biblioteca utilitária similar ao lodash, com foco em simplicidade. Aplicada no processo de manipulação de coleções, arrays e objetos.
* **oauth-1.0a:** implementação de OAuth 1.0a. Aplicado na autenticação de usuários em sistemas que utilizam OAuth 1.0a.

{% hint style="info" %}
**Dica de Segurança:** Ao implementar o OAuth 1.0a, é fundamental seguir as melhores práticas de segurança para mitigar vulnerabilidades conhecidas. Certifique-se de que todas as requisições sejam assinadas corretamente e utilize tokens de acesso com validade limitada. Além disso, considere a migração para o OAuth 2.0, que oferece melhorias significativas em segurança e flexibilidade.
{% endhint %}

* **axios:** biblioteca para realizar requisições HTTP. Comunicação com APIs e servidores.
* **fast-json-stable-stringify:** serializador JSON que mantém a ordem das chaves estável. Usado ao criar strings JSON determinísticas (útil em assinaturas digitais).
* **moment:** biblioteca para manipulação e formatação de datas e horários. Trabalha com fusos horários, cálculos de tempo, e exibição de datas amigáveis.
* **slug:** utilitário para gerar slugs amigáveis de URLs a partir de strings. Transformar "Exemplo de título" em "exemplo-de-titulo".
* **openai:** biblioteca oficial para integrar com APIs da OpenAI. Gerenciar modelos como GPT, DALL-E, etc.&#x20;

{% hint style="info" %}
A biblioteca OpenAI está **disponível a partir da release 1.6.0**. Em caso de dúvidas, contate a nossa equipe comercial ou entre em contato com os nossos canais de suporte.
{% endhint %}

## Python 3.11

### Bibliotecas externas

* **FirebirdSQL:** biblioteca que fornece suporte para interagir com o banco de dados **Firebird**.\
  Permite executar comandos SQL, gerenciar transações e configurar conexões.

## Exemplos de uso

As bibliotecas disponíveis podem ser consumidas através do conector Function Javascript ou Python, utilizando a função reservada *handler( )* para manipular o objeto msg da execução do fluxo. Veja alguns exemplos abaixo.

{% hint style="warning" %}
Apenas a função reservada handler(msg) possui permissão para manipular o objeto msg gerado pelo contexto de cada execucão do fluxo de integração no Floui. Saiba mais em [Introdução ao fluxo](/guia/docs/introducao-ao-fluxo.md#object-message).&#x20;
{% endhint %}

#### Bibliotecas externas em Javascript

```javascript
const axios = require('axios');

async function handler(msg) {
    try {
        // Realiza uma requisição GET para uma API externa
        const response = await axios.get('https://api.exemplo.com/dados');

        // Adiciona os dados obtidos ao objeto msg
        msg.dadosExternos = response.data;
    } catch (error) {
        // Em caso de erro, adiciona a mensagem de erro ao objeto msg
        msg.erro = error.message;
    }

    return msg;
}
```

#### Bibliotecas ou funções nativas no Node.js

```javascript
async function handler(msg) {
    // Supondo que msg contenha um objeto com dados que deseja converter em query string
    const dados = {
        nome: 'João',
        idade: 30,
        cidade: 'Curitiba'
    };

    // Cria uma instância de URLSearchParams com os dados
    const params = new URLSearchParams(dados);

    // Converte os parâmetros para uma string de consulta
    const queryString = params.toString();

    // Adiciona a query string ao objeto msg
    msg.queryString = queryString;

    return msg;
}
```

Saiba mais sobre contextos de execução e funções reservadas do Floui em [Function Javascript](/guia/conectores/categorias/conectores-essenciais/function-javascript.md).

[^1]:


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.floui.io/guia/artigos/bibliotecas-disponiveis.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
