store

package
v0.0.0-...-aaee23e Latest Latest
Warning

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

Go to latest
Published: Sep 30, 2024 License: MPL-2.0 Imports: 19 Imported by: 0

Documentation

Overview

Package store contains interfaces for storing data needed for WhatsApp multidevice.

Index

Constants

This section is empty.

Variables

View Source
var BaseClientPayload = &waProto.ClientPayload{
	UserAgent: &waProto.ClientPayload_UserAgent{
		Platform:       waProto.ClientPayload_UserAgent_WEB.Enum(),
		ReleaseChannel: waProto.ClientPayload_UserAgent_RELEASE.Enum(),
		AppVersion:     waVersion.ProtoAppVersion(),
		Mcc:            proto.String("000"),
		Mnc:            proto.String("000"),
		OsVersion:      proto.String("0.1.0"),
		Manufacturer:   proto.String(""),
		Device:         proto.String("Desktop"),
		OsBuildNumber:  proto.String("0.1.0"),

		LocaleLanguageIso6391:       proto.String("en"),
		LocaleCountryIso31661Alpha2: proto.String("en"),
	},
	WebInfo: &waProto.ClientPayload_WebInfo{
		WebSubPlatform: waProto.ClientPayload_WebInfo_WEB_BROWSER.Enum(),
	},
	ConnectType:   waProto.ClientPayload_WIFI_UNKNOWN.Enum(),
	ConnectReason: waProto.ClientPayload_USER_ACTIVATED.Enum(),
}
View Source
var DeviceProps = &waProto.DeviceProps{
	Os: proto.String("whatsmeow"),
	Version: &waProto.DeviceProps_AppVersion{
		Primary:   proto.Uint32(0),
		Secondary: proto.Uint32(1),
		Tertiary:  proto.Uint32(0),
	},
	PlatformType:    waProto.DeviceProps_UNKNOWN.Enum(),
	RequireFullSync: proto.Bool(false),
}
View Source
var SignalProtobufSerializer = serialize.NewProtoBufSerializer()

Functions

func SetOSInfo

func SetOSInfo(name string, version [3]uint32)

func SetWAVersion

func SetWAVersion(version WAVersionContainer)

SetWAVersion sets the current WhatsApp web client version.

In general, you should keep the library up-to-date instead of using this, as there may be code changes that are necessary too (like protobuf schema changes).

Types

type AppStateMutationMAC

type AppStateMutationMAC struct {
	IndexMAC []byte
	ValueMAC []byte
}

type AppStateStore

type AppStateStore interface {
	PutAppStateVersion(name string, version uint64, hash [128]byte) error
	GetAppStateVersion(name string) (uint64, [128]byte, error)
	DeleteAppStateVersion(name string) error

	PutAppStateMutationMACs(name string, version uint64, mutations []AppStateMutationMAC) error
	DeleteAppStateMutationMACs(name string, indexMACs [][]byte) error
	GetAppStateMutationMAC(name string, indexMAC []byte) (valueMAC []byte, err error)
}

type AppStateSyncKey

type AppStateSyncKey struct {
	Data        []byte
	Fingerprint []byte
	Timestamp   int64
}

type AppStateSyncKeyStore

type AppStateSyncKeyStore interface {
	PutAppStateSyncKey(id []byte, key AppStateSyncKey) error
	GetAppStateSyncKey(id []byte) (*AppStateSyncKey, error)
	GetLatestAppStateSyncKeyID() ([]byte, error)
}

type ChatSettingsStore

type ChatSettingsStore interface {
	PutMutedUntil(chat types.JID, mutedUntil time.Time) error
	PutPinned(chat types.JID, pinned bool) error
	PutArchived(chat types.JID, archived bool) error
	GetChatSettings(chat types.JID) (types.LocalChatSettings, error)
}

type ContactEntry

type ContactEntry struct {
	JID       types.JID
	FirstName string
	FullName  string
}

type ContactStore

type ContactStore interface {
	PutPushName(user types.JID, pushName string) (bool, string, error)
	PutBusinessName(user types.JID, businessName string) (bool, string, error)
	PutContactName(user types.JID, fullName, firstName string) error
	PutAllContactNames(contacts []ContactEntry) error
	GetContact(user types.JID) (types.ContactInfo, error)
	GetAllContacts() (map[types.JID]types.ContactInfo, error)
}

type Device

type Device struct {
	Log waLog.Logger

	NoiseKey       *keys.KeyPair
	IdentityKey    *keys.KeyPair
	SignedPreKey   *keys.PreKey
	RegistrationID uint32
	AdvSecretKey   []byte

	ID           *types.JID
	Account      *waProto.ADVSignedDeviceIdentity
	Platform     string
	BusinessName string
	PushName     string

	FacebookUUID uuid.UUID

	Initialized   bool
	Identities    IdentityStore
	Sessions      SessionStore
	PreKeys       PreKeyStore
	SenderKeys    SenderKeyStore
	AppStateKeys  AppStateSyncKeyStore
	AppState      AppStateStore
	Contacts      ContactStore
	ChatSettings  ChatSettingsStore
	MsgSecrets    MsgSecretStore
	PrivacyTokens PrivacyTokenStore
	Container     DeviceContainer

	DatabaseErrorHandler func(device *Device, action string, attemptIndex int, err error) (retry bool)
}

func (*Device) ContainsPreKey

func (device *Device) ContainsPreKey(preKeyID uint32) bool

func (*Device) ContainsSession

func (device *Device) ContainsSession(remoteAddress *protocol.SignalAddress) bool

func (*Device) ContainsSignedPreKey

func (device *Device) ContainsSignedPreKey(signedPreKeyID uint32) bool

func (*Device) Delete

