/**
 * @license
 * Copyright 2022-2024 Matter.js Authors
 * SPDX-License-Identifier: Apache-2.0
 */
import { CommissioningBehavior } from "#behavior/system/commissioning/CommissioningBehavior.js";
import { NetworkServer } from "#behavior/system/network/NetworkServer.js";
import { ServerNetworkRuntime } from "#behavior/system/network/ServerNetworkRuntime.js";
import { ProductDescriptionServer } from "#behavior/system/product-description/ProductDescriptionServer.js";
import { SessionsBehavior } from "#behavior/system/sessions/SessionsBehavior.js";
import { Construction, Identity } from "#general";
import { Node } from "./Node.js";
import { Nodes } from "./Nodes.js";
/**
 * A server-side Matter {@link Node}.
 *
 * The Matter specification often refers to server-side nodes as "devices".
 */
export declare class ServerNode<T extends ServerNode.RootEndpoint = ServerNode.RootEndpoint> extends Node<T> {
    #private;
    /**
     * Construct a new ServerNode.
     *
     * You can use {@link create} to construct the node and wait for it to initialize fully.
     *
     * @param type the variation of {@link RootEndpoint} that defines the root endpoint's behavior
     * @param options root endpoint options and the node's environment
     */
    constructor(type?: T, options?: Node.Options<T>);
    /**
     * Construct a new ServerNode.
     *
     * You can use {@link create} to construct the node and wait for it to initialize fully.
     *
     * @param config a {@link Endpoint.Configuration} for the root endpoint
     */
    constructor(config: Partial<Node.Configuration<T>>);
    /**
     * Create a new ServerNode.
     *
     * @param type the variation of {@link RootEndpoint} that defines the root endpoint's behavior
     * @param options root endpoint configuration and, optionally, the node's environment
     */
    static create<This extends typeof ServerNode<any>, T extends ServerNode.RootEndpoint = ServerNode.RootEndpoint>(this: This, type?: T, options?: Node.Options<T>): Promise<ServerNode<T>>;
    /**
     * Create a new ServerNode.
     *
     * @param config root endpoint configuration and, optionally, the node's {@link Environment}
     */
    static create<This extends typeof ServerNode<any>, T extends ServerNode.RootEndpoint = ServerNode.RootEndpoint>(this: This, config: Partial<Node.Configuration<T>>): Promise<ServerNode<T>>;
    protected createRuntime(): ServerNetworkRuntime;
    [Construction.destruct](): Promise<void>;
    reset(): Promise<void>;
    /**
     * Perform a factory reset of the node.
     */
    factoryReset(): Promise<void>;
    /**
     * Access other nodes on the fabric.
     */
    get nodes(): Nodes;
    advertiseNow(): Promise<void>;
    protected initialize(): Promise<void>;
    /**
     * By default on factory reset we erase all stored data.
     *
     * If this is inappropriate for your application you may override to alter the behavior.   Matter requires that all
     * "security- and privacy-related data and key material" is removed on factory reset.
     *
     * @see {@link MatterSpecification.v12.Core} § 13.4
     */
    protected resetStorage(): Promise<void>;
    /**
     * Normal endpoints must have an owner to complete construction but server nodes have no such precondition for
     * construction.
     */
    protected assertConstructable(): void;
}
export declare namespace ServerNode {
    const RootEndpoint: import("../index.js").MutableEndpoint.With<import("../index.js").EndpointType.For<{
        readonly name: "RootNode";
        readonly deviceType: 22;
        readonly deviceRevision: 2;
        readonly deviceClass: import("@matter.js/model").DeviceClassification.Node;
        readonly requirements: typeof import("../endpoints/root.js").RootRequirements;
        readonly behaviors: {
            readonly parts: typeof import("../index.js").PartsBehavior;
        } & {
            readonly index: typeof import("../index.js").IndexBehavior;
        } & {
            readonly basicInformation: typeof import("../behaviors/index.js").BasicInformationServer;
        } & {
            readonly accessControl: typeof import("../behaviors/index.js").AccessControlServer;
        } & {
            readonly groupKeyManagement: typeof import("../behaviors/index.js").GroupKeyManagementServer;
        } & {
            readonly generalCommissioning: typeof import("../behaviors/index.js").GeneralCommissioningServer;
        } & {
            readonly administratorCommissioning: typeof import("../behaviors/index.js").AdministratorCommissioningServer;
        } & {
            readonly operationalCredentials: typeof import("../behaviors/index.js").OperationalCredentialsServer;
        } & {
            readonly generalDiagnostics: typeof import("../behaviors/index.js").GeneralDiagnosticsServer;
        };
    }>, import("../index.js").SupportedBehaviors.With<{
        readonly parts: typeof import("../index.js").PartsBehavior;
    } & {
        readonly index: typeof import("../index.js").IndexBehavior;
    } & {
        readonly basicInformation: typeof import("../behaviors/index.js").BasicInformationServer;
    } & {
        readonly accessControl: typeof import("../behaviors/index.js").AccessControlServer;
    } & {
        readonly groupKeyManagement: typeof import("../behaviors/index.js").GroupKeyManagementServer;
    } & {
        readonly generalCommissioning: typeof import("../behaviors/index.js").GeneralCommissioningServer;
    } & {
        readonly administratorCommissioning: typeof import("../behaviors/index.js").AdministratorCommissioningServer;
    } & {
        readonly operationalCredentials: typeof import("../behaviors/index.js").OperationalCredentialsServer;
    } & {
        readonly generalDiagnostics: typeof import("../behaviors/index.js").GeneralDiagnosticsServer;
    }, readonly [typeof CommissioningBehavior, typeof NetworkServer, typeof ProductDescriptionServer, typeof SessionsBehavior]>>;
    interface RootEndpoint extends Identity<typeof RootEndpoint> {
    }
}
//# sourceMappingURL=ServerNode.d.ts.map