115
docs/spec.md
115
docs/spec.md
@@ -572,43 +572,92 @@ function fileserver_download_handler(
|
|||||||
|
|
||||||
### Sending Flow
|
### Sending Flow
|
||||||
|
|
||||||
```mermaid
|
```
|
||||||
flowchart TD
|
┌─────────────────────────────────────────────────────────────────┐
|
||||||
A[User calls smartsend(subject, data)] --> B[Serialize payload according to payload_type]
|
│ 1. User calls smartsend(subject, data) │
|
||||||
B --> C[Calculate serialized size]
|
└─────────────────────────────────────────────────────────────────┘
|
||||||
C --> D{Size < Threshold?}
|
│
|
||||||
D -->|Yes| E[Direct Transport: Base64 encode]
|
▼
|
||||||
D -->|No| F[Link Transport: Upload to file server]
|
┌─────────────────────────────────────────────────────────────────┐
|
||||||
E --> G[Build envelope with metadata]
|
│ 2. For each payload: │
|
||||||
F --> G
|
│ - Serialize data according to payload_type │
|
||||||
G --> H[Convert to JSON string]
|
│ - Calculate serialized size │
|
||||||
H --> I[Publish to NATS subject]
|
└─────────────────────────────────────────────────────────────────┘
|
||||||
I --> J[Return envelope and JSON string]
|
│
|
||||||
|
├─ Size < Threshold ────────────────►┐
|
||||||
style A fill:#f9f9f9,stroke:#333
|
│ │
|
||||||
style D fill:#e0e7ff,stroke:#3b82f6
|
▼ ▼
|
||||||
style I fill:#e0e7ff,stroke:#3b82f6
|
┌─────────────────────────────────────────────────────────────────┐ │
|
||||||
|
│ 3. Direct Transport: │ │
|
||||||
|
│ - Encode as Base64 │ │
|
||||||
|
│ - Include in payload.data │ │
|
||||||
|
└─────────────────────────────────────────────────────────────────┘ │
|
||||||
|
│ │
|
||||||
|
▼ │
|
||||||
|
┌─────────────────────────────────────────────────────────────────┐ │
|
||||||
|
│ 4. Build envelope with metadata │ │
|
||||||
|
│ - correlation_id, msg_id, timestamp │ │
|
||||||
|
│ - sender/receiver info │ │
|
||||||
|
│ - payloads array │ │
|
||||||
|
└─────────────────────────────────────────────────────────────────┘ │
|
||||||
|
│ │
|
||||||
|
▼ │
|
||||||
|
┌─────────────────────────────────────────────────────────────────┐ │
|
||||||
|
│ 5. Convert envelope to JSON string │ │
|
||||||
|
│ 6. Publish to NATS subject │ │
|
||||||
|
└─────────────────────────────────────────────────────────────────┘ │
|
||||||
|
│
|
||||||
|
┌─────────────────────────────────────────────────────────────────┐ │
|
||||||
|
│ 7. Return envelope and JSON string to caller │ │
|
||||||
|
└─────────────────────────────────────────────────────────────────┘ │
|
||||||
|
│
|
||||||
```
|
```
|
||||||
|
|
||||||
### Receiving Flow
|
### Receiving Flow
|
||||||
|
|
||||||
```mermaid
|
```
|
||||||
flowchart TD
|
┌─────────────────────────────────────────────────────────────────┐
|
||||||
A[NATS message arrives] --> B[Parse JSON envelope]
|
│ 1. NATS message arrives │
|
||||||
B --> C[Process each payload]
|
└─────────────────────────────────────────────────────────────────┘
|
||||||
C --> D{Check transport type}
|
│
|
||||||
D -->|direct| E[Extract Base64 data]
|
▼
|
||||||
D -->|link| F[Extract URL from data]
|
┌─────────────────────────────────────────────────────────────────┐
|
||||||
E --> G[Decode Base64]
|
│ 2. Parse JSON envelope │
|
||||||
F --> H[Fetch with exponential backoff]
|
└─────────────────────────────────────────────────────────────────┘
|
||||||
G --> I[Deserialize based on payload_type]
|
│
|
||||||
H --> I
|
▼
|
||||||
I --> J[Build payloads array]
|
┌─────────────────────────────────────────────────────────────────┐
|
||||||
J --> K[Return envelope with processed payloads]
|
│ 3. For each payload: │
|
||||||
|
│ - Check transport type │
|
||||||
style A fill:#f9f9f9,stroke:#333
|
└─────────────────────────────────────────────────────────────────┘
|
||||||
style D fill:#e0e7ff,stroke:#3b82f6
|
│
|
||||||
style K fill:#e0e7ff,stroke:#3b82f6
|
├─ transport == "direct" ──────────►┐
|
||||||
|
│ │
|
||||||
|
▼ ▼
|
||||||
|
┌─────────────────────────────────────────────────────────────────┐ │
|
||||||
|
│ 4. Direct Transport: │ │
|
||||||
|
│ - Extract Base64 data │ │
|
||||||
|
│ - Decode Base64 │ │
|
||||||
|
│ - Deserialize based on payload_type │ │
|
||||||
|
└─────────────────────────────────────────────────────────────────┘ │
|
||||||
|
│ │
|
||||||
|
▼ │
|
||||||
|
┌─────────────────────────────────────────────────────────────────┐ │
|
||||||
|
│ 5. Link Transport: │ │
|
||||||
|
│ - Extract URL from data │ │
|
||||||
|
│ - Fetch with exponential backoff │ │
|
||||||
|
│ - Deserialize based on payload_type │ │
|
||||||
|
└─────────────────────────────────────────────────────────────────┘ │
|
||||||
|
│ │
|
||||||
|
▼ │
|
||||||
|
┌─────────────────────────────────────────────────────────────────┐ │
|
||||||
|
│ 6. Replace payloads array with deserialized tuples │ │
|
||||||
|
│ - [(dataname, data, type), ...] │ │
|
||||||
|
└─────────────────────────────────────────────────────────────────┘ │
|
||||||
|
│
|
||||||
|
┌─────────────────────────────────────────────────────────────────┐
|
||||||
|
│ 7. Return envelope with processed payloads │
|
||||||
|
└─────────────────────────────────────────────────────────────────┘
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|||||||
Reference in New Issue
Block a user