Firewall e residenza dei dati.
DXPR Builder conserva le tue pagine nel tuo database Drupal. Contatta i servizi DXPR per controlli di licenza, asset dell’editor e richieste AI. Questa pagina elenca ogni connessione, cosa trasporta ciascuna, dove girano i modelli DXAI Kavya, come è conservata la chiave prodotto, e cosa funziona quando l’accesso in uscita è limitato.
Le connessioni in breve
| Host | Effettuata da | Scopo | Necessaria per |
|---|---|---|---|
dxpr.com |
Server Drupal | Stato della licenza, controllo dominio, sincronizzazione utenti con licenza | Modifica |
cdn2.dxpr.com |
Browser del redattore | JavaScript e CSS dell’editor (primario) | Modifica |
cdn.dxpr.com |
Browser del redattore | JavaScript e CSS dell’editor (di riserva) | Modifica |
kavya.dxpr.com |
Server Drupal | Richieste AI e saldo crediti AI | Funzioni AI |
html-extract.dxpr.com |
Browser del redattore | AI “clona da URL” | Funzioni AI |
r.jina.ai (terze parti) |
Browser del redattore | Legge pagine web i cui URL appaiono in un prompt | Funzioni AI |
tuur.dxpr.com |
Browser del redattore | Analisi di utilizzo dell’editor | Opzionale |
Tutte le connessioni usano HTTPS sulla porta 443. I
visitatori del sito non caricano mai niente dai server DXPR:
le pagine pubblicate sono rese da HTML conservato nel
database, e lo script frontend
(dxpr_builder/dxpr_frontend.min.js) è incluso nel
modulo. app.dxpr.com appare solo in link
mostrati agli amministratori.
Controlli di licenza (dxpr.com)
Il server Drupal chiama quattro endpoint definiti in
src/Service/DxprBuilderLicenseServiceInterface.php,
ognuno con la chiave prodotto come header
Authorization: Bearer.
| Endpoint | Quando | Dati inviati |
|---|---|---|
GET /api/user-license |
Ogni 24 ore quando autorizzato, ogni 30 minuti quando no | gba e users_tier (numero di account con il permesso edit with dxpr builder e la fascia in cui ricade), values_count (elementi di contenuto che usano un campo builder), site_base_url, site (un HMAC del salt hash del sito; il salt stesso non viene inviato), site_mail (da system.site), project, version |
GET /api/domain-blacklist/{hostname} |
Ogni ora | Solo l’hostname; nessun header di autorizzazione |
POST /api/central-user-storage/{add,remove,sync} |
Quando cambiano account, permessi o chiave prodotto; i seguiti sono accodati ed eseguiti con cron | Hostname più, per ogni account con il permesso di modifica, il suo indirizzo email e i nomi dei ruoli. Gli account senza un indirizzo email valido vengono saltati |
GET /api/user-license/users |
Quando si apre la pagina Licenze utente | Niente oltre la chiave |
Il contenuto delle pagine non fa mai parte di una richiesta di licenza.
Il modulo stampa anche un <div> nascosto nella
home page contenente una stringa marcatrice fissa, la
fascia di licenza, il conteggio redattori e il conteggio
salvataggi (dxpr_builder_page_bottom() in
dxpr_builder.module). È leggibile nel sorgente della pagina.
Asset dell’editor (cdn2.dxpr.com, cdn.dxpr.com)
Quando Asset dell’editor è Cloud (il predefinito),
il browser del redattore carica JavaScript e CSS del builder
da https://cdn2.dxpr.com/<version>/,
ripiegando su https://cdn.dxpr.com/<version>/
dopo una probe /health fallita. La chiave prodotto è
aggiunta a ogni URL di asset come parametro di query
jwt (dxpr_builder_library_info_build()).
La CDN verifica quella chiave: una risposta 401 fa mostrare
a js/editor_validation.js “La tua chiave prodotto
non è valida”.
Le opzioni Locale (minificato) e Locale (non minificato)
appaiono nel modulo delle impostazioni solo quando esiste
una copia compilata dell’editor nella directory
dxpr_builder/ del modulo, e tale copia viene usata
in automatico anche quando è selezionato Cloud. Il repository
git non traccia questi file compilati, quindi una release
scaricata da drupal.org carica l’editor dalla CDN.
Richieste AI (kavya.dxpr.com)
Il browser non contatta mai kavya.dxpr.com. L’editor
invia post a route sul tuo sito
(/dxpr_builder/ajax/ai/chat,
/dxpr_builder/ajax/ai/image,
/dxpr_builder/ajax/ai/image/edit; tutte richiedono
il permesso edit with dxpr builder, un token CSRF
e un account con licenza). Il sito inoltra
ogni richiesta tramite il provider DXPR del modulo AI di Drupal
(ai_provider_dxpr) a
https://kavya.dxpr.com/v1/chat/completions,
/v1/images/generations o /v1/images/edits,
con l’autenticazione della chiave API DXPR conservata nel
modulo Key. L’impostazione host del provider
(ai_provider_dxpr.settings) può puntare le richieste
a un altro host. Separatamente, la pagina delle impostazioni AI
chiama GET https://kavya.dxpr.com/v1/account/balance
con la chiave prodotto per mostrare il tuo saldo crediti.
Cosa contiene una richiesta AI
Solo le funzioni AI mandano contenuti della pagina fuori dal sito,
e solo quando un redattore le avvia
(dxpr_builder/build/dxpr-global/ai-service.js).
| Richiesta | Contenuto inviato |
|---|---|
| Generazione di testo e pagine | Prompt di sistema, prompt del redattore, cronologia chat |
| Con un elemento selezionato | L’HTML esterno dell’elemento: intero se 500 caratteri o meno, altrimenti i suoi primi e ultimi 200 caratteri |
| Operazioni a livello pagina | L’HTML esistente della pagina, fino a 50.000 caratteri; la pagina completa quando si sostituisce l’intera pagina |
| Campi opzionali | Nome del modello, ordine dei provider abilitati, un risultato HTML previsto, tag e classi permessi, un flag web_search, un formato di risposta |
| Generazione di immagini | Prompt, dimensione, qualità, sfondo |
| Modifica di immagini | Gli stessi più l’immagine di origine, codificata in base64 |
Due comodità scaricano pagine web dal browser del redattore
(ai-service-url-fetch.js): un URL in un
prompt è richiesto con .md aggiunto e, se
fallisce, tramite https://r.jina.ai/<url>, un
servizio di lettura di terze parti non gestito da DXPR;
un prompt che chiede di clonare una pagina invia l’URL
a https://html-extract.dxpr.com/?url=.... In
entrambi i casi viene inviato solo l’URL.
L’output AI è filtrato al ritorno. Domini permessi, tag bloccati e tag permessi si impostano in
/admin/dxpr_studio/dxpr_builder/ai_settings
sotto Filtro dell’output AI.
Dove girano i modelli DXAI Kavya
DXPR Builder offre tre modelli
(src/Constants/AiModelConstants.php):
| Modello | Nome API | Descrizione mostrata nel modulo delle impostazioni |
|---|---|---|
| DXAI Kavya M1 | kavya-m1 |
Migliori prestazioni (OpenAI, Google Gemini, Anthropic) |
| DXAI Kavya M1 EU | kavya-m1-eu |
Incentrato sulla privacy (MistralAI) |
| DXAI Kavya M1 Fast | kavya-m1-fast |
Risposte più veloci, qualità inferiore |
Non c’è un’impostazione di regione in nessuno dei due moduli. La residenza dei dati si sceglie per modello e per quali provider a monte abiliti:
kavya-m1commuta tra cinque provider, elencati con il loro paese nel modulo delle impostazioni del Provider AI DXPR: Anthropic (Stati Uniti), Google Gemini (Stati Uniti), MistralAI (Francia), OpenAI (Stati Uniti), XAI (Stati Uniti). In modalità Priorità manuale trascini i provider tra Abilitati e Disabilitati e ne imposti l’ordine.kavya-m1-euusa solo MistralAI. Il README del Provider AI DXPR dichiara che “mantiene i dati entro i confini europei (server nei Paesi Bassi)”; la sua documentazione dichiara che il server Kavya gira nei Paesi Bassi con un backup in Germania, che le richieste passano dai server MistralAI in Francia, e che non ripiega mai su un provider fuori UE. Queste sedi sono documentate da DXPR, non imposte da niente nel codice Drupal.
Con ai_provider_dxpr installato, il modello si
sceglie in /admin/config/ai/providers/dxpr, e la sua
impostazione allowed_models controlla quali modelli i
redattori possono scegliere. Senza di esso, modello e ordine dei
provider si impostano in
/admin/dxpr_studio/dxpr_builder/ai_settings.
Come è conservata la chiave prodotto
La sezione Licenza di
/admin/dxpr_studio/dxpr_builder/settings offre
due opzioni di Metodo di archiviazione
(src/Form/DxprBuilderSettingsForm.php,
src/Service/DxprBuilderKeyService.php):
- Modulo Key: la chiave è letta dall’entità Chiave
scelta sotto Chiave.
dxpr_builder_update_9020()sposta una chiave trovata indxpr_builder.settingsnell’entità Chiavedxpr_builder_jwt, il cui provider Configurazione la esporta comunque. Solo il provider File o Ambiente tiene la chiave fuori dalle esportazioni di configurazione. - Archiviazione in configurazione: la chiave è salvata in
testo in chiaro come
dxpr_builder.settings.json_web_tokened è inclusa nelle esportazioni di configurazione.
La chiave prodotto è un JSON Web Token che autentica le chiamate di licenza, la chiamata di saldo crediti e gli URL di asset CDN; trattala come una credenziale.
Configurazione del firewall
| Da | HTTPS in uscita permesso verso | Note |
|---|---|---|
| Server Drupal | dxpr.com |
Licenza |
| Server Drupal | kavya.dxpr.com |
Solo AI |
| Postazioni di lavoro dei redattori | cdn2.dxpr.com, cdn.dxpr.com |
Asset dell’editor |
| Postazioni di lavoro dei redattori | html-extract.dxpr.com, r.jina.ai |
Solo AI; bloccarli disabilita solo ricerca da URL e clonazione |
| Postazioni di lavoro dei redattori | tuur.dxpr.com |
Analisi; bloccarlo non cambia la modifica |
Le analisi (dxpr_builder/build/dxpr-analytics/,
PostHog) identificano gli eventi tramite l’indirizzo email del
redattore e l’hostname del sito. Disattivale con
drush config:set dxpr_builder.settings record_analytics 0;
la chiave non ha un campo nel modulo. Altre due chiavi
senza campo nel modulo sono lette da
dxpr_builder.settings: cloud_url sostituisce l’URL
base della CDN (VERSION è sostituito con la
versione del modulo) e license_endpoint sostituisce
l’endpoint centrale di archiviazione utenti. Impostale con un
override di configurazione in settings.php.
Configurazione del proxy
Le chiamate di licenza e AI usano il client HTTP di Drupal, quindi
un proxy si configura in 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'],
];
I browser dei redattori caricano gli asset CDN e chiamano i servizi di analisi e lettura direttamente, quindi quelle richieste seguono le impostazioni proxy della postazione.
Distribuzioni senza accesso alla rete e on-premise
DXPR Builder gira sul tuo server; nessun contenuto passa da un componente ospitato. Quando né il server né i redattori possono raggiungere DXPR:
| Funzionalità | Senza alcun accesso DXPR |
|---|---|
| Distribuzione delle pagine pubblicate | Funziona; niente è caricato da DXPR |
| Archiviazione dei contenuti | Funziona; le pagine sono valori di campo nel tuo database |
| Caricamento dell’editor | Non funziona a meno che una build locale dell’editor sia presente in dxpr_builder/ |
| Convalida della licenza | Non funziona. Il modulo registra l’errore, mostra “Abbiamo problemi a connetterci ai server DXPR” agli amministratori e riprova ogni 30 minuti. La modifica non è bloccata mentre è configurata una chiave prodotto |
| Pagina Licenze utente | Vuota; ha bisogno di dxpr.com |
| Funzioni AI | Non disponibili; ogni richiesta passa da kavya.dxpr.com |
| Analisi, ricerca da URL, clona da URL | Saltate in silenzio |
Senza proprio una chiave prodotto, il modulo applica in codice i limiti del piano gratuito: un redattore e 100 elementi di contenuto.
Una distribuzione del tutto on-premise funziona quindi per
distribuire e conservare contenuti; la modifica ha bisogno di
accesso CDN o di una build locale dell’editor, e la convalida della
licenza ha bisogno di dxpr.com. Contatta DXPR se ti
serve una build dell’editor da ospitare internamente.
Passi successivi
- Installazione: configura la chiave prodotto e il metodo di archiviazione
- Funzioni AI: abilita l’AI e scegli un modello
- Sicurezza: permessi e filtro dell’output
- Licenza e chiave prodotto: risoluzione degli errori di licenza