Versions in this module Expand all Collapse all v0 v0.1.0 Jul 3, 2026 Changes in this version + var ErrAlreadyFriends = errors.New("already friends") + var ErrCapReached = errors.New("friend cap reached") + var ErrNotFound = errors.New("request not found") + var ErrNotPending = errors.New("request not pending") + var ErrNotYours = errors.New("not your request") + var ErrSelfRequest = errors.New("cannot friend yourself") + var ErrTooManyPending = errors.New("too many pending outbound requests") + func Main() + type DeviceRow struct + DeviceID string + Label *string + LastSeen int64 + NodeID *string + type DirAccount struct + Devices map[string]string + GitHubID uint64 + Login string + Name *string + type EntitlementVerifier interface + Allow func(token string, nowUnix int64) (*TokenClaims, bool) + func EntitlementFromEnv() EntitlementVerifier + type Envelope struct + Body json.RawMessage + Seq uint64 + type Friend struct + AccountKey string + Login string + type FriendPresence struct + AccountKey string + Login string + Presence string + type FriendRequest struct + CreatedAt int64 + FromAccount string + FromLogin string + ID string + State RequestState + ToAccount string + ToLogin string + type Hooks interface + WorkspaceWritten func(ctx context.Context, workspace string, seq uint64, claims *TokenClaims) + type InboxRow struct + Body json.RawMessage + Seq uint64 + type Options struct + Entitlement EntitlementVerifier + FriendCap *int + Hooks Hooks + Store Store + WriteGuard WriteGuard + type RequestState string + const StateAccepted + const StateCancelled + const StatePending + const StateRejected + type Server struct + func New(o Options) *Server + func (s *Server) Handler() http.Handler + type Store interface + AcceptFriendRequest func(ctx context.Context, requestID, acceptor string, friendCap *int) (FriendRequest, error) + AccountDevices func(ctx context.Context, accountKey string) ([]DeviceRow, error) + AccountInboxAfter func(ctx context.Context, accountKey string, after uint64) ([]InboxRow, error) + AccountKeyForLogin func(ctx context.Context, login string) (string, bool, error) + AppendEnvelope func(ctx context.Context, workspace string, body json.RawMessage) (uint64, error) + AppendKeyRotation func(ctx context.Context, workspace string, blob json.RawMessage) error + AreFriends func(ctx context.Context, a, b string) (bool, error) + Candidates func(ctx context.Context, workspace string) (map[string]json.RawMessage, error) + Close func() error + CloseFriendRequest func(ctx context.Context, requestID, actor string) (FriendRequest, error) + CreateFriendRequest func(ctx context.Context, fromAccount, fromLogin, toAccount, toLogin string, ...) (FriendRequest, error) + DirAccountByHandle func(ctx context.Context, handle string) (*DirAccount, error) + EnvelopesAfter func(ctx context.Context, workspace string, after uint64) ([]Envelope, error) + Flush func(ctx context.Context) error + FriendCount func(ctx context.Context, account string) (int, error) + FriendDevices func(ctx context.Context, caller, friend string) ([]DeviceRow, bool, error) + FriendPresence func(ctx context.Context, account string, now int64) ([]FriendPresence, error) + HeartbeatDevice func(ctx context.Context, githubID uint64, deviceID string, now int64) (bool, error) + IncomingRequests func(ctx context.Context, account string, now int64) ([]FriendRequest, error) + KeyRotations func(ctx context.Context, workspace string) ([]json.RawMessage, error) + ListFriends func(ctx context.Context, account string) ([]Friend, error) + PersistenceEnabled func() bool + PresenceBlobs func(ctx context.Context, workspace string) (map[string]json.RawMessage, error) + PresenceOf func(ctx context.Context, accountKey string, now int64) (string, error) + PushAccountEvent func(ctx context.Context, accountKey string, body json.RawMessage) (uint64, error) + PutCandidate func(ctx context.Context, workspace, deviceID string, candidate json.RawMessage) error + PutPresence func(ctx context.Context, workspace, deviceID string, presence json.RawMessage) error + RegisterAccountDevice func(ctx context.Context, githubID uint64, login, deviceID string, ...) (string, error) + RemoveFriend func(ctx context.Context, account, other string) (bool, error) + SetVisibility func(ctx context.Context, githubID uint64, appearOffline bool) error + UpsertDirDevice func(ctx context.Context, githubID uint64, login string, name *string, ...) error + func NewMemoryStore() Store + func NewMemoryStoreWithPersistence(dataDir string) Store + func NewPostgresStore(ctx context.Context, dsn string) (Store, error) + type TokenClaims struct + Caps []string + Exp uint64 + MaxMembers *uint32 + Plan string + RetentionDays *uint32 + Sub string + Turn bool + func (c TokenClaims) HasCap(cap string) bool + func (c TokenClaims) IsExpired(nowUnix int64) bool + type WriteGuard interface + CheckWrite func(ctx context.Context, workspace string, claims *TokenClaims, r *http.Request) error