appservice

package
v0.21.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 16, 2024 License: MPL-2.0 Imports: 31 Imported by: 20

Documentation

Index

Constants

View Source
const (
	WebsocketCloseConnReplaced       = 4001
	WebsocketCloseTxnNotAcknowledged = 4002
)
View Source
const DoublePuppetKey = "fi.mau.double_puppet_source"
View Source
const DoublePuppetTSKey = "fi.mau.double_puppet_ts"
View Source
const WebsocketCommandHTTPProxy = "http_proxy"

Variables

View Source
var (
	ErrWebsocketManualStop   = errors.New("the websocket was disconnected manually")
	ErrWebsocketOverridden   = errors.New("a new call to StartWebsocket overrode the previous connection")
	ErrWebsocketUnknownError = errors.New("an unknown error occurred")

	ErrWebsocketNotConnected = errors.New("websocket not connected")
	ErrWebsocketClosed       = errors.New("websocket closed before response received")
)
View Source
var EventChannelSize = 64

EventChannelSize is the size for the Events channel in Appservice instances.

View Source
var OTKChannelSize = 64

Functions

func Respond

func Respond(w http.ResponseWriter, data interface{}) error

Respond responds to a HTTP request with a JSON object.

func WriteBlankOK

func WriteBlankOK(w http.ResponseWriter)

WriteBlankOK writes a blank OK message as a reply to a HTTP request.

Types

type AppService

type AppService struct {
	HomeserverDomain string

	Host HostConfig

	Registration *Registration
	Log          zerolog.Logger

	Events         chan *event.Event
	ToDeviceEvents chan *event.Event
	DeviceLists    chan *mautrix.DeviceLists
	OTKCounts      chan *mautrix.OTKCount
	QueryHandler   QueryHandler
	StateStore     StateStore

	Router    *mux.Router
	UserAgent string

	HTTPClient *http.Client

	SpecVersions *mautrix.RespVersions

	DefaultHTTPRetries int

	Live  bool
	Ready bool

	StopWebsocket func(error)

	// ProcessID is an identifier sent to the websocket proxy for debugging connections
	ProcessID string

	WebsocketTransactionHandler WebsocketTransactionHandler

	DoublePuppetValue string
	GetProfile        func(userID id.UserID, roomID id.RoomID) *event.MemberEventContent
	// contains filtered or unexported fields
}

AppService is the main config for all appservices. It also serves as the appservice instance struct.

func Create

func Create() *AppService

Create creates a blank appservice instance.

func CreateFull added in v0.18.0

func CreateFull(opts CreateOpts) (*AppService, error)

CreateFull creates a fully configured appservice instance that can be [Start]ed and used directly.

func (*AppService) BotClient

func (as *AppService) BotClient() *mautrix.Client

BotClient returns the mautrix.Client instance for the appservice's sender_localpart user.

Like with the generic Client method, AppService.BotIntent should be preferred over this.

func (*AppService) BotIntent

func (as *AppService) BotIntent() *IntentAPI

BotIntent returns an IntentAPI object for the appservice's sender_localpart user.

func (*AppService) BotMXID

func (as *AppService) BotMXID() id.UserID

BotMXID returns the user ID corresponding to the appservice's sender_localpart

func (*AppService) CheckServerToken

func (as *AppService) CheckServerToken(w http.ResponseWriter, r *http.Request) (isValid bool)

CheckServerToken checks if the given request originated from the Matrix homeserver.

func (*AppService) Client

func (as *AppService) Client(userID id.UserID) *mautrix.Client

Client returns the mautrix.Client instance for the given user ID.

Unlike AppService.Intent, this does not do any validation, and will always return a value. Usually you should prefer creating intents and using intent methods over direct client methods. You can always access the client inside an intent with [IntentAPI.Client].

func (*AppService) GetLive added in v0.9.21

func (as *AppService) GetLive(w http.ResponseWriter, r *http.Request)

func (*AppService) GetReady added in v0.9.21

func (as *AppService) GetReady(w http.ResponseWriter, r *http.Request)

func (*AppService) GetRoom

func (as *AppService) GetRoom(w http.ResponseWriter, r *http.Request)

