js-waku/store_chart.md

3.8 KiB

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)
    SQReq[/StoreQueryRequest/]:::wireType
    SQResp[/StoreQueryResponse/]:::wireType
    WMsg[/WakuMessage/]:::wireType

    %% SDK/API Types
    IDMsg[/IDecodedMessage/]:::sdkType
    IDec[/IDecoder<T>/]:::sdkType
    QParams[/QueryRequestParams/]:::sdkType

    %% Core/Internal Types
    Cursor[/StoreCursor/]:::coreType

    %% Components/Processes
    SDK_Store{{Store}}:::processNode
    SDK_PM{{PeerManager}}:::processNode
    CORE_Store{{StoreCore}}:::processNode
    CORE_SM{{StreamManager}}:::processNode

    %% External Systems
    Libp2p[/libp2p\]:::externalNode
    Remote[/Remote Waku Store Node\]:::externalNode

    %% Functions (Methods)
    queryGen(Store.queryGenerator):::functionNode
    buildParams(buildQueryParams):::functionNode
    getPeer(Store.getPeerToUse):::functionNode

    queryPerPage(StoreCore.queryPerPage):::functionNode
    getStream(StreamManager.getStream):::functionNode
    encodeReq(StoreQueryRequest.create):::functionNode
    lpEncode(lp.encode):::functionNode
    lpDecode(lp.decode):::functionNode
    decodeResp(StoreQueryResponse.decode):::functionNode
    toProtoMsg(toProtoMessage):::functionNode
    decodeFromProto(decoder.fromProtoObj):::functionNode

    %% ============== Flows ==============
    %% User triggers query generator
    User --> queryGen --> SDK_Store --> buildParams
    IDec -.-> queryGen
    QParams -.-> queryGen

    %% Select peer and invoke core per query option
    buildParams --> getPeer --> SDK_PM
    SDK_Store --> queryPerPage --> CORE_Store

    %% Core: build request and stream
    queryPerPage --> encodeReq --> SQReq
    queryPerPage --> getStream --> CORE_SM

    %% Send over libp2p
    SQReq --> lpEncode --> Libp2p --> Remote

    %% Receive and decode
    Remote --> Libp2p --> lpDecode --> decodeResp --> SQResp

    %% Map to decoder promises (per message)
    SQResp -.-> WMsg
    WMsg -.-> toProtoMsg
    toProtoMsg --> decodeFromProto --> IDMsg

    %% Yield page of promises back to SDK and user
    CORE_Store --> SDK_Store --> User

    %% Emphasis styles to make components and externals larger/more central
    style SDK_Store font-size:18px,stroke-width:3px
    style SDK_PM font-size:18px,stroke-width:3px
    style CORE_Store 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
    ```