/**
 * Compiled-contract registry.
 *
 * The OData submission actions accept a string `compiledArtifactRef`
 * (e.g. "attestation-vault") and resolve it through this registry to:
 *   - the compiled contract module (Compact `compactc` output under
 *     `<base>/<name>/src/managed/<name>/contract/`)
 *   - the contract's `privateStateId`
 *   - the `zkConfigPath` the SDK's NodeZkConfigProvider reads from
 *
 * The registry is in-memory and starts empty. Until a contract is registered,
 * the OData actions return a clear 404-style error rather than failing somewhere
 * deep in the SDK.
 *
 * Registration shape is loaded from `cds.requires.nightgate.contracts` if
 * present:
 *
 *   contracts: {
 *     "attestation-vault": {
 *       artifactPath:   "<repo>/contracts/attestation-vault/src/managed/attestation-vault/contract/index.js",
 *       privateStateId: "attestationVaultPrivateState",
 *       zkConfigPath:   "<repo>/contracts/attestation-vault/src/managed/attestation-vault"
 *     }
 *   }
 */
export interface ContractRegistration {
    /** Absolute or relative path to the Compact-emitted JS contract module. Dynamic-imported on resolve. */
    artifactPath: string;
    /** Logical private-state ID, passed to deployContract / findDeployedContract. */
    privateStateId: string;
    /** Directory containing `keys/` and `zkir/` for NodeZkConfigProvider. */
    zkConfigPath: string;
}
export interface ResolvedContract {
    compiledContract: unknown;
    privateStateId: string;
    zkConfigPath: string;
    /**
     * Absolute path (or file:// URL on Windows) the worker uses to dynamic-
     * import the Compact-emitted contract module. Same value the registry
     * stored at registerContract() time, already normalised to absolute.
     * Surfaced so Phase 2b's wallet-worker handler can re-import inside the
     * worker thread (compiledContract itself doesn't survive a thread boundary).
     */
    artifactPath: string;
}
export declare function registerContract(name: string, reg: ContractRegistration): void;
export declare function unregisterContract(name: string): boolean;
export declare function clearRegistry(): void;
export declare function listRegisteredContracts(): string[];
/**
 * Load all contracts declared under `cds.requires.nightgate.contracts`.
 * Idempotent, safe to call multiple times.
 */
export declare function loadRegistryFromConfig(config?: Record<string, any>, baseDir?: string): void;
export declare function resolveContract(name: string): Promise<ResolvedContract>;
export declare class ContractNotRegisteredError extends Error {
    readonly name: string;
    readonly available: string[];
    constructor(name: string, available: string[]);
}
