Skip to content

systems command api bridge

Douwe de Vries edited this page Jul 1, 2026 · 1 revision

Command API bridge

Active contributors: Douwe de Vries

Purpose

The command API bridge keeps React code independent from raw Tauri APIs. src/lib/loadrift/api.ts defines the app-facing interface, while src/lib/tauri/client.ts implements it with Tauri invoke and window-scoped event listeners.

Directory layout

src/lib/loadrift/api.ts
src/lib/loadrift/types.ts
src/lib/loadrift/context.tsx
src/lib/tauri/client.ts
src/lib/tauri/dialog.ts
src/lib/tauri/errors.ts
src-tauri/src/lib.rs
src-tauri/src/events.rs
src-tauri/src/commands/

Key abstractions

Abstraction File Description
LoadRiftApi src/lib/loadrift/api.ts Typed frontend interface for commands and events
createTauriLoadRiftApi src/lib/tauri/client.ts Tauri-backed implementation of LoadRiftApi
LoadRiftApiProvider src/lib/loadrift/context.tsx React context for API injection
Event constants src/lib/loadrift/api.ts, src-tauri/src/events.rs Shared names for k6 output, metrics, completion, and error events

How it works

graph LR
    Hook[React hook] --> API[LoadRiftApi]
    API --> Adapter[createTauriLoadRiftApi]
    Adapter --> Invoke[Tauri invoke]
    Invoke --> Command[Rust command]
    Command --> Events[Rust event emitter]
    Events --> Listen[window.listen]
    Listen --> Hook
Loading

Commands include import_collection_from_file, validate_test_configuration, smoke_test_requests, start_test, stop_test, export_report, and get_test_status. Event subscriptions include onK6Output, onK6Metrics, onK6Complete, and onK6Error.

Integration points

Run-state filtering happens in src/features/test/useTestHarness.ts, which ignores stale metrics and completion events by comparing run IDs. Backend event emission happens in src-tauri/src/events.rs and src-tauri/src/k6/process/runtime.rs.

Entry points for modification

Add a frontend method to src/lib/loadrift/api.ts, implement it in src/lib/tauri/client.ts, add Rust request/response models in src-tauri/src/models.rs if needed, implement a command under src-tauri/src/commands/, and register it in src-tauri/src/lib.rs.

Key source files

File Purpose
src/lib/loadrift/api.ts Frontend API and event constants
src/lib/tauri/client.ts Tauri invoke/listen adapter
src/lib/loadrift/context.tsx API injection
src-tauri/src/lib.rs Backend command registration
src-tauri/src/events.rs Event emission

Clone this wiki locally