Firewall en dataresidentie.
DXPR Builder slaat je pagina's op in je eigen Drupal-database. Hij neemt contact op met DXPR-diensten voor licentiechecks, editorbestanden en AI-verzoeken. Deze pagina somt elke verbinding op, wat elk vervoert, waar de DXAI Kavya-modellen draaien, hoe de productsleutel wordt bewaard, en wat werkt als uitgaande toegang is beperkt.
Verbindingen in één oogopslag
| Host | Tot stand gebracht door | Doel | Nodig voor |
|---|---|---|---|
dxpr.com |
Drupal-server | Licentiestatus, domeincheck, synchronisatie van gelicentieerde gebruikers | Bewerken |
cdn2.dxpr.com |
Browser van de editor | JavaScript en CSS van de editor (primair) | Bewerken |
cdn.dxpr.com |
Browser van de editor | JavaScript en CSS van de editor (reserve) | Bewerken |
kavya.dxpr.com |
Drupal-server | AI-verzoeken en AI-creditsaldo | AI-functies |
html-extract.dxpr.com |
Browser van de editor | AI “klonen vanaf URL” | AI-functies |
r.jina.ai (derde partij) |
Browser van de editor | Leest webpagina's waarvan de URL in een prompt staat | AI-functies |
tuur.dxpr.com |
Browser van de editor | Gebruiksanalyse van de editor | Optioneel |
Alle verbindingen gebruiken HTTPS op poort 443. Bezoekers van de site laden nooit iets van DXPR-servers: gepubliceerde pagina's worden gerenderd uit HTML opgeslagen in de database, en het frontend-script (dxpr_builder/dxpr_frontend.min.js) zit in de module. app.dxpr.com verschijnt alleen in links getoond aan beheerders.
Licentiechecks (dxpr.com)
De Drupal-server roept vier endpoints aan gedefinieerd in src/Service/DxprBuilderLicenseServiceInterface.php, elk met de productsleutel als een Authorization: Bearer-header.
| Endpoint | Wanneer | Verzonden gegevens |
|---|---|---|
GET /api/user-license |
Elke 24 uur als geautoriseerd, elke 30 minuten als dat niet zo is | gba en users_tier (aantal accounts met de toestemming edit with dxpr builder en de laag waarin het valt), values_count (inhoudsitems met een builderveld), site_base_url, site (een HMAC van de hash salt van de site; de salt zelf wordt niet verzonden), site_mail (uit system.site), project, version |
GET /api/domain-blacklist/{hostname} |
Elk uur | Alleen de hostnaam; geen autorisatieheader |
POST /api/central-user-storage/{add,remove,sync} |
Als accounts, toestemmingen of de productsleutel wijzigen; vervolgacties worden in de wachtrij gezet en draaien op cron | Hostnaam plus, voor elk account met de bewerkingstoestemming, zijn e-mailadres en rolnamen. Accounts zonder geldig e-mailadres worden overgeslagen |
GET /api/user-license/users |
Als de pagina Gebruikerslicenties wordt geopend | Niets behalve de sleutel |
Paginainhoud zit nooit in een licentieverzoek. De module print ook een verborgen <div> op de voorpagina met een vaste markeerstring, de licentielaag, het aantal editors en het aantal keer opslaan (dxpr_builder_page_bottom() in dxpr_builder.module). Hij is leesbaar in de paginabron.
Editorbestanden (cdn2.dxpr.com, cdn.dxpr.com)
Als Editorbestanden op Cloud staat (de standaard), laadt de browser van de editor de builder-JavaScript en CSS van https://cdn2.dxpr.com/<version>/, met een terugval op https://cdn.dxpr.com/<version>/ na een mislukte /health-probe. De productsleutel wordt aan elke bestands-URL gehangen als een jwt-queryparameter (dxpr_builder_library_info_build()). Het CDN controleert die sleutel: een 401-reactie laat js/editor_validation.js “Your product key is not valid” tonen.
De Local (minified) en Local (unminified) verschijnen alleen op het instellingenformulier als er een gebouwde kopie van de editor in de map dxpr_builder/ van de module staat, en zo'n kopie wordt automatisch gebruikt ook als Cloud is geselecteerd. Het git-repository volgt deze gebouwde bestanden niet, dus een release gedownload van drupal.org laadt de editor van het CDN.
AI-verzoeken (kavya.dxpr.com)
De browser neemt nooit contact op met kavya.dxpr.com. De editor post naar routes op je eigen site (/dxpr_builder/ajax/ai/chat, /dxpr_builder/ajax/ai/image, /dxpr_builder/ajax/ai/image/edit; alle vereisen de toestemming edit with dxpr builder, een CSRF-token en een gelicentieerd account). De site geeft elk verzoek door via de DXPR-provider van de Drupal AI-module (ai_provider_dxpr) naar https://kavya.dxpr.com/v1/chat/completions, /v1/images/generations of /v1/images/edits, geauthenticeerd met de DXPR API-sleutel bewaard in de Key-module. De host-instelling van de provider (ai_provider_dxpr.settings) kan verzoeken naar een andere host wijzen. Apart roept de AI-instellingenpagina GET https://kavya.dxpr.com/v1/account/balance aan met de productsleutel om je creditsaldo te tonen.
Wat een AI-verzoek bevat
Alleen AI-functies sturen paginainhoud de site af, en alleen als een editor ze activeert (dxpr_builder/build/dxpr-global/ai-service.js).
| Verzoek | Verzonden inhoud |
|---|---|
| Tekst- en paginageneratie | Systeemprompt, de prompt van de editor, chatgeschiedenis |
| Met een element geselecteerd | De buitenste HTML van het element: geheel als het 500 tekens of minder is, anders zijn eerste en laatste 200 tekens |
| Bewerkingen op paginaniveau | De bestaande pagina-HTML, tot 50.000 tekens; de volledige pagina als de hele pagina wordt vervangen |
| Optionele velden | Modelnaam, ingeschakelde provider-volgorde, een voorspeld HTML-resultaat, toegestane tags en klassen, een web_search-vlag, een reactiformaat |
| Afbeeldingsgeneratie | Prompt, grootte, kwaliteit, achtergrond |
| Afbeeldingsbewerking | Hetzelfde plus de bronafbeelding, base64-gecodeerd |
Twee gemakken halen webpagina's op uit de browser van de editor (ai-service-url-fetch.js): een URL in een prompt wordt opgevraagd met .md erachter en, als dat mislukt, via https://r.jina.ai/<url>, een lezersdienst van een derde partij die niet door DXPR wordt beheerd; een prompt die vraagt een pagina te klonen stuurt de URL naar https://html-extract.dxpr.com/?url=.... In beide gevallen wordt alleen de URL verzonden.
AI-uitvoer wordt op de terugweg gefilterd. Toegestane domeinen, geblokkeerde tags en toegestane tags worden ingesteld op /admin/dxpr_studio/dxpr_builder/ai_settings onder AI Output Filtering.
Waar de DXAI Kavya-modellen draaien
DXPR Builder biedt drie modellen (src/Constants/AiModelConstants.php):
| Model | API-naam | Beschrijving in het instellingenformulier |
|---|---|---|
| DXAI Kavya M1 | kavya-m1 |
Beste prestaties (OpenAI, Google Gemini, Anthropic) |
| DXAI Kavya M1 EU | kavya-m1-eu |
Privacygericht (MistralAI) |
| DXAI Kavya M1 Fast | kavya-m1-fast |
Snelste reacties, lagere kwaliteit |
Er is in geen van beide modules een regio-instelling. Dataresidentie wordt gekozen per model en per welke upstream-providers je inschakelt:
kavya-m1valt terug over vijf providers, opgesomd met hun land in het instellingenformulier van de DXPR AI-provider: Anthropic (Verenigde Staten), Google Gemini (Verenigde Staten), MistralAI (Frankrijk), OpenAI (Verenigde Staten), XAI (Verenigde Staten). In de modus Handmatige prioriteit sleep je providers tussen Ingeschakeld en Uitgeschakeld en stel je hun volgorde in.kavya-m1-eugebruikt alleen MistralAI. De README van de DXPR AI-provider stelt dat het “data binnen Europese grenzen houdt (servers in Nederland)”; zijn documentatie stelt dat de Kavya-server in Nederland draait met een backup in Duitsland, dat verzoeken via MistralAI-servers in Frankrijk gaan, en dat hij nooit terugvalt op een niet-EU-provider. Deze locaties zijn gedocumenteerd door DXPR, niet afgedwongen door iets in de Drupal-code.
Met ai_provider_dxpr geïnstalleerd wordt het model gekozen op /admin/config/ai/providers/dxpr, en zijn allowed_models-instelling bepaalt welke modellen editors mogen kiezen. Zonder dat worden model- en providervolgorde ingesteld op /admin/dxpr_studio/dxpr_builder/ai_settings.
Hoe de productsleutel wordt bewaard
De sectie Licentie van /admin/dxpr_studio/dxpr_builder/settings biedt twee opties voor Opslagmethode (src/Form/DxprBuilderSettingsForm.php, src/Service/DxprBuilderKeyService.php):
- Key-module: de sleutel wordt gelezen uit de Key-entiteit gekozen onder Sleutel.
dxpr_builder_update_9020()verplaatst een sleutel gevonden indxpr_builder.settingsnaar de Key-entiteitdxpr_builder_jwt, waarvan de Instellingen-provider hem nog steeds exporteert. Alleen de provider Bestand of Omgeving houdt de sleutel uit configuratie-exports. - Instellingenopslag: de sleutel wordt als platte tekst bewaard als
dxpr_builder.settings.json_web_tokenen zit in configuratie-exports.
De productsleutel is een JSON Web Token dat licentieaanroepen, de creditsaldo-aanroep en de CDN-bestands-URL's authenticeert; behandel hem als een inloggegeven.
Firewallconfiguratie
| Van | Uitgaande HTTPS toestaan naar | Opmerkingen |
|---|---|---|
| Drupal-server | dxpr.com |
Licentie |
| Drupal-server | kavya.dxpr.com |
Alleen AI |
| Werkstations van editors | cdn2.dxpr.com, cdn.dxpr.com |
Editorbestanden |
| Werkstations van editors | html-extract.dxpr.com, r.jina.ai |
Alleen AI; blokkeren schakelt alleen URL-onderzoek en klonen uit |
| Werkstations van editors | tuur.dxpr.com |
Analyse; blokkeren heeft geen effect op bewerken |
Analyse (dxpr_builder/build/dxpr-analytics/, PostHog) herkent gebeurtenissen aan het e-mailadres van de editor en de hostnaam van de site. Zet ze uit met drush config:set dxpr_builder.settings record_analytics 0; de sleutel heeft geen formulierveld. Twee verdere sleutels zonder formulierveld worden gelezen uit dxpr_builder.settings: cloud_url vervangt de CDN-basis-URL (VERSION wordt vervangen door de moduleversie) en license_endpoint vervangt het centrale gebruikersopslag-endpoint. Stel ze in met een configuratieoverschrijving in settings.php.
Proxyconfiguratie
Licentie- en AI-aanroepen gebruiken de HTTP-client van Drupal, dus een proxy wordt geconfigureerd 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'],
];
Browsers van editors laden de CDN-bestanden en roepen de analyse- en lezersdiensten direct aan, dus die verzoeken volgen de proxy-instellingen van het werkstation.
Air-gapped en on-premise implementaties
DXPR Builder draait op je eigen server; geen inhoud gaat via een gehost onderdeel. Als noch de server noch de editors DXPR kunnen bereiken:
| Mogelijkheid | Zonder enige DXPR-toegang |
|---|---|
| Gepubliceerde pagina's serveren | Werkt; er wordt niets van DXPR geladen |
| Inhoudsopslag | Werkt; pagina's zijn veldwaarden in je database |
| De editor laden | Mislukt zonder lokale editorbuild in dxpr_builder/ |
| Licentievalidatie | Mislukt. De module logt de fout, toont “We are having trouble connecting to the DXPR servers” aan beheerders en probeert elke 30 minuten opnieuw. Bewerken wordt niet geblokkeerd zolang er een productsleutel is geconfigureerd |
| Pagina Gebruikerslicenties | Leeg; vereist dxpr.com |
| AI-functies | Niet beschikbaar; elk verzoek gaat via kavya.dxpr.com |
| Analyse, URL-onderzoek, klonen vanaf URL | Worden stilzwijgend overgeslagen |
Zonder productsleutel past de module de gratis-laaglimieten toe in code: één editor en 100 inhoudsitems.
Een volledig on-premise implementatie werkt dus voor serveren en opslaan van inhoud; bewerken heeft CDN-toegang of een lokale editorbuild nodig, en licentievalidatie heeft dxpr.com nodig. Neem contact op met DXPR als je een editorbuild nodig hebt om intern te hosten.
Wat nu?
- Installatie: configureer de productsleutel en opslagmethode
- AI-functies: schakel AI in en kies een model
- Beveiliging: toestemmingen en uitvoerfiltering
- Licentie en productsleutel: problemen met licentiefouten oplossen