package storage import ( "context" "atcr.io/pkg/atproto" "atcr.io/pkg/auth" "atcr.io/pkg/auth/oauth" ) // DatabaseMetrics interface for tracking pull/push counts type DatabaseMetrics interface { IncrementPullCount(did, repository string) error IncrementPushCount(did, repository string) error } // ReadmeCache interface for README content caching type ReadmeCache interface { Get(ctx context.Context, url string) (string, error) Invalidate(url string) error } // RegistryContext bundles all the context needed for registry operations // This includes both per-request data (DID, hold) and shared services type RegistryContext struct { // Per-request identity and routing information DID string // User's DID (e.g., "did:plc:abc123") Handle string // User's handle (e.g., "alice.bsky.social") HoldDID string // Hold service DID (e.g., "did:web:hold01.atcr.io") PDSEndpoint string // User's PDS endpoint URL Repository string // Image repository name (e.g., "debian") ServiceToken string // Service token for hold authentication (cached by middleware) ATProtoClient *atproto.Client // Authenticated ATProto client for this user // Shared services (same for all requests) Database DatabaseMetrics // Metrics tracking database Authorizer auth.HoldAuthorizer // Hold access authorization Refresher *oauth.Refresher // OAuth session manager ReadmeCache ReadmeCache // README content cache }