GetRoom handles a /rooms GET call from the homeserver.

func (*AppService) GetUser

func (as *AppService) GetUser(w http.ResponseWriter, r *http.Request)

GetUser handles a /users GET call from the homeserver.

func (*AppService) HasWebsocket added in v0.10.3

func (as *AppService) HasWebsocket() bool

func (*AppService) Intent

func (as *AppService) Intent(userID id.UserID) *IntentAPI

Intent returns an IntentAPI object for the given user ID.

This will return nil if the given user ID has an empty localpart, or if the server name is not the same as the appservice's HomeserverDomain. It does not currently validate that the given user ID is actually in the appservice's namespace. Validation may be added later.

func (*AppService) NewExternalMautrixClient added in v0.15.0

func (as *AppService) NewExternalMautrixClient(userID id.UserID, token string, homeserverURL string) (*mautrix.Client, error)

NewExternalMautrixClient creates a new mautrix.Client instance for an external user, with a token and homeserver URL separate from the main appservice.

This is primarily meant to facilitate double puppeting in bridges, and is used by [bridge.doublePuppetUtil]. Non-bridge appservices will likely not need this.

func (*AppService) NewIntentAPI

func (as *AppService) NewIntentAPI(localpart string) *IntentAPI

func (*AppService) NewMautrixClient added in v0.15.0

func (as *AppService) NewMautrixClient(userID id.UserID) *mautrix.Client

NewMautrixClient creates a new mautrix.Client instance for the given user ID.

This does not do any validation, and it does not cache the client. Usually you should prefer AppService.Client or AppService.Intent over this method.

func (*AppService) PostPing added in v0.15.0

func (as *AppService) PostPing(w http.ResponseWriter, r *http.Request)

func (*AppService) PrepareWebsocket added in v0.9.2

func (as *AppService) PrepareWebsocket()

func (*AppService) PutTransaction

func (as *AppService) PutTransaction(w http.ResponseWriter, r *http.Request)

PutTransaction handles a /transactions PUT call from the homeserver.

func (*AppService) RequestWebsocket added in v0.9.15

func (as *AppService) RequestWebsocket(ctx context.Context, cmd *WebsocketRequest, response interface{}) error

func (*AppService) Save

func (as *AppService) Save(path string) error

Save saves this config into a file at the given path.

func (*AppService) SendWebsocket added in v0.9.2

func (as *AppService) SendWebsocket(cmd *WebsocketRequest) error

func (*AppService) SetHomeserverURL added in v0.15.0

func (as *AppService) SetHomeserverURL(homeserverURL string) error

SetHomeserverURL updates the appservice's homeserver URL.

Note that this does not affect already-created IntentAPI or mautrix.Client objects, so it should not be called after Intent or Client are called.

func (*AppService) SetWebsocketCommandHandler added in v0.10.0

func (as *AppService) SetWebsocketCommandHandler(cmd string, handler WebsocketHandler)

func (*AppService) Start

func (as *AppService) Start()

Start starts the HTTP server that listens for calls from the Matrix homeserver.

func (*AppService) StartWebsocket added in v0.8.1

func (as *AppService) StartWebsocket(baseURL string, onConnect func()) error

func (*AppService) Stop

func (as *AppService) Stop()

func (*AppService) WebsocketHTTPProxy added in v0.16.0

func (as *AppService) WebsocketHTTPProxy(cmd WebsocketCommand) (bool, interface{})

func (*AppService) YAML

func (as *AppService) YAML() (string, error)

YAML returns the config in YAML format.

type CloseCommand added in v0.9.9

type CloseCommand struct {
	Code    int                    `json:"-"`
	Command string                 `json:"command"`
	Status  MeowWebsocketCloseCode `json:"status"`
}

func (CloseCommand) Error added in v0.9.9

func (cc CloseCommand) Error() string

type CreateOpts added in v0.18.0

type CreateOpts struct {
	// Required, the registration file data for this appservice.
	Registration *Registration
	// Required, the homeserver's server_name.
	HomeserverDomain string
	// Required, the homeserver URL to connect to. Should be either https://address or unix:path
	HomeserverURL string
	// Required if you want to use the standard HTTP server, optional for websockets (non-standard)
	HostConfig HostConfig
	// Optional, defaults to a memory state store
	StateStore StateStore
}

