reticulum-js
    Preparing search index...

    Class LXMRouter

    Handles LXMF routing and message processing.

    LXMF Router for managing incoming and outgoing messages

    Hierarchy

    • EventTarget
      • LXMRouter
    Index
    deliveryDest: Destination | null
    deliveryPerTransferLimit: number

    Client per-transfer download limit (KB) advertised in /get requests.

    displayName: string | null
    identifiedLinks: Set<any>
    identity: Identity
    outboundPropagationLink: Link | null
    outboundPropagationNode: Uint8Array<ArrayBufferLike> | null
    peers: Map<string, LXMPeer>
    pendingLinks: Map<any, any>
    pendingMessages: Map<any, any>
    processedTransientIds: Map<string, number>
    propagationDest: Destination | null
    propagationNode: PropagationNode | null
    stampCost: number | null
    • The addEventListener() method of the EventTarget interface sets up a function that will be called whenever the specified event is delivered to the target.

      MDN Reference

      Parameters

      • type: string
      • callback: EventListenerOrEventListenerObject | null
      • Optionaloptions: boolean | AddEventListenerOptions

      Returns void

    • Announces the lxmf.delivery destination with the given display name.

      Builds the §4.3 msgpack app_data ([name(bin8), stamp_cost, [SF_COMPRESSION]]) and attaches it to the identity so Destination.announce signs it as part of the announce body.

      Parameters

      • displayName: string

        Human-readable node name shown to peers.

      • OptionalstampCost: number | null = null

        Active stamp cost (1-254), or null to advertise stamping as disabled.

      Returns Promise<void>

    • The dispatchEvent() method of the EventTarget sends an Event to the object, (synchronously) invoking the affected event listeners in the appropriate order. The normal event processing rules (including the capturing and optional bubbling phase) also apply to events dispatched manually with dispatchEvent().

      MDN Reference

      Parameters

      • event: Event

      Returns boolean

    • Enables the propagation-node role (§5.3): creates the lxmf.propagation destination, registers the /get message-download handler, and ingests submitted messages received via link Resources.

      The node stores propagated messages addressed to other identities and serves them to clients over /get; messages addressed to this router's own delivery identity are locally delivered (decrypted + dispatched as a message event). Returns the PropagationNode for direct access (e.g. inspecting PropagationNode.store).

      Call announcePropagationNode afterwards to broadcast the node.

      Parameters

      • Optionaloptions: PropagationNodeOptions = {}

      Returns Promise<PropagationNode>

    • Ingests a paper message delivered as an lxm:// URI (LXMRouter.ingest_lxm_uri).

      The URI body is base64-decoded into the paper payload, de-duplicated by its transient_id (so re-ingesting the same QR/URI is a no-op), decrypted with the local lxmf.delivery destination, and dispatched through the same message event path as a network-delivered message. Paper messages always disable stamp enforcement (LXMRouter.lxmf_propagation is_paper_message).

      The sender's signature is verified when their identity is already known (recalled from a prior announce); otherwise the message is still delivered with an unverified signature, exactly like the Python reference.

      Parameters

      • uri: string

        The lxm:// paper message URI.

      Returns Promise<LXMessage | null>

      The reconstructed message, or null when the URI is not addressed to this node (decryption fails) or was already ingested.

    • Establishes (or updates) a peering relationship with another propagation node (LXMRouter.peer). The peer's advertised limits and costs are read from its app_data; messages this node stores are then offered to it on the next syncPeers.

      Parameters

      • destinationHash: Uint8Array<ArrayBufferLike>

        Peer's lxmf.propagation hash.

      • config: {
            metadata?: Map<number, Uint8Array<ArrayBufferLike>> | null;
            peeringCost: number;
            perSyncLimitKb?: number | null;
            perTransferLimitKb?: number | null;
            stampCost: number;
            stampCostFlexibility: number;
        }
        • Optionalmetadata?: Map<number, Uint8Array<ArrayBufferLike>> | null

          Node metadata map.

        • peeringCost: number

          Peer's peering cost (≤ MAX_PEERING_COST).

        • OptionalperSyncLimitKb?: number | null

          Per-sync cumulative limit.

        • OptionalperTransferLimitKb?: number | null

          Per-message transfer limit.

        • stampCost: number

          Peer's propagation stamp cost.

        • stampCostFlexibility: number

          Peer's stamp cost flexibility.

      Returns LXMPeer | null

      the peer, or null if peering was rejected.

    • Re-processes every parked message whose sender identity may now be known (typically called after a just-validated announce made a previously- unknown identity available — first-contact opportunistic delivery).

      Each entry is fed back through _processIncomingMessage: if the identity is still unknown it is re-parked (without re-requesting the path, guarded by alreadyParked), otherwise it is verified and dispatched. Safe and cheap to call when nothing is parked.

      Returns Promise<void>

    • Call this when a new Identity is cached (e.g., in your IDENTIFY handler). It checks if any parked messages are now ready for processing.

      Pass null to re-process an opportunistic (linkless) parked message.

      Parameters

      • linkId: Uint8Array<ArrayBufferLike> | null

      Returns Promise<void>

    • The removeEventListener() method of the EventTarget interface removes an event listener previously registered with EventTarget.addEventListener() from the target. The event listener to be removed is identified using a combination of the event type, the event listener function itself, and various optional options that may affect the matching process; see Matching event listeners for removal.

      MDN Reference

      Parameters

      • type: string
      • callback: EventListenerOrEventListenerObject | null
      • Optionaloptions: boolean | EventListenerOptions

      Returns void

    • Serializes and sends an LXMF message.

      When delivering over a link, this waits for the link to become ACTIVE and then sends LINKIDENTIFY (once per initiator link) before the message DATA — Python LXMF otherwise drops packets that arrive before identify.

      Parameters

      • message: LXMessage
      • senderIdentity: Identity
      • linkId: Uint8Array<ArrayBufferLike> | null

      Returns Promise<void>

    • Sets the propagation node to submit messages to and sync from, by its lxmf.propagation destination hash. The node's identity/app_data must be learned from an announce before submit/sync can run.

      Parameters

      • destinationHash: Uint8Array<ArrayBufferLike>

      Returns void

    • Submits a message to the configured propagation node for store-and-forward delivery (LXMF.md §5.8 / LXMessage PROPAGATED).

      Packs the message into propagation form (dest_hash ‖ E(src‖sig‖payload), §5.3), appends a propagation stamp meeting the node's advertised cost, and sends the msgpack([time, [lxmf_data]]) container to the node as a Link Resource. The node stores it until the recipient syncs.

      Parameters

      • message: LXMessage
      • senderIdentity: Identity
      • Optionaloptions: { stampCost?: number } = {}

        Override the stamp cost (defaults to the node's advertised cost, then PROPAGATION_COST).

      Returns Promise<{ stampCost: number; transientId: Uint8Array }>

    • Downloads messages addressed to identity from the configured propagation node (LXMRouter.request_messages_from_propagation_node).

      Drives the /get exchange: list available transient_ids, request those not already held, decrypt + dispatch each, then ack so the node purges them. Resolves with counts of received / duplicate messages.

      Parameters

      • identity: Identity

        The recipient identity to identify as (so the node serves our messages).

      • OptionalmaxMessages: number = ALL_MESSAGES

        Cap on messages fetched.

      Returns Promise<{ duplicates: number; received: number }>

    • Runs one outbound sync pass against every peered node. Resolves when all peers have completed (or postponed) their sync.

      Returns Promise<void>

    • Breaks a peering relationship (LXMRouter.unpeer).

      Parameters

      • destinationHash: Uint8Array<ArrayBufferLike>

      Returns void