import type { NobjcObject } from "objc-js";
import type { _NSArray } from "../Foundation/NSArray.js";
import type { _NSObject } from "../Foundation/NSObject.js";
import type { _NSString } from "../Foundation/NSString.js";
import type { _SFAuthorization } from "../SecurityFoundation/SFAuthorization.js";
import type { _ODMappings } from "./ODMappings.js";
export declare class _ODConfiguration extends _NSObject {
    static alloc(): _ODConfiguration;
    static new(): _ODConfiguration;
    init(): _ODConfiguration;
    /**
     * @method configuration @abstract Returns an initialized and autoreleased ODConfiguration object. @discussion Returns an initialized and autoreleased ODConfiguration object.
     */
    static configuration(): _ODConfiguration;
    /**
     * @method suggestedTrustAccount: @abstract Returns a suggested name to use for the trust account. @discussion Returns a suggested name to use for a trust account. This name will be derived from the hostname (if provided), otherwise it will be derived from the local hostname removing special characters that may not be allowed by many systems.
     */
    static suggestedTrustAccount$(hostname: _NSString): _NSString;
    /**
     * @method suggestedTrustPassword: @abstract Returns a suggested password to be used for trust account with the requested length. @discussion Returns a suggested password to be used for trust account with the requested length.
     */
    static suggestedTrustPassword$(length: number): _NSString;
    /**
     * @method saveUsingAuthorization:error: @abstract Saves the configuration using the provided authorization. @discussion Saves the configuration using the provided authorization.
     */
    saveUsingAuthorization$error$(authorization: _SFAuthorization, error: NobjcObject): boolean;
    /**
     * @method addTrustType:trustAccount:trustPassword:username:password:joinExisting:error: @abstract Adds a trust account with the provided name and password using the credentials provided by the user. @discussion Adds a trust account with the provided name and password using the credentials provided by the user. User can request that the trust be forcibly created (replacing existing trust if found in directory). A trust should be established only after enough configuration is available and the configuration been saved. If the trust is required, then the configuration can be deleted if necessary upon failure.
     */
    addTrustType$trustAccount$trustPassword$username$password$joinExisting$error$(trustType: _NSString, account: _NSString, accountPassword: _NSString, username: _NSString, password: _NSString, join: boolean, error: NobjcObject): boolean;
    /**
     * @method removeTrustUsingUsername:password:deleteTrustAccount:error: @abstract Removes trust using the provided username and password. @discussion Removes trust using the provided username and password. The trust account will be removed from the directory only if requested.
     */
    removeTrustUsingUsername$password$deleteTrustAccount$error$(username: _NSString, password: _NSString, deleteAccount: boolean, error: NobjcObject): boolean;
    /** the nodename associated with this configuration */
    nodeName(): _NSString;
    setNodeName$(value: _NSString): void;
    /** comment for this configuration */
    comment(): _NSString;
    setComment$(value: _NSString): void;
    /**
     * default mappings for this configuration (used for all modules unless specific ones are set for the module)
     */
    defaultMappings(): _ODMappings;
    setDefaultMappings$(value: _ODMappings): void;
    /**
     * Name of the template used for this configuration, specifically loaded from /System/Library/OpenDirectory/Templates or /Library/OpenDirectory/Templates. These templates specify the module layout, settings, etc. appropriate for that template. Any settings in this configuration will override settings from the template
     */
    templateName(): _NSString;
    setTemplateName$(value: _NSString): void;
    /**
     * A list of subnodenames to be registered on behalf of this configuration. For example, "subnode1" would register "/Nodename/subnode1" automatically so it is visible without loading the actual configuration/modules.
     */
    virtualSubnodes(): _NSArray;
    setVirtualSubnodes$(value: _NSArray): void;
    /** Hides the registration of this node so it is not visible to clients in the UI. */
    hideRegistration(): boolean;
    setHideRegistration$(value: boolean): void;
    /** The optional hostname to be used with this configuration */
    preferredDestinationHostName(): _NSString;
    setPreferredDestinationHostName$(value: _NSString): void;
    /**
     * An optional port to be used in conjunction with the preferred hostname for this configuration
     */
    preferredDestinationHostPort(): number;
    setPreferredDestinationHostPort$(value: number): void;
    /** The current trust account used with this configuration */
    trustAccount(): _NSString;
    /** The current trust meta account used with this configuration */
    trustMetaAccount(): _NSString;
    /** The current trust kerberos account used with this configuration */
    trustKerberosPrincipal(): _NSString;
    /** Type of trust established for this configuration */
    trustType(): _NSString;
    /** Trust uses mutual authentication for security */
    trustUsesMutualAuthentication(): boolean;
    /** Trust uses keytab for password storage */
    trustUsesKerberosKeytab(): boolean;
    /** Trust uses the system keychain to store password */
    trustUsesSystemKeychain(): boolean;
    /**
     * Determines if packet signing is used for this configuration, should be one of the ODPacketSigning values
     */
    packetSigning(): number;
    setPacketSigning$(value: number): void;
    /**
     * Determins if packet encryption is used for this configuration, should be one of the ODPacketEncryption values
     */
    packetEncryption(): number;
    setPacketEncryption$(value: number): void;
    /** States if some man-in-the-middle protection is required */
    manInTheMiddleProtection(): boolean;
    setManInTheMiddleProtection$(value: boolean): void;
    /** Timeout in seconds for all queries issued for this configuration */
    queryTimeoutInSeconds(): number;
    setQueryTimeoutInSeconds$(value: number): void;
    /** Timeout in seconds for connection setup for this configuration */
    connectionSetupTimeoutInSeconds(): number;
    setConnectionSetupTimeoutInSeconds$(value: number): void;
    /**
     * Default timeout in seconds for all connections associated with this configuration
     */
    connectionIdleTimeoutInSeconds(): number;
    setConnectionIdleTimeoutInSeconds$(value: number): void;
    /**
     * A list of default ODModuleEntry objects. Default modules are used in all categories, after all "specific" modules
     */
    defaultModuleEntries(): _NSArray;
    setDefaultModuleEntries$(value: _NSArray): void;
    /** A list of authentication ODModuleEntry objects */
    authenticationModuleEntries(): _NSArray;
    setAuthenticationModuleEntries$(value: _NSArray): void;
    /** A list of discovery ODModuleEntry objects */
    discoveryModuleEntries(): _NSArray;
    setDiscoveryModuleEntries$(value: _NSArray): void;
    /**
     * A list of general ODModuleEntry objects used for all other APIs (Queries, modifications, etc.)
     */
    generalModuleEntries(): _NSArray;
    setGeneralModuleEntries$(value: _NSArray): void;
}