CreateOpts contains the options for initializing a new AppService instance.

type DeviceListHandler added in v0.9.15

type DeviceListHandler = func(ctx context.Context, lists *mautrix.DeviceLists, since string)

type EnsureJoinedParams added in v0.10.11

type EnsureJoinedParams struct {
	IgnoreCache bool
	BotOverride *mautrix.Client
}

type Error

type Error struct {
	HTTPStatus int       `json:"-"`
	ErrorCode  ErrorCode `json:"errcode"`
	Message    string    `json:"error"`
}

Error represents a Matrix protocol error.

func (Error) Write

func (err Error) Write(w http.ResponseWriter)

type ErrorCode

type ErrorCode string

ErrorCode is the machine-readable code in an Error.

const (
	ErrUnknownToken ErrorCode = "M_UNKNOWN_TOKEN"
	ErrBadJSON      ErrorCode = "M_BAD_JSON"
	ErrNotJSON      ErrorCode = "M_NOT_JSON"
	ErrUnknown      ErrorCode = "M_UNKNOWN"
)

Native ErrorCodes

const (
	ErrNoTransactionID ErrorCode = "NET.MAUNIUM.NO_TRANSACTION_ID"
)

Custom ErrorCodes

type ErrorResponse added in v0.8.1

type ErrorResponse struct {
	Code    string `json:"code"`
	Message string `json:"message"`
}

func (*ErrorResponse) Error added in v0.8.1

func (er *ErrorResponse) Error() string

type EventHandler added in v0.5.0

type EventHandler = func(ctx context.Context, evt *event.Event)

type EventListener

type EventListener func(evt *event.Event)

EventListener is a function that receives events.

type EventProcessor

type EventProcessor struct {
	ExecMode ExecMode

	ExecSyncWarnTime time.Duration
	ExecSyncTimeout  time.Duration
	// contains filtered or unexported fields
}

func NewEventProcessor

func NewEventProcessor(as *AppService) *EventProcessor

func (*EventProcessor) Dispatch

func (ep *EventProcessor) Dispatch(ctx context.Context, evt *event.Event)

func (*EventProcessor) DispatchDeviceList added in v0.9.15

func (ep *EventProcessor) DispatchDeviceList(ctx context.Context, dl *mautrix.DeviceLists)

func (*EventProcessor) DispatchOTK added in v0.9.15

func (ep *EventProcessor) DispatchOTK(ctx context.Context, otk *mautrix.OTKCount)

func (*EventProcessor) On

func (ep *EventProcessor) On(evtType event.Type, handler EventHandler)

func (*EventProcessor) OnDeviceList added in v0.9.15

func (ep *EventProcessor) OnDeviceList(handler DeviceListHandler)

func (*EventProcessor) OnOTK added in v0.9.15

func (ep *EventProcessor) OnOTK(handler OTKHandler)

func (*EventProcessor) PrependHandler added in v0.12.0

func (ep *EventProcessor) PrependHandler(evtType event.Type, handler EventHandler)

func (*EventProcessor) Start

func (ep *EventProcessor) Start(ctx context.Context)

func (*EventProcessor) Stop

func (ep *EventProcessor) Stop()

type ExecMode

type ExecMode uint8
const (
	AsyncHandlers ExecMode = iota
	AsyncLoop
	Sync
)

type FallbackKeyMap added in v0.12.4

type FallbackKeyMap = map[id.UserID]map[id.DeviceID][]id.KeyAlgorithm

type HTTPProxyRequest added in v0.16.0

type HTTPProxyRequest struct {
	Method  string          `json:"method"`
	Path    string          `json:"path"`
	Query   string          `json:"query"`
	Headers http.Header     `json:"headers"`
	Body    json.RawMessage `json:"body"`
}

type HTTPProxyResponse added in v0.16.0

type HTTPProxyResponse struct {
	Status  int             `json:"status"`
	Headers http.Header     `json:"headers"`
	Body    json.RawMessage `json:"body"`
	// contains filtered or unexported fields
}

