Skip to content

Engine

The Engine provides low-level control over request execution with event callbacks.

Creates a new engine instance.

import { createEngine } from '@t-req/core';
import { createFetchTransport, createNodeIO } from '@t-req/core/runtime';
const engine = createEngine({
io: createNodeIO(),
transport: createFetchTransport(fetch),
onEvent: (event) => console.log(event),
});
OptionTypeDescription
ioIOFilesystem adapter for file operations.
transportTransportHTTP transport adapter. Required.
variablesRecord<string, unknown>Initial variables.
resolversRecord<string, Resolver>Custom resolver functions.
cookieJarCookieJarCookie jar for cookie management.
onEvent(event: EngineEvent) => voidEvent callback for request lifecycle events.

Execute a request from a .http file.

const response = await engine.runFile('./api/users.http', {
variables: { userId: '123' },
});

Execute a request from in-memory content.

const response = await engine.runString(`
GET https://api.example.com/users
Accept: application/json
`);

The engine emits events throughout the request lifecycle:

Emitted when a request begins.

{
type: 'request:start',
request: {
method: 'GET',
url: 'https://api.example.com/users',
headers: { ... },
},
timestamp: 1234567890,
}

Emitted when a request completes successfully.

{
type: 'request:complete',
request: { ... },
response: Response,
duration: 123, // milliseconds
timestamp: 1234567890,
}

Emitted when a request fails.

{
type: 'request:error',
request: { ... },
error: Error,
timestamp: 1234567890,
}
import { createEngine } from '@t-req/core';
import { createFetchTransport } from '@t-req/core/runtime';
const engine = createEngine({
transport: createFetchTransport(fetch),
onEvent: (event) => {
switch (event.type) {
case 'request:start':
console.log(`Starting: ${event.request.method} ${event.request.url}`);
break;
case 'request:complete':
console.log(`Completed: ${event.response.status} in ${event.duration}ms`);
break;
case 'request:error':
console.error(`Failed: ${event.error.message}`);
break;
}
},
});
await engine.runString('GET https://api.example.com/users\n');

The Engine is useful for:

  • TUI applications - Display request progress and status
  • Desktop apps - Show loading states and timing
  • Logging - Record all requests for debugging
  • Metrics - Collect request timing data
  • Custom transports - Test with mock HTTP responses
FeatureClientEngine
SimplicityHigher-level APILower-level API
EventsNoYes
Variable managementBuilt-in methodsManual
Use caseMost applicationsTUI, desktop, advanced
import type {
Engine,
EngineConfig,
EngineEvent,
RequestStartEvent,
RequestCompleteEvent,
RequestErrorEvent,
} from '@t-req/core';