import { type MethodRegistry } from '@kokuin/token'; import type { StoreProvider } from '@kubun/db'; import type { CatalogDraft, CatalogPullPreview, CatalogPullResult, CatalogUpstreamUnavailableReason, ResolveCatalogPullParams } from '@kubun/graphql'; import { type SignedRecord } from '@kubun/records'; import type { CatalogDraftState, CatalogHeadPayload, CatalogVersionPayload, CatalogVersionRef } from '@kubun/store-graph'; import type { CatalogAPIDeps, CatalogListing } from './catalog-contract.js'; import { TransactionFatalError } from './errors.js'; export type { CatalogPullPreview, CatalogPullResult, ResolveCatalogPullParams, } from '@kubun/graphql'; export declare class CatalogPullStaleError extends TransactionFatalError { get code(): string; constructor(); } export type CatalogPullUnavailableErrorParams = { reason: CatalogUpstreamUnavailableReason; reclone?: boolean; cause?: unknown; }; export declare class CatalogPullUnavailableError extends TransactionFatalError { #private; get reason(): CatalogUpstreamUnavailableReason; get reclone(): boolean; constructor(params: CatalogPullUnavailableErrorParams); } /** * The copy a sequential member-by-member loop would return, asking a few members * at once: the earliest member in list order that answers or throws decides, so a * later member's answer or error is ignored once an earlier one does. A decided * loser's signal aborts; an ask that ignores it is still dropped rather than * awaited. A transaction-bound provider asks one member at a time. */ export declare function firstMemberCopy(provider: StoreProvider, members: ReadonlyArray, ask: (member: T, signal: AbortSignal) => Promise): Promise; export type CatalogPullBaseParams = { provider: StoreProvider; catalogID: string; head: CatalogHeadPayload; draft: CatalogDraftState | null; methods: MethodRegistry | undefined; }; export type CatalogPullBase = { ref: CatalogVersionRef; record: SignedRecord; payload: CatalogVersionPayload; }; export declare function catalogPullBase(params: CatalogPullBaseParams): Promise; type CatalogPullAPIDeps = CatalogAPIDeps & { ownedHead(provider: StoreProvider, id: string): Promise; requireOwner(provider: StoreProvider, owner: string): Promise; listing(provider: StoreProvider, id: string): Promise; draftView(provider: StoreProvider, draft: CatalogDraftState, head: CatalogHeadPayload): Promise; }; export declare function createCatalogPullAPI(deps: CatalogPullAPIDeps): { previewCatalogPull: (id: string) => Promise; resolveCatalogPull: (params: ResolveCatalogPullParams) => Promise; };