/**
 * @license
 * Copyright 2022-2026 Matter.js Authors
 * SPDX-License-Identifier: Apache-2.0
 */
import { Behavior } from "#behavior/Behavior.js";
import { DatatypeModel } from "@matter/model";
import { RemoteInterface } from "./RemoteInterface.js";
/**
 * Base class for {@link Behavior}s that enable remote access to a {@link ServerNode} via a non-Matter API.
 *
 * Each protocol supported by Matter.js implements a subclass of {@link RemoteServer} and {@link RemoteInterface}.
 *
 * The {@link RemoteServer} provides a convenient interface for adding a protocol to a {@link ServerNode}.  The The
 * {@link RemoteInterface} implements the actual protocol.
 *
 * For greater control you may instantiate and manage {@link RemoteInterface} separately from {@link RemoteServer}. To
 * implement your own protocol you may extend the server implementations provided by matter.js, or create a new protocol
 * implementation by subclassing {@link RemoteInterface} yourself.
 */
export declare abstract class RemoteServer extends Behavior {
    #private;
    static readonly early = true;
    static interfaceType: RemoteInterface.Type;
    internal: RemoteServer.Internal;
    state: RemoteServer.State;
    initialize(): Promise<void>;
    [Symbol.asyncDispose](): Promise<void>;
    static readonly schema: DatatypeModel;
}
export declare namespace RemoteServer {
    class Internal {
        interface?: RemoteInterface;
    }
    class State {
        /**
         * The public address at which the service endpoint is accessible.
         *
         * The address is a URL.  See subclasses for supported protocols.  An "s" suffix indicates standard TLS support.
         * The "+unix" suffix indicates that the hostname is a URL encoded path to a UNIX socket.  The socket path may
         * be absolute or relative to the node's storage root.
         *
         * The path portion of the URL generally acts as a namespace prefix for the relevant protocol implementation.
         * Matter.js replaces the special token `{node}` in the URL with the {@link ServerNode.id}.  This allows for
         * multiple nodes to participate in a protocol in separate namespaces.
         */
        address: string;
        /**
         * Set to false to disable this service.
         */
        enabled: boolean;
        /**
         * By default the HTTP endpoint is available as soon as the {@link Node} initializes.
         *
         * If you set this to false, the HTTP endpoint is only available when the {@link Node}'s Matter networking is
         * also online.
         */
        allowOfflineUse: boolean;
        /**
         * Certificate for encrypted endpoints in PEM format.
         */
        certificate?: string;
        /**
         * Private key for encrypted endpoints in PEM format.
         */
        key?: string;
    }
}
//# sourceMappingURL=RemoteServer.d.ts.map