func (device *Device) Delete() error

func (*Device) DeleteAllSessions

func (device *Device) DeleteAllSessions()

func (*Device) DeleteSession

func (device *Device) DeleteSession(remoteAddress *protocol.SignalAddress)

func (*Device) GetClientPayload

func (device *Device) GetClientPayload() *waProto.ClientPayload

func (*Device) GetIdentityKeyPair

func (device *Device) GetIdentityKeyPair() *identity.KeyPair

func (*Device) GetLocalRegistrationId

func (device *Device) GetLocalRegistrationId() uint32

func (*Device) GetSubDeviceSessions

func (device *Device) GetSubDeviceSessions(name string) []uint32

func (*Device) IsTrustedIdentity

func (device *Device) IsTrustedIdentity(address *protocol.SignalAddress, identityKey *identity.Key) bool

func (*Device) LoadPreKey

func (device *Device) LoadPreKey(id uint32) *record.PreKey

func (*Device) LoadSenderKey

func (device *Device) LoadSenderKey(senderKeyName *protocol.SenderKeyName) *groupRecord.SenderKey

func (*Device) LoadSession

func (device *Device) LoadSession(address *protocol.SignalAddress) *record.Session

func (*Device) LoadSignedPreKey

func (device *Device) LoadSignedPreKey(signedPreKeyID uint32) *record.SignedPreKey

func (*Device) LoadSignedPreKeys

func (device *Device) LoadSignedPreKeys() []*record.SignedPreKey

func (*Device) RemovePreKey

func (device *Device) RemovePreKey(id uint32)

func (*Device) RemoveSignedPreKey

func (device *Device) RemoveSignedPreKey(signedPreKeyID uint32)

func (*Device) Save

func (device *Device) Save() error

func (*Device) SaveIdentity

func (device *Device) SaveIdentity(address *protocol.SignalAddress, identityKey *identity.Key)

func (*Device) StorePreKey

func (device *Device) StorePreKey(preKeyID uint32, preKeyRecord *record.PreKey)

func (*Device) StoreSenderKey

func (device *Device) StoreSenderKey(senderKeyName *protocol.SenderKeyName, keyRecord *groupRecord.SenderKey)

func (*Device) StoreSession

func (device *Device) StoreSession(address *protocol.SignalAddress, record *record.Session)

func (*Device) StoreSignedPreKey

func (device *Device) StoreSignedPreKey(signedPreKeyID uint32, record *record.SignedPreKey)

type DeviceContainer

type DeviceContainer interface {
	PutDevice(store *Device) error
	DeleteDevice(store *Device) error
}

type IdentityStore

type IdentityStore interface {
	PutIdentity(address string, key [32]byte) error
	DeleteAllIdentities(phone string) error
	DeleteIdentity(address string) error
	IsTrustedIdentity(address string, key [32]byte) (bool, error)
}

type MessageSecretInsert

type MessageSecretInsert struct {
	Chat   types.JID
	Sender types.JID
	ID     types.MessageID
	Secret []byte
}

type MsgSecretStore

type MsgSecretStore interface {
	PutMessageSecrets([]MessageSecretInsert) error
	PutMessageSecret(chat, sender types.JID, id types.MessageID, secret []byte) error
	GetMessageSecret(chat, sender types.JID, id types.MessageID) ([]byte, error)
}

type PreKeyStore

type PreKeyStore interface {
	GetOrGenPreKeys(count uint32) ([]*keys.PreKey, error)
	GenOnePreKey() (*keys.PreKey, error)
	GetPreKey(id uint32) (*keys.PreKey, error)
	RemovePreKey(id uint32) error
	MarkPreKeysAsUploaded(upToID uint32) error
	UploadedPreKeyCount() (int, error)
}

type PrivacyToken

type PrivacyToken struct {
	User      types.JID
	Token     []byte
	Timestamp time.Time
}

type PrivacyTokenStore

type PrivacyTokenStore interface {
	PutPrivacyTokens(tokens ...PrivacyToken) error
	GetPrivacyToken(user types.JID) (*PrivacyToken, error)
}

type SenderKeyStore

type SenderKeyStore interface {
	PutSenderKey(group, user string, session []byte) error
	GetSenderKey(group, user string) ([]byte, error)
}

type SessionStore

type SessionStore interface {
	GetSession(address string) ([]byte, error)
	HasSession(address string) (bool, error)
	PutSession(address string, session []byte) error
	DeleteAllSessions(phone string) error
	DeleteSession(address string) error
}

type WAVersionContainer

type WAVersionContainer [3]uint32

WAVersionContainer is a container for a WhatsApp web version number.

func GetWAVersion

func GetWAVersion() WAVersionContainer

GetWAVersion gets the current WhatsApp web client version.

func ParseVersion

func ParseVersion(version string) (parsed WAVersionContainer, err error)

ParseVersion parses a version string (three dot-separated numbers) into a WAVersionContainer.

func (WAVersionContainer) Hash

func (vc WAVersionContainer) Hash() [16]byte

Hash returns the md5 hash of the String representation of this version.

func (WAVersionContainer) IsZero

func (vc WAVersionContainer) IsZero() bool

IsZero returns true if the version is zero.

func (WAVersionContainer) LessThan

func (vc WAVersionContainer) LessThan(other WAVersionContainer) bool

func (WAVersionContainer) ProtoAppVersion

func (WAVersionContainer) String

func (vc WAVersionContainer) String() string

String returns the version number as a dot-separated string.

Directories

Path Synopsis
Package sqlstore contains an SQL-backed implementation of the interfaces in the store package.
Package sqlstore contains an SQL-backed implementation of the interfaces in the store package.

Jump to

Keyboard shortcuts

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