Firewall en dataresidentie.

DXPR Builder lerenDe site beherenVoldoen aan compliance-eisen

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-m1 valt 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-eu gebruikt 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 in dxpr_builder.settings naar de Key-entiteit dxpr_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_token en 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?