import type { PodStore, WebIdStore } from '@solid/community-server'; import { type ManagedClientFetch, type SignaledManagedClientFetchOptions } from '../../edge/reachability/ManagedClientFetch'; export interface PodOwnershipTarget { storageUrl: string; lookupUrl?: string; serviceAccessToken?: string; signalApiUrl?: string; routeAccessToken?: string; routeAccessTokenExp?: number; nodeId?: string; } export interface OwnedWebIdEntry { webId: string; storageUrl: string; storageMode: 'cloud' | 'local' | 'custom'; } export interface PodOwnershipResolver { listAccountWebIds(accountId: string): Promise; resolveOwnedWebIds(input: { accountId: string; candidateWebIds: string[]; target: PodOwnershipTarget; }): Promise; } interface ResolverLogger { warn(message: string): void; } type FetchLike = (input: RequestInfo | URL, init?: RequestInit) => Promise; export interface CssPodOwnershipResolverOptions { webIdStore: WebIdStore; podStore: PodStore; /** Optional fetch implementation for remote resolution; local resolution never uses it. */ fetch?: FetchLike; /** Maximum duration for a remote ownership lookup before it is aborted. */ remoteTimeoutMs?: number; logger?: ResolverLogger; } /** * Resolves account WebID ownership from the CSS identity stores in this process. * * This resolver deliberately does not inspect Pod data directories or open a * second database connection. A target carrying remote lookup credentials is * verified through the target SP's provision lookup endpoint. */ export declare class CssPodOwnershipResolver implements PodOwnershipResolver { private readonly logger; private readonly webIdStore; private readonly podStore; private readonly fetch; private readonly remoteTimeoutMs; constructor(options: CssPodOwnershipResolverOptions); listAccountWebIds(accountId: string): Promise; resolveOwnedWebIds({ accountId, candidateWebIds, target }: { accountId: string; candidateWebIds: string[]; target: PodOwnershipTarget; }): Promise; private resolveRemoteOwnedWebIds; private openRemoteLookup; protected createManagedFetch(options: SignaledManagedClientFetchOptions): Promise; private warnRemoteFailure; private warnStoreFailure; } /** * Derives the same cloud/local/custom classification used by scoped consent. */ export declare function deriveStorageMode(webId: string, storageUrl: string): 'cloud' | 'local' | 'custom'; /** * Matches a Pod base URL against the selected storage root. Hostname aliases * for loopback (localhost, 127.0.0.1, and ::1) are intentionally equivalent. */ export declare function matchesTargetStorage(candidate: string, targetStorageUrl: string): boolean; export {};