Firewall e residência dos dados.
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-m1alterna 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-euusa 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 emdxpr_builder.settingspara a entidade Keydxpr_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_tokene é 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:
$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: configure a chave de produto e o método de armazenamento
- AI features: ative a IA e escolha um modelo
- Security: permissões e filtragem de saída
- Licence and product key: resolução de erros de licença