---
url: 'https://dxpr.com/pt-pt/hc/documentacao/aprender-dxpr-builder/primeiros-passos/atras-de-uma-firewall'
title: 'Firewall e residência dos dados | DXPR'
author:
  name: Jurriaan
  url: 'https://dxpr.com/users/jurriaan'
date: '2026-10-24T14:10:05+00:00'
updated: '2026-10-24T20:03:43+00:00'
copyright: 'Copyright DXPR. All rights reserved.'
type: article
summary: 'O DXPR Builder guarda as suas páginas na sua própria base de dados Drupal. Contacta os serviços DXPR para verificações de licença, recursos do editor e pedidos de IA. Esta página lista cada ligação, o que cada uma transporta, onde correm os modelos DXAI Kavya, como a chave de produto é guardada e o que funciona quando o acesso de saída é restrito.'
tags:
  - 'Meet compliance requirements'
image: 'https://dxpr.com/themes/custom/dxpr_com/images/dxpr-share-card.jpg'
published: true
og:
  site_name: DXPR
  updated_time: '2026-10-24T20:03:43+0000'
  'image:alt': 'DXPR, powered by Drupal: AI-powered Drupal for marketers.'
schema:
  '@context': 'https://schema.org'
  '@graph':
    -
      mainEntity: {  }
    -
      '@type': TechArticle
      headline: 'Firewall e residência dos dados'
      description: 'O DXPR Builder guarda as suas páginas na sua própria base de dados Drupal. Contacta os serviços DXPR para verificações de licença, recursos do editor e pedidos de IA. Esta página lista cada ligação, o que cada uma transporta, onde correm os modelos DXAI Kavya, como a chave de produto é guardada e o que funciona quando o acesso de saída é restrito.'
      image:
        '@type': ImageObject
        url: 'https://dxpr.com/themes/custom/dxpr_com/images/dxpr-share-card.jpg'
        width: '1200'
        height: '630'
      datePublished: '2026-10-24T14:10:05+0000'
      dateModified: '2026-10-24T20:03:43+0000'
      author:
        '@type': Organization
        '@id': 'https://dxpr.com/#organization'
        name: DXPR
        url: 'https://dxpr.com/'
        logo:
          '@type': ImageObject
          url: 'https://dxpr.com/themes/custom/dxpr_com/dxpr-logo-dark.svg'
          width: '1348'
          height: '501'
      publisher:
        '@type': Organization
        '@id': 'https://dxpr.com/#organization'
        name: DXPR
        url: 'https://dxpr.com/'
        logo:
          '@type': ImageObject
          url: 'https://dxpr.com/themes/custom/dxpr_com/dxpr-logo-dark.svg'
          width: '1348'
          height: '501'
      mainEntityOfPage: 'https://dxpr.com/pt-pt/hc/documentacao/aprender-dxpr-builder/primeiros-passos/atras-de-uma-firewall'
      articleSection: 'Cumprir requisitos legais'
    -
      '@type': WebPage
      '@id': 'https://dxpr.com/pt-pt/hc/documentacao/aprender-dxpr-builder/primeiros-passos/atras-de-uma-firewall'
      description: 'O DXPR Builder guarda as suas páginas na sua própria base de dados Drupal. Contacta os serviços DXPR para verificações de licença, recursos do editor e pedidos de IA. Esta página lista cada ligação, o que cada uma transporta, onde correm os modelos DXAI Kavya, como a chave de produto é guardada e o que funciona quando o acesso de saída é restrito.'
      breadcrumb:
        '@type': BreadcrumbList
        itemListElement:
          -
            '@type': ListItem
            position: 1
            name: Início
            item: 'https://dxpr.com/pt-pt'
      publisher:
        '@type': Organization
        '@id': 'https://dxpr.com/#organization'
        name: DXPR
      inLanguage: pt-pt
---
[Centro de ajuda](/pt-pt/node/75)/[Documentação](/pt-pt/hc/documentacao) /[Aprender DXPR Builder](/pt-pt/hc/documentation/learn-dxpr-builder) /[Gerir o site](/pt-pt/hc/documentation/learn-dxpr-builder/manage) /[Cumprir requisitos legais](/pt-pt/hc/documentation/learn-dxpr-builder/manage/compliance) # Firewall e residência dos dados.

 Aprender DXPR BuilderGerir o siteCumprir requisitos legais

   ## Neste guia

 Guias relacionados