func (*HTTPProxyResponse) Header added in v0.16.0

func (p *HTTPProxyResponse) Header() http.Header

func (*HTTPProxyResponse) Write added in v0.16.0

func (p *HTTPProxyResponse) Write(bytes []byte) (int, error)

func (*HTTPProxyResponse) WriteHeader added in v0.16.0

func (p *HTTPProxyResponse) WriteHeader(statusCode int)

type HostConfig

type HostConfig struct {
	// Hostname can be an IP address or an absolute path for a unix socket.
	Hostname string `yaml:"hostname"`
	// Port is required when Hostname is an IP address, optional for unix sockets
	Port uint16 `yaml:"port"`

	TLSKey  string `yaml:"tls_key,omitempty"`
	TLSCert string `yaml:"tls_cert,omitempty"`
}

HostConfig contains info about how to host the appservice.

func (*HostConfig) Address

func (hc *HostConfig) Address() string

Address gets the whole address of the Appservice.

func (*HostConfig) IsConfigured added in v0.15.0

func (hc *HostConfig) IsConfigured() bool

func (*HostConfig) IsUnixSocket added in v0.15.0

func (hc *HostConfig) IsUnixSocket() bool

type IntentAPI

type IntentAPI struct {
	*mautrix.Client

	Localpart string
	UserID    id.UserID

	IsCustomPuppet bool
	// contains filtered or unexported fields
}

func (*IntentAPI) AddDoublePuppetValue added in v0.12.0

func (intent *IntentAPI) AddDoublePuppetValue(into any) any

func (*IntentAPI) AddDoublePuppetValueWithTS added in v0.19.0

func (intent *IntentAPI) AddDoublePuppetValueWithTS(into any, ts int64) any

func (*IntentAPI) BanUser added in v0.10.11

func (intent *IntentAPI) BanUser(ctx context.Context, roomID id.RoomID, req *mautrix.ReqBanUser, extraContent ...map[string]interface{}) (resp *mautrix.RespBanUser, err error)

func (*IntentAPI) EnsureInvited

func (intent *IntentAPI) EnsureInvited(ctx context.Context, roomID id.RoomID, userID id.UserID) error

func (*IntentAPI) EnsureJoined

func (intent *IntentAPI) EnsureJoined(ctx context.Context, roomID id.RoomID, extra ...EnsureJoinedParams) error

func (*IntentAPI) EnsureRegistered

func (intent *IntentAPI) EnsureRegistered(ctx context.Context) error

func (*IntentAPI) InviteUser added in v0.10.11

func (intent *IntentAPI) InviteUser(ctx context.Context, roomID id.RoomID, req *mautrix.ReqInviteUser, extraContent ...map[string]interface{}) (resp *mautrix.RespInviteUser, err error)

func (*IntentAPI) JoinRoomByID added in v0.12.0

func (intent *IntentAPI) JoinRoomByID(ctx context.Context, roomID id.RoomID, extraContent ...map[string]interface{}) (resp *mautrix.RespJoinRoom, err error)

func (*IntentAPI) KickUser added in v0.10.11

func (intent *IntentAPI) KickUser(ctx context.Context, roomID id.RoomID, req *mautrix.ReqKickUser, extraContent ...map[string]interface{}) (resp *mautrix.RespKickUser, err error)

func (*IntentAPI) LeaveRoom added in v0.12.0

func (intent *IntentAPI) LeaveRoom(ctx context.Context, roomID id.RoomID, extra ...interface{}) (resp *mautrix.RespLeaveRoom, err error)

func (*IntentAPI) Member

func (intent *IntentAPI) Member(ctx context.Context, roomID id.RoomID, userID id.UserID) *event.MemberEventContent

func (*IntentAPI) PowerLevels

func (intent *IntentAPI) PowerLevels(ctx context.Context, roomID id.RoomID) (pl *event.PowerLevelsEventContent, err error)

func (*IntentAPI) RedactEvent

func (intent *IntentAPI) RedactEvent(ctx context.Context, roomID id.RoomID, eventID id.EventID, extra ...mautrix.ReqRedact) (*mautrix.RespSendEvent, error)

