Skip to content

Request Flow

HTTP Request Lifecycle

sequenceDiagram
    participant App as App (HTTP Client)
    participant Plugin as Plugin (Ktor / OkHttp)
    participant Rules as FindMatchingRuleUseCase
    participant Orchestrator as WiretapOrchestrator
    participant DB as WiretapDatabase
    participant Logger as WiretapLogger

    App->>Plugin: Outgoing HTTP Request

    Plugin->>Rules: findMatchingRule(url, method, headers, body)
    Rules-->>Plugin: WiretapRule | null

    Plugin->>Orchestrator: logRequest(entry)
    Orchestrator->>DB: INSERT (in-progress)
    Orchestrator->>Logger: logHttp(entry)
    Orchestrator-->>Plugin: logEntryId

    alt Mock Rule Matched
        Plugin->>Plugin: Create mock response
        Plugin->>Orchestrator: updateEntry(mockResponse)
        Orchestrator->>DB: UPDATE (source=Mock)
        Plugin-->>App: Mock Response
    else Throttle Rule Matched
        Plugin->>Plugin: delay(delayMs)
        Plugin->>Plugin: Proceed to network
        Plugin->>Orchestrator: updateEntry(response)
        Orchestrator->>DB: UPDATE (source=Throttle)
        Plugin-->>App: Real Response (delayed)
    else No Rule
        Plugin->>Plugin: Proceed to network
        Plugin->>Orchestrator: updateEntry(response)
        Orchestrator->>DB: UPDATE (source=Network)
        Plugin-->>App: Real Response
    end

WebSocket Lifecycle

sequenceDiagram
    participant App as App
    participant Plugin as Plugin
    participant Orchestrator as WiretapOrchestrator
    participant DB as WiretapDatabase

    App->>Plugin: Open WebSocket

    Plugin->>Orchestrator: openSocketConnection(entry)
    Orchestrator->>DB: INSERT (status=Open)
    Orchestrator-->>Plugin: socketId

    loop Messages
        App->>Plugin: send(frame)
        Plugin->>Orchestrator: logSocketMessage(Sent)
        Orchestrator->>DB: INSERT message

        Plugin-->>App: receive(frame)
        Plugin->>Orchestrator: logSocketMessage(Received)
        Orchestrator->>DB: INSERT message
    end

    alt Graceful Close
        Plugin->>Orchestrator: updateSocketConnection(Closed)
        Orchestrator->>DB: UPDATE status=Closed
    else Error
        Plugin->>Orchestrator: updateSocketConnection(Failed)
        Orchestrator->>DB: UPDATE status=Failed
    end

Response Status Codes

Code Meaning
-2 Request in progress (no response yet)
-1 Request cancelled
0 Network error (exception thrown)
1xx–5xx Standard HTTP status codes