Skip to content
Juvix imports

module arch.node.engines.pub_sub_topic_messages;

import arch.node.engines.net_registry_messages open;
import arch.node.types.storage open;
import arch.node.types.basics open;
import arch.node.types.crypto open;
import arch.node.types.identities open;
import arch.node.types.messages open;

Pub/Sub Topic Messages

These are the messages that the Pub/Sub Topic engine can receive/respond to.

Message interface

type PubSubTopicMsg :=
| PubSubTopicMsgForward TopicMsg
| PubSubTopicMsgSubRequest TopicSubRequest
| PubSubTopicMsgSubReply TopicSubReply
| PubSubTopicMsgUnsubRequest TopicUnsubRequest
| PubSubTopicMsgUnsubReply TopicUnsubReply;

Message types


TopicMsg

A message published in a topic by an authorized publisher, forwarded to the local node.

Auxiliary type

TopicMsgID

syntax alias TopicMsgID := Digest;

type TopicMsg :=
mkTopicMsg@{
publisher : PublisherID;
seq : Nat;
deps : List TopicMsgID;
seen : List TopicMsgID;
content : TopicMsgContent;
sig : Commitment;
};
Arguments
publisher
Publisher identity.
seq
Per-publisher sequence number.
deps
Earlier messages this message depends on.
seen
Independent messages recently seen.
content:
Encrypted TopicMsg.
sig
Signature by publisher over the topic ID and the above fields.

TopicMsgContent

type TopicMsgContent :=
| TopicMsgContentMsg ByteString
| TopicMsgContentChunk (Pair ByteString Chunk)
| TopicMsgContentChunkRef (Pair ByteString ChunkCommitment)
| TopicMsgContentAck TopicMsgAck;
TopicMsgContent constructors
TopicMsgContentMsg
Encrypted TopicMsg.
TopicMsgContentChunk
Chunk of an object. Pair of an encrypted SecretKey and a Chunk.
TopicMsgContentChunkRef
Reference to the root chunk of an object. Pair of an encrypted SecretKey and a ChunkCommitment.
TopicMsgContentAck
Acknowledgement of a TopicMsg.

TopicMsgAck

Acknowledgement of a TopicMsg with commitment to store it until the specified expiry date.

type TopicMsgAck :=
mkTopicMsgAck@{
expiry : AbsTime;
};
Arguments
expiry
Expiry date and time until the node commits to store the event.

TopicSubRequest

Pub/sub topic subscription request by a local engine or a remote node.

type TopicSubRequest :=
mkTopicSubRequest@{
topic : TopicID;
};

TopicSubReply

Reply to a TopicSubRequest.

Auxiliary type

TopicSubReplyOk

Subscription successful.

type TopicSubReplyOk := | TopicSubReplyOkSuccess;

TopicSubReplyError

Subscription failed.

type TopicSubReplyError := | TopicSubReplyErrorDenied;

TopicSubReply : Type := Result TopicSubReplyOk TopicSubReplyError;

TopicUnsubRequest

Pub/sub topic unsubscription request by a local engine or a remote node.

type TopicUnsubRequest :=
mkTopicUnsubRequest@{
topic : TopicID;
};

TopicUnsubReply

Unsubscription successful.

Auxiliary type

TopicUnsubReplyOk

type TopicUnsubReplyOk := | TopicUnsubReplyOkSuccess;

TopicUnsubReplyError

Unsubscription failed.

type TopicUnsubReplyError := | TopicUnsubReplyErrorNotSubscribed;

TopicUnsubReply : Type := Result TopicUnsubReplyOk TopicUnsubReplyError;

PubSubTopicMsg

All pub/sub topic messages.

type PubSubTopicMsg :=
| PubSubTopicMsgForward TopicMsg
| PubSubTopicMsgSubRequest TopicSubRequest
| PubSubTopicMsgSubReply TopicSubReply
| PubSubTopicMsgUnsubRequest TopicUnsubRequest
| PubSubTopicMsgUnsubReply TopicUnsubReply;

Engine components