func (*IntentAPI) Register

func (intent *IntentAPI) Register(ctx context.Context) error

func (*IntentAPI) SendCustomMembershipEvent added in v0.12.0

func (intent *IntentAPI) SendCustomMembershipEvent(ctx context.Context, roomID id.RoomID, target id.UserID, membership event.Membership, reason string, extraContent ...map[string]interface{}) (*mautrix.RespSendEvent, error)

func (*IntentAPI) SendMassagedMessageEvent

func (intent *IntentAPI) SendMassagedMessageEvent(ctx context.Context, roomID id.RoomID, eventType event.Type, contentJSON interface{}, ts int64) (*mautrix.RespSendEvent, error)

func (*IntentAPI) SendMassagedStateEvent

func (intent *IntentAPI) SendMassagedStateEvent(ctx context.Context, roomID id.RoomID, eventType event.Type, stateKey string, contentJSON interface{}, ts int64) (*mautrix.RespSendEvent, error)

func (*IntentAPI) SendMessageEvent

func (intent *IntentAPI) SendMessageEvent(ctx context.Context, roomID id.RoomID, eventType event.Type, contentJSON interface{}) (*mautrix.RespSendEvent, error)

func (*IntentAPI) SendNotice

func (intent *IntentAPI) SendNotice(ctx context.Context, roomID id.RoomID, text string) (*mautrix.RespSendEvent, error)

func (*IntentAPI) SendStateEvent

func (intent *IntentAPI) SendStateEvent(ctx context.Context, roomID id.RoomID, eventType event.Type, stateKey string, contentJSON interface{}) (*mautrix.RespSendEvent, error)

func (*IntentAPI) SendText

func (intent *IntentAPI) SendText(ctx context.Context, roomID id.RoomID, text string) (*mautrix.RespSendEvent, error)

func (*IntentAPI) SetAvatarURL

func (intent *IntentAPI) SetAvatarURL(ctx context.Context, avatarURL id.ContentURI) error

func (*IntentAPI) SetDisplayName

func (intent *IntentAPI) SetDisplayName(ctx context.Context, displayName string) error

func (*IntentAPI) SetPowerLevel

func (intent *IntentAPI) SetPowerLevel(ctx context.Context, roomID id.RoomID, userID id.UserID, level int) (*mautrix.RespSendEvent, error)

func (*IntentAPI) SetPowerLevels

func (intent *IntentAPI) SetPowerLevels(ctx context.Context, roomID id.RoomID, levels *event.PowerLevelsEventContent) (resp *mautrix.RespSendEvent, err error)

func (*IntentAPI) SetRoomAvatar

func (intent *IntentAPI) SetRoomAvatar(ctx context.Context, roomID id.RoomID, avatarURL id.ContentURI) (*mautrix.RespSendEvent, error)

func (*IntentAPI) SetRoomName

func (intent *IntentAPI) SetRoomName(ctx context.Context, roomID id.RoomID, roomName string) (*mautrix.RespSendEvent, error)

func (*IntentAPI) SetRoomTopic

func (intent *IntentAPI) SetRoomTopic(ctx context.Context, roomID id.RoomID, topic string) (*mautrix.RespSendEvent, error)

func (*IntentAPI) State added in v0.9.29

func (intent *IntentAPI) State(ctx context.Context, roomID id.RoomID) (mautrix.RoomStateMap, error)

func (*IntentAPI) StateEvent

func (intent *IntentAPI) StateEvent(ctx context.Context, roomID id.RoomID, eventType event.Type, stateKey string, outContent interface{}) error

func (*IntentAPI) UnbanUser added in v0.10.11

func (intent *IntentAPI) UnbanUser(ctx context.Context, roomID id.RoomID, req *mautrix.ReqUnbanUser, extraContent ...map[string]interface{}) (resp *mautrix.RespUnbanUser, err error)

func (*IntentAPI) UploadAsync added in v0.20.0

func (intent *IntentAPI) UploadAsync(ctx context.Context, data mautrix.ReqUploadMedia) (*mautrix.RespCreateMXC, error)

