import GRPCClient from "./GRPCClient"; import IClientMetadata from "../../../interfaces/Client/IClientMetadata"; import { GetMetadataResponse as GetMetadataResponseResult } from "../../../types/metadata/GetMetadataResponse"; /** * gRPC-based metadata building block implementation. * * Provides access to Dapr sidecar metadata including runtime info, active actors, * registered components, and extended metadata. Also allows setting custom metadata key-value pairs. * * @implements {IClientMetadata} * @see {@link https://docs.dapr.io/reference/api/metadata_api} Dapr Metadata API * @see {@link DaprClient.metadata} for unified API * * @internal */ export default class GRPCClientMetadata implements IClientMetadata { /** * Reference to the underlying gRPC client. */ client: GRPCClient; /** * Creates a gRPC metadata building block. * * @param client - The gRPC client instance */ constructor(client: GRPCClient); /** * Retrieves metadata about the Dapr runtime and sidecar configuration. * * Returns sidecar ID, active actor counts, registered components, and extended metadata. * This is useful for introspection and debugging the Dapr environment. * * @returns Promise resolving to metadata response containing: * - id: Dapr runtime ID * - actors: Array of active actor types with counts * - components: Array of registered components (state, pub/sub, bindings, etc.) * - extended: Extended metadata key-value pairs * * @throws Rejects if metadata retrieval fails * * @example * ```typescript * const metadata = await client.metadata.get(); * console.log("Dapr ID:", metadata.id); * console.log("Active actors:", metadata.actors); // [{ type: "timer", count: 5 }] * console.log("Components:", metadata.components); // [{ name: "statestore", type: "state", ...}] * ``` * * @see {@link https://docs.dapr.io/reference/api/metadata_api/#getting-metadata} */ get(): Promise; /** * Sets custom metadata on the Dapr sidecar. * * Stores a key-value pair in the sidecar's extended metadata dictionary. * Useful for runtime configuration and passing data between services. * * @param key - Metadata key * @param value - Metadata value (string) * * @returns Promise resolving to true if successful, false if set fails * * @example * ```typescript * const success = await client.metadata.set("deployment-version", "1.2.3"); * if (success) { * console.log("Metadata updated"); * } * ``` * * @see {@link get} */ set(key: string, value: string): Promise; }