Purpose
The Activity Feed service provides a unified interface to access recent activity events in the Seed system. It enables clients to list, filter, and paginate events, ensuring that product, design, and technical teams have a consistent foundation for building feeds, notifications, and collaborative views.
Status
This is a v1alpha specification. Breaking changes may occur as we validate the design and gather feedback.
Protobuf Definition
syntax = "proto3";
package com.seed.activity.v1alpha;
import "google/protobuf/timestamp.proto";
option go_package = "seed/backend/genproto/activity/v1alpha;activity";
// ActivityFeed service provides information about the recent activity events happened in the system.
service ActivityFeed {
// Lists the recent activity events,
// sorted by locally observed time (newest first).
rpc ListEvents(ListEventsRequest) returns (ListEventsResponse);
}
// The request to list the events.
message ListEventsRequest {
// Optional. The size of the page. The default is defined by the server.
int32 page_size = 1;
// Optional. The page token for requesting next pages.
string page_token = 2;
// Optional. If we want events from trusted peers only. All peers by default.
bool trusted_only = 3;
// Optional. If we want events only from specific user accounts. Multiple
// authors are filtered following OR logic.
repeated string filter_authors = 4;
// Optional. If we want certain types of events.
// Currently supported event types are:
// - Ref: any document change
// - Capability: obvious
// - Comment: obvious
// - DagPB:
// - Profile:
// - Contact: create a contact for a specific resource
// Multiple types are filtered following OR logic.
repeated string filter_event_type = 5;
// Optional. If we want events only from specific resource IDs.
// It admits wildards, i.e. we can filter by path prefixes.
string filter_resource = 6;
// Optional. If we want to include link events. These blobs (usually documents
// or comments), link (mention) to another resource (currently only account
// mentions supported). We can add these blobs to the feed result by providing a
// list of resources iris we want links to aggregated as a logical OR.
// These link events are also treated as logical OR when grouped with other filters,
// unlike other filters (authors, event_types) that are grouped under a logic AND.
// Example: filter_authors(u+a1 OR a2 ...) AND filter_event_type(et1 OR et2 ...) OR
// add_linked_resource(lr1 OR lr2 ...)
repeated string add_linked_resource = 7;
}
// The response with the list of events.
message ListEventsResponse {
// The list of events.
repeated Event events = 1;
// The token to request the next page.
string next_page_token = 2;
}
// Description of the event occurred in the system.
message Event {
// Union type of different event types.
// Eventually we'll have more event types.
oneof data {
// Event type describing the appearance of a new blob in the system.
NewBlobEvent new_blob = 1;
}
// The ID of the user account that has caused the event.
string account = 2;
// Timestamp of the event as per the event itself.
google.protobuf.Timestamp event_time = 3;
// Locally perceived time of the event.
// I.e. time when we have received the event on our machine.
google.protobuf.Timestamp observe_time = 4;
}
// The event describing the
message NewBlobEvent {
// The CID of the blob that was created.
string cid = 1;
// The type of the blob that was created.
// Defined as string for extensibility.
// Some of the currently supported blob types are:
// - KeyDelegation
// - Change
// - Comment
// - DagPB
string blob_type = 2;
// The user account ID that has created the blob.
string author = 3;
// The resource ID that the blob is related to.
string resource = 4;
// Extra attributes of the blob.
string extra_attrs = 5;
int64 blob_id = 6;
// Only relevant for ling events
bool is_pinned = 7;
}Powered by Seed Hypermedia