package sessionbroker import ( "context" "time" sessioncontracts "github.com/example/remote-access-platform/backend/pkg/contracts/session" ) type RemoteSessionRepository interface { Create(ctx context.Context, session RemoteSession) error GetByID(ctx context.Context, sessionID string) (*RemoteSession, error) GetByIDForUpdate(ctx context.Context, sessionID string) (*RemoteSession, error) ListByController(ctx context.Context, userID string) ([]RemoteSession, error) CountLiveByResource(ctx context.Context, resourceID string) (int, error) ListDetachedExpired(ctx context.Context, before time.Time, limit int) ([]RemoteSession, error) UpdateState(ctx context.Context, params UpdateRemoteSessionStateParams) error } type SessionAttachmentRepository interface { Create(ctx context.Context, attachment SessionAttachment) error GetByID(ctx context.Context, attachmentID string) (*SessionAttachment, error) GetByIDForUpdate(ctx context.Context, attachmentID string) (*SessionAttachment, error) ListByRemoteSession(ctx context.Context, remoteSessionID string) ([]SessionAttachment, error) ListActiveByRemoteSessionForUpdate(ctx context.Context, remoteSessionID string) ([]SessionAttachment, error) UpdateState(ctx context.Context, params UpdateSessionAttachmentStateParams) error Supersede(ctx context.Context, params SupersedeAttachmentParams) error } type ResourcePolicyRepository interface { GetByResourceID(ctx context.Context, resourceID string) (*ResourcePolicy, error) Upsert(ctx context.Context, policy ResourcePolicy) error } type AuditEventRepository interface { Create(ctx context.Context, event AuditEvent) error } type Store interface { RemoteSessions() RemoteSessionRepository SessionAttachments() SessionAttachmentRepository ResourcePolicies() ResourcePolicyRepository ResourceRuntime() ResourceRuntimeRepository AuditEvents() AuditEventRepository Access() AccessRepository } type Transactor interface { WithinTransaction(ctx context.Context, fn func(store Store) error) error } type UpdateRemoteSessionStateParams struct { RemoteSessionID string State sessioncontracts.State WorkerID string DetachDeadlineAt *time.Time LastHeartbeatAt *time.Time TakeoverVersion int UpdatedAt time.Time } type UpdateSessionAttachmentStateParams struct { AttachmentID string State AttachmentState DetachedAt *time.Time LastInputAt *time.Time UpdatedAt time.Time } type SupersedeAttachmentParams struct { PreviousAttachmentID string NextAttachmentID string DetachedAt time.Time UpdatedAt time.Time } type AccessRepository interface { IsTrustedDevice(ctx context.Context, userID, deviceID string) (bool, error) GetPlatformRole(ctx context.Context, userID string) (string, error) GetOrganizationRole(ctx context.Context, organizationID, userID string) (string, bool, error) } type ResourceRuntimeRepository interface { GetByID(ctx context.Context, resourceID string) (*ResourceRuntimeSpec, error) }