func (*IntentAPI) UploadMedia added in v0.20.0

func (intent *IntentAPI) UploadMedia(ctx context.Context, data mautrix.ReqUploadMedia) (*mautrix.RespMediaUpload, error)

func (*IntentAPI) Whoami

func (intent *IntentAPI) Whoami(ctx context.Context) (*mautrix.RespWhoami, error)

type MeowWebsocketCloseCode added in v0.9.9

type MeowWebsocketCloseCode string
const (
	MeowServerShuttingDown MeowWebsocketCloseCode = "server_shutting_down"
	MeowConnectionReplaced MeowWebsocketCloseCode = "conn_replaced"
	MeowTxnNotAcknowledged MeowWebsocketCloseCode = "transactions_not_acknowledged"
)

func (MeowWebsocketCloseCode) String added in v0.9.9

func (mwcc MeowWebsocketCloseCode) String() string

type Namespace

type Namespace struct {
	Regex     string `yaml:"regex" json:"regex"`
	Exclusive bool   `yaml:"exclusive" json:"exclusive"`
}

Namespace is a reserved namespace in any area.

type NamespaceList added in v0.12.0

type NamespaceList []Namespace

func (*NamespaceList) Register added in v0.12.0

func (nsl *NamespaceList) Register(regex *regexp.Regexp, exclusive bool)

type Namespaces

type Namespaces struct {
	UserIDs     NamespaceList `yaml:"users,omitempty" json:"users,omitempty"`
	RoomAliases NamespaceList `yaml:"aliases,omitempty" json:"aliases,omitempty"`
	RoomIDs     NamespaceList `yaml:"rooms,omitempty" json:"rooms,omitempty"`
}

Namespaces contains the three areas that appservices can reserve parts of.

type OTKCountMap added in v0.12.0

type OTKCountMap = map[id.UserID]map[id.DeviceID]mautrix.OTKCount

type OTKHandler added in v0.9.15

type OTKHandler = func(ctx context.Context, otk *mautrix.OTKCount)

type QueryHandler

type QueryHandler interface {
	QueryAlias(alias string) bool
	QueryUser(userID id.UserID) bool
}

QueryHandler handles room alias and user ID queries from the homeserver.

type QueryHandlerStub

type QueryHandlerStub struct{}

func (*QueryHandlerStub) QueryAlias

func (qh *QueryHandlerStub) QueryAlias(alias string) bool

func (*QueryHandlerStub) QueryUser

func (qh *QueryHandlerStub) QueryUser(userID id.UserID) bool

type Registration

type Registration struct {
	ID              string     `yaml:"id" json:"id"`
	URL             string     `yaml:"url" json:"url"`
	AppToken        string     `yaml:"as_token" json:"as_token"`
	ServerToken     string     `yaml:"hs_token" json:"hs_token"`
	SenderLocalpart string     `yaml:"sender_localpart" json:"sender_localpart"`
	RateLimited     *bool      `yaml:"rate_limited,omitempty" json:"rate_limited,omitempty"`
	Namespaces      Namespaces `yaml:"namespaces" json:"namespaces"`
	Protocols       []string   `yaml:"protocols,omitempty" json:"protocols,omitempty"`

	SoruEphemeralEvents bool `yaml:"de.sorunome.msc2409.push_ephemeral,omitempty" json:"de.sorunome.msc2409.push_ephemeral,omitempty"`
	EphemeralEvents     bool `yaml:"push_ephemeral,omitempty" json:"push_ephemeral,omitempty"`
	MSC3202             bool `yaml:"org.matrix.msc3202,omitempty" json:"org.matrix.msc3202,omitempty"`
}

Registration contains the data in a Matrix appservice registration. See https://spec.matrix.org/v1.2/application-service-api/#registration

func CreateRegistration

func CreateRegistration() *Registration

CreateRegistration creates a Registration with random appservice and homeserver tokens.

func LoadRegistration

func LoadRegistration(path string) (*Registration, error)

LoadRegistration loads a YAML file and turns it into a Registration.

func (*Registration) Save

func (reg *Registration) Save(path string) error

Save saves this Registration into a file at the given path.

func (*Registration) YAML

