/**
 * @license
 * Copyright 2022-2023 Project CHIP Authors
 * SPDX-License-Identifier: Apache-2.0
 */
import { Subject } from "#action/server/Subject.js";
import { DecodedMessage, DecodedPacket, Message, Packet, SessionType } from "#codec/MessageCodec.js";
import type { Fabric } from "#fabric/Fabric.js";
import type { FabricManager } from "#fabric/FabricManager.js";
import { Bytes, ConnectionlessTransport } from "@matter/general";
import { FabricIndex, NodeId } from "@matter/types";
import { SecureSession } from "./SecureSession.js";
import { Session } from "./Session.js";
import { SessionManager } from "./SessionManager.js";
/** Secure Group session instance */
export declare class GroupSession extends SecureSession {
    #private;
    readonly supportsMRP = false;
    readonly closingAfterExchangeFinished = false;
    readonly keySetId: number;
    constructor(config: GroupSession.Config);
    /**
     * Create an outbound group session.
     */
    static create(options: {
        manager?: SessionManager;
        transports: ConnectionlessTransport.Provider;
        id: number;
        fabric: Fabric;
        keySetId: number;
        groupNodeId: NodeId;
        operationalGroupKey: Bytes;
    }): Promise<GroupSession>;
    get type(): SessionType;
    get fabric(): Fabric;
    get id(): number;
    get peerSessionId(): number;
    get via(): string;
    get nodeId(): NodeId;
    get peerNodeId(): NodeId;
    get associatedFabric(): Fabric;
    /**
     * The peer group's address.
     */
    get peerAddress(): {
        fabricIndex: FabricIndex;
        nodeId: NodeId;
    };
    subjectFor(message?: Message): Subject;
    notifyActivity(_messageReceived: boolean): void;
    updateMessageCounter(messageCounter: number, sourceNodeId: NodeId, operationalKey: Bytes): void;
    encode(message: Message): Packet;
    decode(): DecodedMessage;
    static decode(fabrics: FabricManager, { header, applicationPayload, messageExtension }: DecodedPacket, aad: Bytes): {
        message: DecodedMessage;
        key: Bytes;
        sessionId: number;
        sourceNodeId: NodeId;
        keySetId: number;
        fabric: Fabric;
    };
    close(): Promise<void>;
}
export declare namespace GroupSession {
    interface Config extends Session.CommonConfig {
        id: number;
        fabric: Fabric;
        keySetId: number;
        peerNodeId: NodeId;
        operationalGroupKey: Bytes;
    }
    function assert(session?: Session, errorText?: string): asserts session is GroupSession;
    function is(session?: Session): session is GroupSession;
}
//# sourceMappingURL=GroupSession.d.ts.map