/**
 * @license
 * Copyright 2022-2025 Matter.js Authors
 * SPDX-License-Identifier: Apache-2.0
 */
import { ActionContext } from "#behavior/context/ActionContext.js";
import { Endpoint } from "#endpoint/Endpoint.js";
import { EndpointLifecycle } from "#endpoint/properties/EndpointLifecycle.js";
import { AsyncObservable, Mutex, Observable } from "#general";
/**
 * Extended lifecycle information that only applies to root endpoints.
 */
export declare class NodeLifecycle extends EndpointLifecycle {
    #private;
    constructor(endpoint: Endpoint);
    /**
     * True when the node is connected to the network.
     */
    get isOnline(): boolean;
    /**
     * The time the node went online.
     */
    get onlineAt(): Date | undefined;
    /**
     * Emits when the node is first online.
     */
    get online(): AsyncObservable<[context: ActionContext], void>;
    /**
     * Emits when the node's endpoint tree is ready/initialized and used to initialize the commissioning state
     */
    get initialized(): Observable<[isCommissioned: boolean], void>;
    /**
     * Emits when the node is going offline.
     */
    get goingOffline(): AsyncObservable<[context: ActionContext], void>;
    /**
     * Emits when the node goes offline.
     */
    get offline(): AsyncObservable<[context: ActionContext], void>;
    /**
     * True when the node is part of at least one fabric.
     */
    get isCommissioned(): boolean;
    /**
     * Emits when node is first commissioned.
     */
    get commissioned(): Observable<[context: ActionContext], void>;
    /**
     * Emits when node is no longer commissioned.
     */
    get decommissioned(): Observable<[context: ActionContext], void>;
    /**
     * Mutex for protecting node lifecycle transitions.
     *
     * Methods that implement complex async lifecycle transitions use this mutex to ensure conflicting operations cannot
     * intermingle.
     *
     * Generally methods that hold this mutex have a protected "*WithMutex" variant.  This allows for nesting of logic
     * that requires the mutex without causing deadlock.
     */
    get mutex(): Mutex;
    set targetState(state: "online" | "offline");
    get shouldBeOnline(): boolean;
    get shouldBeOffline(): boolean;
}
//# sourceMappingURL=NodeLifecycle.d.ts.map