Documentation ¶
Index ¶
- Variables
- func CalcMessageClock(lastObservedValue uint64, timeInMs uint64) uint64
- func EncodeMembershipUpdateMessage(value MembershipUpdateMessage) ([]byte, error)
- func EncodePairMessage(value PairMessage) ([]byte, error)
- func MessageID(author *ecdsa.PublicKey, data []byte) types.HexBytes
- func NewMessageDecoder(r io.Reader) *transit.Decoder
- func NewMessageEncoder(w io.Writer) *transit.Encoder
- func TimestampInMsFromTime(t time.Time) uint64
- func WrapMessageV1(payload []byte, messageType protobuf.ApplicationMetadataMessage_Type, ...) ([]byte, error)
- type ApplicationLayer
- type EncryptionLayer
- type Group
- func (g Group) AbridgedEvents() []MembershipUpdateEvent
- func (g Group) Admins() []string
- func (g Group) ChatID() string
- func (g Group) Color() string
- func (g Group) Creator() (string, error)
- func (g Group) Events() []MembershipUpdateEvent
- func (g Group) Image() []byte
- func (g Group) IsMember(id string) bool
- func (g Group) LastClockValue() uint64
- func (g Group) MemberPublicKeys() ([]*ecdsa.PublicKey, error)
- func (g Group) Members() []string
- func (g Group) Name() string
- func (g *Group) ProcessEvent(event MembershipUpdateEvent) error
- func (g *Group) ProcessEvents(events []MembershipUpdateEvent) error
- func (g Group) WasEverMember(id string) (bool, error)
- type MembershipUpdateEvent
- func MembershipUpdateEventFromProtobuf(chatID string, raw []byte) (*MembershipUpdateEvent, error)
- func MergeMembershipUpdateEvents(dest []MembershipUpdateEvent, src []MembershipUpdateEvent) []MembershipUpdateEvent
- func NewAdminRemovedEvent(admin string, clock uint64) MembershipUpdateEvent
- func NewAdminsAddedEvent(admins []string, clock uint64) MembershipUpdateEvent
- func NewChatCreatedEvent(name string, color string, clock uint64) MembershipUpdateEvent
- func NewColorChangedEvent(color string, clock uint64) MembershipUpdateEvent
- func NewImageChangedEvent(image []byte, clock uint64) MembershipUpdateEvent
- func NewMemberJoinedEvent(clock uint64) MembershipUpdateEvent
- func NewMemberRemovedEvent(member string, clock uint64) MembershipUpdateEvent
- func NewMembersAddedEvent(members []string, clock uint64) MembershipUpdateEvent
- func NewNameChangedEvent(name string, clock uint64) MembershipUpdateEvent
- type MembershipUpdateMessage
- type PairMessage
- type StatusMessage
- func (m *StatusMessage) Clone() (*StatusMessage, error)
- func (m *StatusMessage) HandleApplicationLayer() error
- func (m *StatusMessage) HandleEncryptionLayer(myKey *ecdsa.PrivateKey, senderKey *ecdsa.PublicKey, enc *encryption.Protocol, ...) error
- func (m *StatusMessage) HandleTransportLayer(wakuMessage *types.Message) error
- func (m *StatusMessage) MarshalJSON() ([]byte, error)
- func (m *StatusMessage) SigPubKey() *ecdsa.PublicKey
- type TransportLayer
Constants ¶
This section is empty.
Variables ¶
var ( // ErrInvalidDecodedValue means that the decoded message is of wrong type. // This might mean that the status message serialization tag changed. ErrInvalidDecodedValue = errors.New("invalid decoded value type") )
Functions ¶
func CalcMessageClock ¶
CalcMessageClock calculates a new clock value for Message. It is used to properly sort messages and accommodate the fact that time might be different on each device.
func EncodeMembershipUpdateMessage ¶
func EncodeMembershipUpdateMessage(value MembershipUpdateMessage) ([]byte, error)
EncodeMembershipUpdateMessage encodes a MembershipUpdateMessage using protobuf serialization.
func EncodePairMessage ¶
func EncodePairMessage(value PairMessage) ([]byte, error)
EncodePairMessage encodes a PairMessage using Transit serialization.
func MessageID ¶
MessageID calculates the messageID from author's compressed public key and not encrypted but encoded payload.
func NewMessageDecoder ¶
NewMessageDecoder returns a new Transit decoder that can deserialize Message structs. More about Transit: https://github.com/cognitect/transit-format
func NewMessageEncoder ¶
NewMessageEncoder returns a new Transit encoder that can encode Message values. More about Transit: https://github.com/cognitect/transit-format
func TimestampInMsFromTime ¶
TimestampInMsFromTime returns a TimestampInMs from a time.Time instance.
func WrapMessageV1 ¶
func WrapMessageV1(payload []byte, messageType protobuf.ApplicationMetadataMessage_Type, identity *ecdsa.PrivateKey) ([]byte, error)
WrapMessageV1 wraps a payload into a protobuf message and signs it if an identity is provided
Types ¶
type ApplicationLayer ¶ added in v0.171.12
type ApplicationLayer struct { // Payload after having been unwrapped from the application layer Payload []byte `json:"-"` ID types.HexBytes `json:"id"` SigPubKey *ecdsa.PublicKey `json:"-"` Type protobuf.ApplicationMetadataMessage_Type `json:"-"` }
ApplicationLayer is the topmost layer and represents the application message.
type EncryptionLayer ¶ added in v0.171.12
type EncryptionLayer struct { // Payload after having been processed by the encryption layer Payload []byte `json:"-"` Installations []*multidevice.Installation HashRatchetInfo []*encryption.HashRatchetInfo }
EncryptionLayer handles optional encryption. It is not mandatory and can be omitted, also its presence does not guarantee encryption.
type Group ¶
type Group struct {
// contains filtered or unexported fields
}
func NewGroupWithCreator ¶
func NewGroupWithEvents ¶
func NewGroupWithEvents(chatID string, events []MembershipUpdateEvent) (*Group, error)
func (Group) AbridgedEvents ¶ added in v0.69.0
func (g Group) AbridgedEvents() []MembershipUpdateEvent
AbridgedEvents returns the minimum set of events for a user to publish a post The events we want to keep: 1) Chat created 2) Latest color changed 3) Latest image changed 4) For each admin, the latest admins added event that contains them 5) For each member, the latest members added event that contains them 4 & 5, might bring removed admins or removed members, for those, we also need to keep the event that removes them
func (Group) Events ¶
func (g Group) Events() []MembershipUpdateEvent
func (Group) LastClockValue ¶
func (Group) MemberPublicKeys ¶ added in v0.171.6
func (*Group) ProcessEvent ¶
func (g *Group) ProcessEvent(event MembershipUpdateEvent) error
func (*Group) ProcessEvents ¶
func (g *Group) ProcessEvents(events []MembershipUpdateEvent) error
type MembershipUpdateEvent ¶
type MembershipUpdateEvent struct { Type protobuf.MembershipUpdateEvent_EventType `json:"type"` ClockValue uint64 `json:"clockValue"` Members []string `json:"members,omitempty"` // in "members-added" and "admins-added" events Name string `json:"name,omitempty"` // name of the group chat Color string `json:"color,omitempty"` // color of the group chat Image []byte `json:"image,omitempty"` // image of the group chat From string `json:"from,omitempty"` Signature []byte `json:"signature,omitempty"` ChatID string `json:"chatId"` RawPayload []byte `json:"rawPayload"` }
MembershipUpdateEvent contains an event information. Member and Members are hex-encoded values with 0x prefix.
func MembershipUpdateEventFromProtobuf ¶
func MembershipUpdateEventFromProtobuf(chatID string, raw []byte) (*MembershipUpdateEvent, error)
func MergeMembershipUpdateEvents ¶
func MergeMembershipUpdateEvents(dest []MembershipUpdateEvent, src []MembershipUpdateEvent) []MembershipUpdateEvent
func NewAdminRemovedEvent ¶
func NewAdminRemovedEvent(admin string, clock uint64) MembershipUpdateEvent
func NewAdminsAddedEvent ¶
func NewAdminsAddedEvent(admins []string, clock uint64) MembershipUpdateEvent
func NewChatCreatedEvent ¶
func NewChatCreatedEvent(name string, color string, clock uint64) MembershipUpdateEvent
func NewColorChangedEvent ¶ added in v0.105.1
func NewColorChangedEvent(color string, clock uint64) MembershipUpdateEvent
func NewImageChangedEvent ¶ added in v0.108.2
func NewImageChangedEvent(image []byte, clock uint64) MembershipUpdateEvent
func NewMemberJoinedEvent ¶
func NewMemberJoinedEvent(clock uint64) MembershipUpdateEvent
func NewMemberRemovedEvent ¶
func NewMemberRemovedEvent(member string, clock uint64) MembershipUpdateEvent
func NewMembersAddedEvent ¶
func NewMembersAddedEvent(members []string, clock uint64) MembershipUpdateEvent
func NewNameChangedEvent ¶
func NewNameChangedEvent(name string, clock uint64) MembershipUpdateEvent
func (*MembershipUpdateEvent) Equal ¶
func (u *MembershipUpdateEvent) Equal(update MembershipUpdateEvent) bool
func (*MembershipUpdateEvent) Sign ¶
func (u *MembershipUpdateEvent) Sign(key *ecdsa.PrivateKey) error
func (*MembershipUpdateEvent) ToProtobuf ¶
func (u *MembershipUpdateEvent) ToProtobuf() *protobuf.MembershipUpdateEvent
type MembershipUpdateMessage ¶
type MembershipUpdateMessage struct { ChatID string `json:"chatId"` // UUID concatenated with hex-encoded public key of the creator for the chat Events []MembershipUpdateEvent `json:"events"` Message *protobuf.ChatMessage `json:"-"` EmojiReaction *protobuf.EmojiReaction `json:"-"` }
MembershipUpdateMessage is a message used to propagate information about group membership changes. For more information, see https://github.com/status-im/specs/blob/master/status-group-chats-spec.md.
func MembershipUpdateMessageFromProtobuf ¶
func MembershipUpdateMessageFromProtobuf(raw *protobuf.MembershipUpdateMessage) (*MembershipUpdateMessage, error)
func (*MembershipUpdateMessage) ToProtobuf ¶
func (m *MembershipUpdateMessage) ToProtobuf() (*protobuf.MembershipUpdateMessage, error)
type PairMessage ¶
type PairMessage struct { InstallationID string `json:"installationId"` // The type of the device DeviceType string `json:"deviceType"` // Name the user set name Name string `json:"name"` // The FCMToken for mobile platforms FCMToken string `json:"fcmToken"` // not protocol defined fields ID []byte `json:"-"` }
PairMessage contains all message details.
func CreatePairMessage ¶
func CreatePairMessage(installationID string, name string, deviceType string, fcmToken string) PairMessage
CreatePairMessage creates a PairMessage which is used to pair devices.
func DecodePairMessage ¶
func DecodePairMessage(data []byte) (message PairMessage, err error)
DecodePairMessage decodes a raw payload to Message struct.
func (*PairMessage) MarshalJSON ¶
func (m *PairMessage) MarshalJSON() ([]byte, error)
type StatusMessage ¶
type StatusMessage struct { TransportLayer TransportLayer `json:"transportLayer"` EncryptionLayer EncryptionLayer `json:"encryptionLayer"` ApplicationLayer ApplicationLayer `json:"applicationLayer"` }
StatusMessage encapsulates all layers of the protocol
func (*StatusMessage) Clone ¶
func (m *StatusMessage) Clone() (*StatusMessage, error)
func (*StatusMessage) HandleApplicationLayer ¶ added in v0.171.12
func (m *StatusMessage) HandleApplicationLayer() error
func (*StatusMessage) HandleEncryptionLayer ¶ added in v0.171.12
func (m *StatusMessage) HandleEncryptionLayer(myKey *ecdsa.PrivateKey, senderKey *ecdsa.PublicKey, enc *encryption.Protocol, skipNegotiation bool) error
func (*StatusMessage) HandleTransportLayer ¶ added in v0.171.12
func (m *StatusMessage) HandleTransportLayer(wakuMessage *types.Message) error
func (*StatusMessage) MarshalJSON ¶
func (m *StatusMessage) MarshalJSON() ([]byte, error)
Temporary JSON marshaling for those messages that are not yet processed by the go code
func (*StatusMessage) SigPubKey ¶
func (m *StatusMessage) SigPubKey() *ecdsa.PublicKey
SigPubKey returns the most important signature, from the application layer to transport
type TransportLayer ¶ added in v0.171.12
type TransportLayer struct { // Payload as received from the transport layer Payload []byte `json:"-"` Hash []byte `json:"-"` SigPubKey *ecdsa.PublicKey `json:"-"` Dst *ecdsa.PublicKey Message *types.Message `json:"message"` }
TransportLayer is the lowest layer and represents waku message.