Real-time Events & User Account

Real-time Events
Event polling and streaming for real-time notifications via 
/core/v4/events.
Event Streaming
// Get the latest event ID
fromEventID, err := c.GetLatestEventID(context.Background())
// Create a new event streamer
for event := range c.NewEventStream(ctx, 20*time.Second, 20*time.Second, fromEventID) {
    fmt.Println(event.EventID)
    // Process event.User, event.Messages, event.Labels, etc.
}
The event stream uses a custom 
NewTicker with random jitter to avoid thundering herd.
Event Polling
// Fetch events starting after eventID
events, more, err := c.GetEvent(ctx, eventID)
// Returns up to 50 events per call with more indicating continuation
Event Types
The 
Event struct contains typed sub-events:
event.User          // User changes
event.UserSettings  // User settings changes
event.MailSettings  // Mail settings changes
event.Messages      // Message changes ([]MessageEvent)
event.Labels        // Label changes ([]LabelEvent)
event.Addresses     // Address changes ([]AddressEvent)
event.Notifications // Notifications ([]NotificationEvent)
event.UsedSpace     // Storage usage changes
Key Types
Type
Description
Event
Contains eventID, refresh flags, and typed sub-events
RefreshFlag
RefreshMail (1), RefreshAll (255)
EventAction
Delete, Create, Update, UpdateFlags
MessageEvent
EventItem (ID + Action) with full Message entity
LabelEvent
EventItem (ID + Action) with full Label entity
AddressEvent
EventItem (ID + Action) with full Address entity
User Account
User account operations via 
/core/v4/users.
Operations
// Fetch current user info
user, err := c.GetUser(ctx)
// With human verification token
user, err := c.GetUserWithHV(ctx, hvToken)
// Delete account (requires SRP proof re-authentication)
err := c.DeleteUser(ctx, password, proton.DeleteUserReq{
    Reason:  "no longer needed",
    Feedback: "test account",
})
Key Types
Type
Description
User
ID, name, display name, email, keys, used/max/upload space limits, credit, currency
ProductUsedSpace
Space breakdown by calendar, contact, drive, mail, pass (password manager)
DeleteUserReq
Reason, feedback, email confirmation
Feature Flags
Fetch feature flag/toggle results from the Proton API:
features, err := c.GetFeatures(ctx, "sticky-key-uuid")
// Returns FeatureFlagResult for a given UUID sticky key