# Compatibilidade entre o Azion Runtime e Node.js APIs

import DocButton from '~/components/webkit/DocButton.vue';

## Node built-in

A compatibilidade entre o **Azion Runtime** e **Node.js** é um trabalho em andamento, mas um conjunto de APIs do **Node Runtime** já é compatível com o Azion Runtime. A seguinte lista de APIs pode ser importada dentro das [functions](/pt-br/documentacao/produtos/guias/edge-functions/primeiros-passos/) com a sintaxe de importação padrão:

```js
import { API } from "import-origin";
```

| API | Nível de suporte | Exemplo de código | Comentários |
|---------|---------------|----------|-------------|
| async_hooks | 🟡  Parcialmente suportada | [Acessar o exemplo de código](https://github.com/aziontech/azion-samples/tree/dev/samples/node-async-hooks) | Apenas [AsyncLocalStorage](https://nodejs.org/api/async_context.html#class-asynclocalstorage) e [AsyncResource](https://nodejs.org/api/async_hooks.html#class-asyncresource) estão implementadas. |
| fs | 🟡  Parcialmente suportada | | Apenas métodos assíncronos ([confira a lista abaixo](#fs-support)), outros através de [polyfills](#node-polyfills). |
| module | 🟡  Parcialmente suportada | | |
| process.env | 🟢 Suportada Suporte completo | `process.env.VAR_NAME`| Outros recursos suportados através de polyfills ([confira a tabela abaixo](#node-polyfills)). |
| url | 🟡  Parcialmente suportada | | Apenas os globais `URL` e `URLSearchParams`. |

### Suporte ao Módulo FileSystem (FS)

O Azion Runtime oferece suporte nativo para o módulo FileSystem (FS), permitindo que você interaja com o sistema de arquivos dentro de suas functions.

Async:

| Método                          | Parâmetros                                   | Descrição                                           |
|---------------------------------|----------------------------------------------|-----------------------------------------------------|
| `fs.lstat`                      | `path`, `options` (opcional), `callback`   | Obtém informações sobre o arquivo ou diretório.     |
| `fs.mkdir`                      | `path`, `options` (opcional), `callback`   | Cria um diretório.                                 |
| `fs.stat`                       | `path`, `options` (opcional), `callback`   | Obtém informações sobre o arquivo ou diretório.     |
| `fs.writeFile`                 | `file`, `data`, `options` (opcional), `callback` | Grava dados em um arquivo.                          |
| `fs.readFile`                  | `path`, `options` (opcional), `callback`   | Lê o conteúdo de um arquivo.                        |
| `fs.readdir`                   | `path`, `options` (opcional), `callback`   | Lê o conteúdo de um diretório.                      |
| `fs.writeFileSync`             | `file`, `data`, `options` (opcional)       | Grava dados em um arquivo de forma síncrona.       |
| `fs.rename`                     | `oldPath`, `newPath`, `callback`           | Renomeia um arquivo ou diretório.                   |
| `fs.realpath`                  | `path`, `options` (opcional), `callback`   | Resolve o caminho absoluto de um arquivo.           |
| `fs.copyFile`                  | `src`, `dest`, `mode` (opcional), `callback` | Copia um arquivo.                                   |
| `fs.cp`                        | `src`, `dest`, `options` (opcional), `callback` | Copia arquivos e diretórios.                        |
| `fs.read`                      | `fd`, `buffer`, `offset`, `length`, `position`, `callback` | Lê dados de um arquivo.                             |
| `fs.read`                      | `fd`, `buffer`, `options` (opcional), `callback` | Lê dados de um arquivo.                             |
| `fs.read`                      | `fd`, `options` (opcional), `callback`     | Lê dados de um arquivo.                             |
| `fs.rmdir`                     | `path`, `options` (opcional), `callback`   | Remove um diretório.                                |
| `fs.utimes`                    | `path`, `atime`, `mtime`, `callback`       | Atualiza os tempos de acesso e modificação de um arquivo. |

---

## APIs Node suportadas através de polyfills

Um polyfill é um trecho de código, frequentemente usado em JavaScript, que traz novos recursos para ambientes que não possuem essas capacidades. Os polyfills são usados durante o tempo de *build* e podem ser configurados através do arquivo [azion.config.js](/pt-br/documentacao/devtools/cli/configs/azion-config-js/).

A tabela abaixo contém a compatibilidade dos módulos Node.Js resolvidos com polyfills.

**Legenda de status:**

- 🟢 **Suportada**: a API funciona normalmente em tempo de execução.
- 🟡 **Parcialmente suportada**: apenas alguns métodos ou funcionalidades estão disponíveis.
- 🔴 **Somente para build**: o módulo é incluído para que o processo de build seja concluído sem erros, mas as chamadas à API não funcionam em tempo de execução.

:::note[Sobre o ambiente de execução Azion Cells]
As functions na Azion são executadas dentro de **Cells**, um ambiente de isolamento baseado em **V8 Isolates**. Cada Cell é um contexto de execução leve e seguro, sem acesso direto ao sistema operacional subjacente.

Por razões de segurança multilocatário e integridade da infraestrutura, as Cells não permitem:

- Acesso a propriedades do sistema operacional (como hostname, plataforma ou informações de CPU/memória via `node:os`).
- Resolução de DNS via chamadas de sistema nativas (`node:dns`, `node:dns/promises`).
- Criação de sockets TCP/UDP de baixo nível que exijam syscalls diretas.

Módulos marcados como 🔴 **Somente para build** são incluídos como stubs para garantir que pacotes NPM com dependências estáticas nesses módulos possam ser compilados. As chamadas a esses módulos em runtime não produzem resultados e podem retornar valores padrão ou lançar erros silenciosos.
:::

| Module                | Status |
|-----------------------|--------|
| _http_agent           | 🟡  Parcialmente suportada     |
| _http_client          | 🟡  Parcialmente suportada     |
| _http_common          | 🟡  Parcialmente suportada     |
| _http_incoming        | 🟡  Parcialmente suportada     |
| _http_outgoing        | 🟡  Parcialmente suportada     |
| _http_server          | 🟡  Parcialmente suportada     |
| _stream_duplex        | 🟡  Parcialmente suportada     |
| _stream_passthrough   | 🟡  Parcialmente suportada     |
| _stream_readable      | 🟡  Parcialmente suportada     |
| _stream_transform      | 🟡  Parcialmente suportada     |
| _stream_wrap          | 🟡  Parcialmente suportada     |
| _stream_writable      | 🟡  Parcialmente suportada     |
| _tls_common           | 🟡  Parcialmente suportada     |
| _tls_wrap             | 🟡  Parcialmente suportada     |
| [assert](#)          | 🟡  Parcialmente suportada    |
| assert/strict         | 🟡  Parcialmente suportada     |
| [async_hooks](/pt-br/documentacao/produtos/devtools/azion-edge-runtime/compatibilidade/node/async-hooks/)     | 🟢 Suportada     |
| [buffer](/pt-br/documentacao/produtos/devtools/azion-edge-runtime/compatibilidade/node/buffer/)          | 🟡  Parcialmente suportada    |
| child_process    | 🟡  Parcialmente suportada    |
| cluster          | 🟢 Suportada     |
| console          | 🟢 Suportada     |
| constants        | 🟢 Suportada     |
| [crypto](/pt-br/documentacao/produtos/devtools/azion-edge-runtime/compatibilidade/node/crypto/)          | 🟡  Parcialmente suportada    |
| dgram           | 🟢 Suportada     |
| diagnostics_channel | 🟢 Suportada     |
| dns             | 🔴  Somente para build     |
| dns/promises    | 🔴  Somente para build     |
| domain          | 🟢 Suportada     |
| [events](/pt-br/documentacao/produtos/devtools/azion-edge-runtime/compatibilidade/node/events/)          | 🟢 Suportada     |
| [fs](/pt-br/documentacao/produtos/devtools/azion-edge-runtime/compatibilidade/node/fs/)              | 🟡  Parcialmente suportada    |
| fs/promises     | 🟡  Parcialmente suportada     |
| [http](/pt-br/documentacao/produtos/devtools/azion-edge-runtime/compatibilidade/node/http/)            | 🟡  Parcialmente suportada    |
| http2           | 🟡  Parcialmente suportada    |
| https           | 🟡  Parcialmente suportada    |
| inspector       | 🟢 Suportada     |
| inspector/promises    | 🟡  Parcialmente suportada     |
| [module](/pt-br/documentacao/produtos/devtools/azion-edge-runtime/compatibilidade/node/module/)          | 🟡  Parcialmente suportada    |
| net             | 🟡  Parcialmente suportada    |
| [os](/pt-br/documentacao/produtos/devtools/azion-edge-runtime/compatibilidade/node/os/)              | 🔴  Somente para build     |
| [path](/pt-br/documentacao/produtos/devtools/azion-edge-runtime/compatibilidade/node/path/)            | 🟢 Suportada     |
| path/posix            | 🟡  Parcialmente suportada     |
| path/win32           | 🟡  Parcialmente suportada     |
| perf_hooks     | 🟢 Suportada     |
| [process](/pt-br/documentacao/produtos/devtools/azion-edge-runtime/compatibilidade/node/process/)         | 🟡  Parcialmente suportada    |
| punycode             | 🟡  Parcialmente suportada     |
| querystring          | 🟡  Parcialmente suportada     |
| readline        | 🟢 Suportada     |
| readline/promises | 🟢 Suportada     |
| repl                  | 🟡  Parcialmente suportada     |
| [stream](/pt-br/documentacao/produtos/devtools/azion-edge-runtime/compatibilidade/node/stream/)          | 🟡  Parcialmente suportada    |
| stream/consumers      | 🟡  Parcialmente suportada     |
| stream/promises       | 🟡  Parcialmente suportada     |
| stream/web           | 🟢 Suportada     |
| [string_decoder](/pt-br/documentacao/produtos/devtools/azion-edge-runtime/compatibilidade/node/string-decoder/)  | 🟢 Suportada     |
| sys                   | 🟡  Parcialmente suportada     |
| [timers](/pt-br/documentacao/produtos/devtools/azion-edge-runtime/compatibilidade/node/timers/)          | 🟡  Parcialmente suportada    |
| timers/promises | 🟢 Suportada     |
| tls             | 🟡  Parcialmente suportada    |
| trace_events    | 🟢 Suportada     |
| tty             | 🟢 Suportada     |
| [url](/pt-br/documentacao/produtos/devtools/azion-edge-runtime/compatibilidade/node/url/)             | 🟢 Suportada     |
| [util](/pt-br/documentacao/produtos/devtools/azion-edge-runtime/compatibilidade/node/utils/)            | 🟡  Parcialmente suportada    |
| util/types           | 🟡  Parcialmente suportada     |
| v8              | 🟢 Suportada     |
| [vm](/pt-br/documentacao/produtos/devtools/azion-edge-runtime/compatibilidade/node/vm/)              | 🟢 Suportada     |
| wasi            | 🟢 Suportada     |
| worker_threads  | 🟡  Parcialmente suportada    |
| [zlib](/pt-br/documentacao/produtos/devtools/azion-edge-runtime/compatibilidade/node/zlib/)            | 🟢 Suportada     |