xPulse
🇩🇪 DE

@xpulse/http – Component Spec

Status: CONCEPT · Erstellt März 2026 Übergeordnet: GLOBAL_concept-ecosystem.md, GLOBAL_concept-web.md


Übersicht

HTTP Server für das xPulse Ökosystem. Stellt Server, Request und Response bereit.

Eine Aufgabe: HTTP – nicht mehr.

Kennt kein Routing-Konzept, keine Controller, kein Template. Kann standalone genutzt werden – für minimale Projekte ohne MVC Stack.


Dependencies

@xpulse/http
├── @xpulse/event ← http:request, http:response feuern
└── @xpulse/logger ← internes Logging

API

Initialisieren

import http from '@xpulse/http';
await http.init();

env, debug und Port kommen aus .env via @xpulse/confighttp.init() hat keine Parameter.

Starten / Stoppen

http.start(); // blockierend
http.stop(); // graceful shutdown – laufende Requests noch abschliessen

Route registrieren

http.route('GET', '/path', handler);
http.route('POST', '/path', handler);

Handler-Signatur:

(req, res) => {
res.send('<h1>Hello</h1>');
}

Minimales Beispiel ohne MVC

import http from '@xpulse/http';
await http.init();
http.route('GET', '/', (req, res) => {
res.send('<h1>xPulse</h1>');
});
http.route('GET', '/health', (req, res) => {
res.status(200).send('ok');
});
http.start();
process.on('SIGTERM', () => http.stop());

Request API

Eigenschaft / Methode Beschreibung
req.method HTTP Methode – GET, POST
req.path URL-Pfad ohne Query-String – /tool/chat
req.params URL-Parameter aus Pattern – { id: '42' }
req.query Query-String Parameter – { lang: 'de' }
req.body Request Body – geparst bei POST
req.headers Request Headers

URL-Parameter Beispiel

http.route('GET', '/tool/:tool/:page?', (req, res) => {
const { tool, page } = req.params;
// /tool/chat → { tool: 'chat', page: undefined }
// /tool/chat/guide → { tool: 'chat', page: 'guide' }
res.send(`Tool: ${tool}`);
});

Query-String Beispiel

http.route('GET', '/doc', (req, res) => {
const lang = req.query.lang ?? 'de';
// /doc?lang=en → lang = 'en'
res.send(`Lang: ${lang}`);
});

Response API

Methode Beschreibung
res.send(html) HTML senden, Status 200
res.status(code) Status Code setzen, gibt res zurück (chainable)
res.header(name, value) Response Header setzen, gibt res zurück (chainable)

Chaining Beispiel

res.status(404).send('<h1>Nicht gefunden</h1>');
res.status(301).header('Location', '/neu').send('');

Gefeuerte Events

Event Payload Wann
http:request { method, path, params, query } bei jedem eingehenden Request
http:response { method, path, status, duration } nach jeder gesendeten Response
import event from '@xpulse/event';
event.on('http:request', ({ method, path }) => {
// wird von @xpulse/logger automatisch geloggt
});

.env Konfiguration

Variable Default Beschreibung
PORT 3000 Server Port
HOST 0.0.0.0 Server Host

Debug Integration

Wenn @xpulse/debug als devDependency installiert ist, stellt @xpulse/http automatisch einen DataCollector bereit. @xpulse/debug discovert ihn via node_modules/@xpulse/http/src/datacollectors/ – keine Konfiguration nötig.

"optionalDependencies": {
"@xpulse/debug": "^1.0.0"
}

Der HttpCollector (name: 'http', icon: '🌐') zeigt im Web Profiler:

Außerdem schreibt der HttpCollector einen Waterfall-Span (kind: 'http') der die gesamte Request-Dauer abbildet – breitester Balken im Waterfall.

Badge in der Toolbar: 200 · 12ms


Paket-Struktur

@xpulse/http/
src/
index.js ← default export: http-Objekt
server.js ← Node http.createServer Wrapper
request.js ← Request-Wrapper
response.js ← Response-Wrapper
test/
http.test.js
request.test.js
response.test.js
docs/
index.md
api.md
_meta.json
Dockerfile
Makefile
README.md
package.json
xpulse.json
de/spec.md 2026-03-27