func (reg *Registration) YAML() (string, error)

YAML returns the registration in YAML format.

type StateStore

type StateStore interface {
	mautrix.StateStore

	IsRegistered(ctx context.Context, userID id.UserID) (bool, error)
	MarkRegistered(ctx context.Context, userID id.UserID) error

	GetPowerLevel(ctx context.Context, roomID id.RoomID, userID id.UserID) (int, error)
	GetPowerLevelRequirement(ctx context.Context, roomID id.RoomID, eventType event.Type) (int, error)
	HasPowerLevel(ctx context.Context, roomID id.RoomID, userID id.UserID, eventType event.Type) (bool, error)
}

type Transaction added in v0.9.15

type Transaction struct {
	Events          []*event.Event `json:"events"`
	EphemeralEvents []*event.Event `json:"ephemeral,omitempty"`
	ToDeviceEvents  []*event.Event `json:"to_device,omitempty"`

	DeviceLists    *mautrix.DeviceLists `json:"device_lists,omitempty"`
	DeviceOTKCount OTKCountMap          `json:"device_one_time_keys_count,omitempty"`
	FallbackKeys   FallbackKeyMap       `json:"device_unused_fallback_key_types,omitempty"`

	MSC2409EphemeralEvents []*event.Event       `json:"de.sorunome.msc2409.ephemeral,omitempty"`
	MSC2409ToDeviceEvents  []*event.Event       `json:"de.sorunome.msc2409.to_device,omitempty"`
	MSC3202DeviceLists     *mautrix.DeviceLists `json:"org.matrix.msc3202.device_lists,omitempty"`
	MSC3202DeviceOTKCount  OTKCountMap          `json:"org.matrix.msc3202.device_one_time_keys_count,omitempty"`
	MSC3202FallbackKeys    FallbackKeyMap       `json:"org.matrix.msc3202.device_unused_fallback_key_types,omitempty"`
}

Transaction contains a list of events.

func (*Transaction) ContentString added in v0.10.3

func (txn *Transaction) ContentString() string

func (*Transaction) MarshalZerologObject added in v0.12.1

func (txn *Transaction) MarshalZerologObject(ctx *zerolog.Event)

type TransactionIDCache added in v0.9.22

type TransactionIDCache struct {
	// contains filtered or unexported fields
}

func NewTransactionIDCache added in v0.9.22

func NewTransactionIDCache(size int) *TransactionIDCache

func (*TransactionIDCache) IsProcessed added in v0.9.22

func (txnIDC *TransactionIDCache) IsProcessed(txnID string) bool

func (*TransactionIDCache) MarkProcessed added in v0.9.22

func (txnIDC *TransactionIDCache) MarkProcessed(txnID string)

type WebsocketCommand added in v0.9.2

type WebsocketCommand struct {
	ReqID   int             `json:"id,omitempty"`
	Command string          `json:"command"`
	Data    json.RawMessage `json:"data"`

	Ctx context.Context `json:"-"`
}

func (*WebsocketCommand) MakeResponse added in v0.9.15

func (wsc *WebsocketCommand) MakeResponse(ok bool, data interface{}) *WebsocketRequest

type WebsocketHandler added in v0.10.0

type WebsocketHandler func(WebsocketCommand) (ok bool, data interface{})

type WebsocketMessage added in v0.8.1

type WebsocketMessage struct {
	WebsocketTransaction
	WebsocketCommand
}

type WebsocketRequest added in v0.9.15

type WebsocketRequest struct {
	ReqID   int         `json:"id,omitempty"`
	Command string      `json:"command"`
	Data    interface{} `json:"data"`

	Deadline time.Duration `json:"-"`
}

type WebsocketTransaction added in v0.9.2

type WebsocketTransaction struct {
	Status string `json:"status"`
	TxnID  string `json:"txn_id"`
	Transaction
}

type WebsocketTransactionHandler added in v0.16.0

type WebsocketTransactionHandler func(ctx context.Context, msg WebsocketMessage) (bool, any)

type WebsocketTransactionResponse added in v0.12.1

type WebsocketTransactionResponse struct {
	TxnID string `json:"txn_id"`
}

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL