mirror of
https://github.com/logos-messaging/js-waku.git
synced 2026-01-06 07:43:06 +00:00
123 lines
4.1 KiB
Markdown
123 lines
4.1 KiB
Markdown
|
|
```mermaid
|
||
|
|
graph TB
|
||
|
|
%% ============== Style definitions ==============
|
||
|
|
classDef wireType fill:#e1f5fe,stroke:#01579b,stroke-width:2px
|
||
|
|
classDef sdkType fill:#e8f5e9,stroke:#1b5e20,stroke-width:2px
|
||
|
|
classDef coreType fill:#f3e5f5,stroke:#4a148c,stroke-width:2px
|
||
|
|
classDef processNode fill:#fff3e0,stroke:#ef6c00,stroke-width:2px
|
||
|
|
classDef externalNode fill:#fce4ec,stroke:#ad1457,stroke-width:2px
|
||
|
|
classDef functionNode fill:#ffebee,stroke:#c62828,stroke-width:1px
|
||
|
|
classDef userNode fill:#e0f2f1,stroke:#00695c,stroke-width:2px
|
||
|
|
|
||
|
|
%% ============== Nodes (no layer grouping) ==============
|
||
|
|
%% User Interface
|
||
|
|
User[[User Application]]:::userNode
|
||
|
|
|
||
|
|
%% Wire Types (Protocol)
|
||
|
|
LPR[/PushRequest/]:::wireType
|
||
|
|
LPS[/PushResponse/]:::wireType
|
||
|
|
LPRpc[/PushRpc/]:::wireType
|
||
|
|
WMsg[/WakuMessage/]:::wireType
|
||
|
|
|
||
|
|
%% SDK/API Types
|
||
|
|
IMsg[/IMessage/]:::sdkType
|
||
|
|
IEnc[/IEncoder/]:::sdkType
|
||
|
|
SDKRes[/SDKProtocolResult/]:::sdkType
|
||
|
|
SOptions[/ISendOptions/]:::sdkType
|
||
|
|
|
||
|
|
%% Core/Internal Types
|
||
|
|
CPR[/CoreProtocolResult/]:::coreType
|
||
|
|
|
||
|
|
%% Components/Processes
|
||
|
|
SDK_LP{{LightPush}}:::processNode
|
||
|
|
SDK_PM{{PeerManager}}:::processNode
|
||
|
|
SDK_RM{{RetryManager}}:::processNode
|
||
|
|
CORE_LP{{LightPushCore}}:::processNode
|
||
|
|
CORE_SM{{StreamManager}}:::processNode
|
||
|
|
|
||
|
|
%% External Systems
|
||
|
|
Libp2p[/libp2p\]:::externalNode
|
||
|
|
Remote[/Remote Waku Node\]:::externalNode
|
||
|
|
|
||
|
|
%% Functions (Methods)
|
||
|
|
send1(LightPush.send):::functionNode
|
||
|
|
getPeers(PeerManager.getPeers):::functionNode
|
||
|
|
aggregate(SDK aggregate results):::functionNode
|
||
|
|
retryPush(RetryManager.push):::functionNode
|
||
|
|
|
||
|
|
send2(LightPushCore.send):::functionNode
|
||
|
|
prep(preparePushMessage):::functionNode
|
||
|
|
sizeCheck(isMessageSizeUnderCap):::functionNode
|
||
|
|
toProto(toProtoObj):::functionNode
|
||
|
|
createPush(PushRpc.createRequest):::functionNode
|
||
|
|
|
||
|
|
getStream(StreamManager.getStream):::functionNode
|
||
|
|
lpEncode(lp.encode):::functionNode
|
||
|
|
lpDecode(lp.decode):::functionNode
|
||
|
|
encRpc(PushRpc.encode):::functionNode
|
||
|
|
decRpc(PushRpc.decode):::functionNode
|
||
|
|
|
||
|
|
%% ============== Flows ==============
|
||
|
|
%% User input to SDK send
|
||
|
|
User --> send1 --> SDK_LP --> getPeers --> SDK_PM
|
||
|
|
IEnc -.-> send1
|
||
|
|
IMsg -.-> send1
|
||
|
|
SOptions -.-> send1
|
||
|
|
|
||
|
|
%% SDK selects peers and calls Core send (per peer)
|
||
|
|
SDK_LP --> send2 --> CORE_LP
|
||
|
|
|
||
|
|
%% Core prepare and encode
|
||
|
|
send2 --> prep
|
||
|
|
prep --> sizeCheck
|
||
|
|
prep --> toProto
|
||
|
|
toProto --> WMsg
|
||
|
|
prep --> createPush --> LPRpc
|
||
|
|
|
||
|
|
%% Stream and wire path
|
||
|
|
send2 --> getStream --> CORE_SM
|
||
|
|
LPRpc --> encRpc --> lpEncode --> Libp2p --> Remote
|
||
|
|
|
||
|
|
%% Response path back
|
||
|
|
Remote --> Libp2p --> lpDecode --> decRpc --> LPRpc
|
||
|
|
decRpc --> LPS --> CPR --> SDK_LP
|
||
|
|
|
||
|
|
%% SDK aggregates results to SDKProtocolResult
|
||
|
|
SDK_LP --> aggregate --> SDKRes --> User
|
||
|
|
|
||
|
|
%% Auto-retry side path
|
||
|
|
aggregate --> retryPush --> SDK_RM --> send2
|
||
|
|
|
||
|
|
%% Parameter flows
|
||
|
|
IEnc -.-> toProto
|
||
|
|
IMsg -.-> toProto
|
||
|
|
|
||
|
|
%% Emphasis styles to make components and externals larger/more central
|
||
|
|
style SDK_LP font-size:18px,stroke-width:3px
|
||
|
|
style SDK_PM font-size:18px,stroke-width:3px
|
||
|
|
style SDK_RM font-size:18px,stroke-width:3px
|
||
|
|
style CORE_LP font-size:18px,stroke-width:3px
|
||
|
|
style CORE_SM font-size:18px,stroke-width:3px
|
||
|
|
style Libp2p font-size:18px,stroke-width:3px
|
||
|
|
style Remote font-size:18px,stroke-width:3px
|
||
|
|
|
||
|
|
%% ============== Legend (shapes + colors) ==============
|
||
|
|
subgraph Legend
|
||
|
|
direction TB
|
||
|
|
%% Shape legend (with corresponding colors)
|
||
|
|
L1[[User Interface]]:::userNode
|
||
|
|
L2{{Component}}:::processNode
|
||
|
|
L3[/External System\]:::externalNode
|
||
|
|
L4[/Data Type/]:::wireType
|
||
|
|
L5(Function):::functionNode
|
||
|
|
%% Color legend
|
||
|
|
LC_wire[Wire Format/Protocol]:::wireType
|
||
|
|
LC_sdk[SDK/API Types]:::sdkType
|
||
|
|
LC_core[Core/Internal Types]:::coreType
|
||
|
|
LC_process[Components/Processes]:::processNode
|
||
|
|
LC_external[External Systems]:::externalNode
|
||
|
|
LC_function[Functions/Methods]:::functionNode
|
||
|
|
LC_user[User Interface]:::userNode
|
||
|
|
end
|
||
|
|
```
|