- [Instale o DXPR Builder no seu site Drupal](/pt-pt/hc/documentacao/aprender-dxpr-builder/primeiros-passos/instalacao)
- [Segurança](/pt-pt/hc/documentacao/aprender-dxpr-builder/avancado/seguranca)
- [Erros de licença e chave de produto](/pt-pt/hc/documentacao/aprender-dxpr-builder/resolucao-de-problemas/licenca-e-chave-de-produto)

O DXPR Builder guarda as suas páginas na sua própria base de dados Drupal. Contacta os serviços DXPR para verificações de licença, recursos do editor e pedidos de IA. Esta página lista cada ligação, o que cada uma transporta, onde correm os modelos DXAI Kavya, como a chave de produto é guardada e o que funciona quando o acesso de saída é restrito.

## Ligações em resumo

| Anfitrião | Feita por | Finalidade | Necessária para |
|---|---|---|---|
| `dxpr.com` | Servidor Drupal | Estado de licença, verificação de domínio, sincronização de utilizadores licenciados | Edição |
| `cdn2.dxpr.com` | Navegador do editor | JavaScript e CSS do editor (principal) | Edição |
| `cdn.dxpr.com` | Navegador do editor | JavaScript e CSS do editor (alternativo) | Edição |
| `kavya.dxpr.com` | Servidor Drupal | Pedidos de IA e saldo de créditos de IA | Funcionalidades de IA |
| `html-extract.dxpr.com` | Navegador do editor | IA "clonar a partir de URL" | Funcionalidades de IA |
| `r.jina.ai` (terceiros) | Navegador do editor | Lê páginas web cujos URLs aparecem numa pergunta | Funcionalidades de IA |
| `tuur.dxpr.com` | Navegador do editor | Análise de utilização do editor | Opcional |

Todas as ligações usam HTTPS na porta 443. Os visitantes do site nunca carregam nada dos servidores DXPR: as páginas publicadas são apresentadas a partir de HTML guardado na base de dados, e o script público (`dxpr_builder/dxpr_frontend.min.js`) vem dentro do módulo. `app.dxpr.com` aparece só em ligações mostradas a administradores.

## Verificações de licença (`dxpr.com`)

O servidor Drupal chama quatro endpoints definidos em `src/Service/DxprBuilderLicenseServiceInterface.php`, cada um com a chave de produto como cabeçalho `Authorization: Bearer`.

| Endpoint | Quando | Dados enviados |
|---|---|---|
| `GET /api/user-license` | De 24 em 24 horas quando autorizado, de 30 em 30 minutos quando não | `gba` e `users_tier` (número de contas com a permissão `edit with dxpr builder` e o escalão correspondente), `values_count` (itens de conteúdo com campo de construtor), `site_base_url`, `site` (um HMAC do salt de hash do site; o salt não é enviado), `site_mail` (de `system.site`), `project`, `version` |
| `GET /api/domain-blacklist/{hostname}` | De hora a hora | Só o nome de anfitrião; sem cabeçalho de autorização |
| `POST /api/central-user-storage/{add,remove,sync}` | Quando contas, permissões ou a chave de produto mudam; acompanhamentos são postos em fila e correm no cron | Nome de anfitrião mais, para cada conta com permissão de edição, o endereço de e-mail e os nomes de funções. Contas sem endereço de e-mail válido são saltadas |
| `GET /api/user-license/users` | Quando a página User Licenses é aberta | Nada além da chave |

O conteúdo das páginas nunca faz parte de um pedido de licença. O módulo também imprime um `<div>` oculto na página inicial com uma cadeia marcadora fixa, o escalão de licença, a contagem de editores e a contagem de gravações (`dxpr_builder_page_bottom()` em `dxpr_builder.module`). É legível no fonte da página.

## Recursos do editor (`cdn2.dxpr.com`, `cdn.dxpr.com`)

Quando **Editor Assets** está em **Cloud** (a predefinição), o navegador do editor carrega o JavaScript e CSS do construtor de `https://cdn2.dxpr.com/<version>/`, com recurso a `https://cdn.dxpr.com/<version>/`após uma sonda `/health` falhada. A chave de produto é anexada a cada URL de recurso como parâmetro de consulta `jwt` (`dxpr_builder_library_info_build()`). A CDN verifica essa chave: uma resposta 401 faz `js/editor_validation.js` mostrar "Your product key is not valid".

As opções **Local (minified)** e **Local (unminified)**só aparecem no formulário de definições quando existe uma cópia compilada do editor no diretório `dxpr_builder/` do módulo, e tal cópia é usada automaticamente mesmo quando Cloud está selecionado. O repositório git não acompanha estes ficheiros compilados, por isso uma versão descarregada de drupal.org carrega o editor a partir da CDN.

## Pedidos de IA (`kavya.dxpr.com`)

