Código executável e renderização de diagramas dinâmicos para arquiteturas síncronas/assíncronas e máquinas de estados.


📄 Exemplo 1: Fluxo de Autenticação JWT com Refresh Token

```mermaid
sequenceDiagram
    autonumber
    actor User as Usuário
    participant App as Frontend (React)
    participant API as API Backend
    participant Auth as Provedor OAuth/JWT

    User->>App: Submete credenciais (email/senha)
    App->>Auth: POST /auth/login
    Auth-->>App: Retorna Access Token (exp: 15m) + Refresh Token (exp: 7d)
    
    Note over App,API: Requisições normais utilizando o Access Token
    App->>API: GET /perfil (Bearer Token)
    API-->>App: 200 OK (Dados do perfil)

    Note over App,API: Cenário de Expiração do Access Token
    App->>API: GET /relatorios
    API-->>App: 401 Unauthorized (Token Expirado)
    
    App->>Auth: POST /auth/refresh (Envia Refresh Token)
    Auth-->>App: Retorna Novo Access Token
    App->>API: Repete GET /relatorios (Com novo token)
    API-->>App: 200 OK (Relatório entregue) ⚡
```

Diagrama Renderizado Diretamente:

sequenceDiagram
    autonumber
    actor User as Usuário
    participant App as Frontend (React)
    participant API as API Backend
    participant Auth as Provedor OAuth/JWT

    User->>App: Submete credenciais (email/senha)
    App->>Auth: POST /auth/login
    Auth-->>App: Retorna Access Token (exp: 15m) + Refresh Token (exp: 7d)
    
    Note over App,API: Requisições normais utilizando o Access Token
    App->>API: GET /perfil (Bearer Token)
    API-->>App: 200 OK (Dados do perfil)

    Note over App,API: Cenário de Expiração do Access Token
    App->>API: GET /relatorios
    API-->>App: 401 Unauthorized (Token Expirado)
    
    App->>Auth: POST /auth/refresh (Envia Refresh Token)
    Auth-->>App: Retorna Novo Access Token
    App->>API: Repete GET /relatorios (Com novo token)
    API-->>App: 200 OK (Relatório entregue) ⚡

📄 Exemplo 2: Máquina de Estados de Conexão WebSocket

stateDiagram-v2
    [*] --> Desconectado
    Desconectado --> Conectando: ws.connect()
    Conectando --> Conectado: Handshake 101 Switching Protocols
    Conectando --> Desconectado: Erro de Rede / Timeout
    
    state Conectado {
        [*] --> Ocioso
        Ocioso --> Transmitindo: send(mensagem)
        Transmitindo --> Ocioso: ack recebido
        Ocioso --> Heartbeat: ping / pong a cada 30s
        Heartbeat --> Ocioso
    }
    
    Conectado --> Desconectado: ws.close()
    Desconectado --> [*]