import type { PermissionSpecificationBuilder, ValidPermissionSpecification, RestrictedMethodOptions, RestrictedMethodParameters } from "@metamask/permission-controller";
import { PermissionType } from "@metamask/permission-controller";
import type { GetPreferencesResult } from "@metamask/snaps-sdk";
import type { NonEmptyArray } from "@metamask/utils";
import type { MethodHooksObject } from "../utils.mjs";
declare const methodName = "snap_getPreferences";
export type GetPreferencesMethodHooks = {
    getPreferences: () => GetPreferencesResult;
};
type SpecificationBuilderOptions = {
    allowedCaveats?: Readonly<NonEmptyArray<string>> | null;
    methodHooks: GetPreferencesMethodHooks;
};
type Specification = ValidPermissionSpecification<{
    permissionType: PermissionType.RestrictedMethod;
    targetName: typeof methodName;
    methodImplementation: ReturnType<typeof getImplementation>;
    allowedCaveats: Readonly<NonEmptyArray<string>> | null;
}>;
/**
 * The specification builder for the `snap_getPreferences` permission.
 * `snap_getPreferences` allows snaps to access user preferences.
 *
 * @param options - The specification builder options.
 * @param options.allowedCaveats - The optional allowed caveats for the permission.
 * @param options.methodHooks - The RPC method hooks needed by the method implementation.
 * @returns The specification for the `snap_getPreferences` permission.
 */
export declare const specificationBuilder: PermissionSpecificationBuilder<PermissionType.RestrictedMethod, SpecificationBuilderOptions, Specification>;
export declare const getPreferencesBuilder: Readonly<{
    readonly targetName: "snap_getPreferences";
    readonly specificationBuilder: PermissionSpecificationBuilder<PermissionType.RestrictedMethod, SpecificationBuilderOptions, {
        permissionType: PermissionType.RestrictedMethod;
        targetName: typeof methodName;
        methodImplementation: ReturnType<typeof getImplementation>;
        allowedCaveats: Readonly<NonEmptyArray<string>> | null;
    }>;
    readonly methodHooks: MethodHooksObject<GetPreferencesMethodHooks>;
}>;
/**
 * Builds the method implementation for `snap_getPreferences`.
 *
 * @param hooks - The RPC method hooks.
 * @param hooks.getPreferences - A function that returns the user selected preferences.
 * @returns The user preferences.
 */
export declare function getImplementation({ getPreferences, }: GetPreferencesMethodHooks): (_args: RestrictedMethodOptions<RestrictedMethodParameters>) => Promise<GetPreferencesResult>;
export {};
//# sourceMappingURL=getPreferences.d.mts.map