O navegador nunca contacta `kavya.dxpr.com`. O editor publica para rotas no seu próprio site (`/dxpr_builder/ajax/ai/chat`, `/dxpr_builder/ajax/ai/image`, `/dxpr_builder/ajax/ai/image/edit`; todas exigem a permissão `edit with dxpr builder`, um token CSRF e uma conta licenciada). O site retransmite cada pedido através do fornecedor DXPR do módulo Drupal AI (`ai_provider_dxpr`) para `https://kavya.dxpr.com/v1/chat/completions`, `/v1/images/generations` ou `/v1/images/edits`, autenticado com a chave de API DXPR guardada no módulo Key. A definição `host` do fornecedor (`ai_provider_dxpr.settings`) pode apontar os pedidos para outro anfitrião. Separadamente, a página de definições de IA chama `GET https://kavya.dxpr.com/v1/account/balance`com a chave de produto para mostrar o seu saldo de créditos.

### O que um pedido de IA contém

Só as funcionalidades de IA enviam conteúdo da página para fora do site, e só quando um editor as aciona (`dxpr_builder/build/dxpr-global/ai-service.js`).

| Pedido | Conteúdo enviado |
|---|---|
| Geração de texto e páginas | Pergunta de sistema, pergunta do editor, histórico de conversa |
| Com um elemento selecionado | O HTML exterior do elemento: inteiro se tiver 500 caracteres ou menos, senão os primeiros e últimos 200 caracteres |
| Operações ao nível da página | O HTML existente da página, até 50 000 caracteres; a página completa quando toda a página está a ser substituída |
| Campos opcionais | Nome do modelo, ordem de fornecedores ativos, resultado HTML previsto, etiquetas e classes permitidas, sinalizador `web_search`, formato de resposta |
| Geração de imagens | Pergunta, tamanho, qualidade, fundo |
| Edição de imagens | O mesmo mais a imagem de origem, codificada em base64 |

Duas conveniências obtêm páginas web do navegador do editor (`ai-service-url-fetch.js`): um URL numa pergunta é pedido com `.md` anexado e, se isso falhar, através de `https://r.jina.ai/<url>`, um serviço de leitura de terceiros não operado pela DXPR; uma pergunta que pede para clonar uma página envia o URL para `https://html-extract.dxpr.com/?url=...`. Em ambos os casos só o URL é enviado.

A saída da IA é filtrada no regresso. Domínios permitidos, etiquetas bloqueadas e etiquetas permitidas definem-se em `/admin/dxpr_studio/dxpr_builder/ai_settings`em **AI Output Filtering**.

## Onde correm os modelos DXAI Kavya

O DXPR Builder oferece três modelos (`src/Constants/AiModelConstants.php`):

| Modelo | Nome de API | Descrição mostrada no formulário de definições |
|---|---|---|
| DXAI Kavya M1 | `kavya-m1` | Best performance (OpenAI, Google Gemini, Anthropic) |
| DXAI Kavya M1 EU | `kavya-m1-eu` | Privacy-focused (MistralAI) |
| DXAI Kavya M1 Fast | `kavya-m1-fast` | Fastest responses, lower quality |

Não há definição de região em nenhum módulo. A residência dos dados é escolhida pelo modelo e pelos fornecedores a montante que ativar:

- `kavya-m1` alterna entre cinco fornecedores, listados com o país no formulário de definições DXPR AI Provider: Anthropic (United States), Google Gemini (United States), MistralAI (France), OpenAI (United States), XAI (United States). No modo **Manual priority** arrasta fornecedores entre **Enabled** e **Disabled**e define a ordem.
- `kavya-m1-eu` usa só MistralAI. O README do DXPR AI Provider afirma que "keeps data within European boundaries (servers in Netherlands)"; a documentação afirma que o servidor Kavya corre nos Países Baixos com cópia de segurança na Alemanha, que os pedidos passam por servidores MistralAI em França, e que nunca recorre a um fornecedor fora da UE. Estas localizações são documentadas pela DXPR, não impostas por nada no código Drupal.

Com `ai_provider_dxpr` instalado, o modelo é escolhido em `/admin/config/ai/providers/dxpr`, e a sua definição `allowed_models` controla que modelos os editores podem escolher. Sem ele, modelo e ordem de fornecedores definem-se em `/admin/dxpr_studio/dxpr_builder/ai_settings`.

## Como a chave de produto é guardada

A secção **License** de `/admin/dxpr_studio/dxpr_builder/settings` oferece duas opções de **Storage method**(`src/Form/DxprBuilderSettingsForm.php`, `src/Service/DxprBuilderKeyService.php`):

- **Key module**: a chave é lida da entidade Key escolhida em **Key**. `dxpr_builder_update_9020()` move uma chave encontrada em `dxpr_builder.settings` para a entidade Key `dxpr_builder_jwt`, cujo fornecedor **Configuration**ainda a exporta. Só o fornecedor **File** ou **Environment** mantém a chave fora das exportações de configuração.
- **Configuration storage**: a chave é guardada em texto claro como `dxpr_builder.settings.json_web_token` e é incluída nas exportações de configuração.

A chave de produto é um JSON Web Token que autentica chamadas de licença, a chamada de saldo de créditos e os URLs de recursos da CDN; trate-a como credencial.

## Configuração de firewall

| De | Permitir HTTPS de saída para | Notas |
|---|---|---|
| Servidor Drupal | `dxpr.com` | Licença |
| Servidor Drupal | `kavya.dxpr.com` | Só IA |
| Estações de trabalho dos editores | `cdn2.dxpr.com`, `cdn.dxpr.com` | Recursos do editor |
| Estações de trabalho dos editores | `html-extract.dxpr.com`, `r.jina.ai` | Só IA; bloqueá-los só desativa pesquisa de URL e clonagem |
| Estações de trabalho dos editores | `tuur.dxpr.com` | Análise; bloquear não afeta a edição |

Análise (`dxpr_builder/build/dxpr-analytics/`, PostHog) identifica eventos pelo endereço de e-mail do editor e o nome de anfitrião do site. Desligue-a com `drush config:set dxpr_builder.settings record_analytics 0`; a chave não tem campo de formulário. Mais duas chaves sem campo de formulário são lidas de `dxpr_builder.settings`: `cloud_url` substitui o URL base da CDN (`VERSION` é substituído pela versão do módulo) e `license_endpoint` substitui o endpoint central de armazenamento de utilizadores. Defina-as com uma substituição de configuração em `settings.php`.

## Configuração de proxy

Chamadas de licença e IA usam o cliente HTTP do Drupal, por isso um proxy configura-se em `settings.php`:

```php
$settings['http_client_config']['proxy'] = [
  'http' => 'http://proxy.example.com:8080',
  'https' => 'http://proxy.example.com:8080',
  'no' => ['localhost', '127.0.0.1'],
];

```

Os navegadores dos editores carregam os recursos da CDN e chamam os serviços de análise e leitura diretamente, por isso esses pedidos seguem as definições de proxy da estação de trabalho.

## Implementações isoladas e no local

O DXPR Builder corre no seu próprio servidor; nenhum conteúdo passa por um componente alojado. Quando nem o servidor nem os editores alcançam a DXPR:

| Capacidade | Sem qualquer acesso DXPR |
|---|---|
| Apresentar páginas publicadas | Funciona; nada é carregado da DXPR |
| Armazenamento de conteúdo | Funciona; as páginas são valores de campo na sua base de dados |
| Carregar o editor | Falha, a não ser que exista uma compilação local do editor em `dxpr_builder/` |
| Validação de licença | Falha. O módulo regista o erro, mostra "We are having trouble connecting to the DXPR servers" aos administradores e tenta de 30 em 30 minutos. A edição não é bloqueada enquanto uma chave de produto estiver configurada |
| Página User Licenses | Vazia; precisa de `dxpr.com` |
| Funcionalidades de IA | Indisponíveis; cada pedido passa por `kavya.dxpr.com` |
| Análise, pesquisa de URL, clonar a partir de URL | Saltadas em silêncio |

Sem qualquer chave de produto, o módulo aplica os limites do escalão gratuito no código: um editor e 100 itens de conteúdo.

Uma implementação totalmente no local funciona portanto para apresentar e guardar conteúdo; a edição precisa de acesso à CDN ou de uma compilação local do editor, e a validação de licença precisa de `dxpr.com`. Contacte a DXPR se precisar de uma compilação do editor para alojar internamente.

## E a seguir?

- [Instale o DXPR Builder no seu site Drupal](/pt-pt/hc/documentacao/aprender-dxpr-builder/primeiros-passos/instalacao): configure a chave de produto e o método de armazenamento
- [AI features](/hc/documentation/learn-dxpr-builder/ai): ative a IA e escolha um modelo
- [Security](/pt-pt/hc/documentacao/aprender-dxpr-builder/avancado/seguranca): permissões e filtragem de saída
- [Licence and product key](/pt-pt/hc/documentacao/aprender-dxpr-builder/resolucao-de-problemas/licenca-e-chave-de-produto): resolução de erros de licença