import GRPCClient from "./GRPCClient"; import IClientConfiguration from "../../../interfaces/Client/IClientConfiguration"; import { KeyValueType } from "../../../types/KeyValue.type"; import { GetConfigurationResponse as GetConfigurationResponseResult } from "../../../types/configuration/GetConfigurationResponse"; import { SubscribeConfigurationCallback } from "../../../types/configuration/SubscribeConfigurationCallback"; import { SubscribeConfigurationStream } from "../../../types/configuration/SubscribeConfigurationStream"; /** * gRPC-based configuration building block implementation. * * Configuration allows reading and subscribing to configuration items from external stores. * This implementation uses gRPC for efficient streaming and subscription management. * * Supports configuration stores like Consul, Kubernetes ConfigMaps, AWS Parameter Store, etc. * Subscriptions enable reactive updates when configuration changes in the backing store. * * @implements {IClientConfiguration} * @see {@link https://docs.dapr.io/reference/api/configuration_api/} Dapr Configuration API * @see {@link DaprClient.configuration} for unified API * * @internal */ export default class GRPCClientConfiguration implements IClientConfiguration { /** * Reference to the underlying gRPC client. */ client: GRPCClient; /** * Creates a gRPC configuration building block. * * @param client - The gRPC client instance */ constructor(client: GRPCClient); /** * Retrieves configuration items from a configuration store. * * @param storeName - Name of the configuration store * @param keys - Configuration keys to retrieve (empty list = all keys) * @param metadataObj - Optional store-specific metadata * * @returns Promise resolving to retrieved configuration items * * @throws Rejects if store does not exist or retrieval fails * * @example * ```typescript * const config = await client.configuration.get("myconfig", ["db-host", "db-port"]); * console.log(config.items["db-host"]); // { key: "db-host", value: "localhost", version: "1" } * ``` * * @see {@link https://docs.dapr.io/reference/api/configuration_api/#getting-configuration} */ get(storeName: string, keys: string[], metadataObj?: KeyValueType): Promise; /** * Subscribes to all configuration items in a store. * * Invokes the callback immediately with current values, then again whenever values change. * Returns a subscription handle to stop listening. * * @param storeName - Name of the configuration store * @param cb - Callback invoked on subscription and configuration changes * * @returns Promise resolving to a subscription handle with stop() method * * @throws Rejects if store does not exist or subscription fails * * @example * ```typescript * const subscription = await client.configuration.subscribe("myconfig", (items) => { * console.log("Configuration updated:", items); * }); * // ... later ... * await subscription.stop(); * ``` * * @see {@link subscribeWithKeys} * @see {@link subscribeWithMetadata} */ subscribe(storeName: string, cb: SubscribeConfigurationCallback): Promise; /** * Subscribes to specific configuration keys. * * @param storeName - Name of the configuration store * @param keys - Configuration keys to subscribe to * @param cb - Callback invoked on subscription and when keys change * * @returns Promise resolving to a subscription handle with stop() method * * @throws Rejects if store does not exist or subscription fails * * @example * ```typescript * const subscription = await client.configuration.subscribeWithKeys( * "myconfig", * ["db-host", "db-port"], * (items) => console.log("DB config changed:", items) * ); * ``` * * @see {@link subscribe} * @see {@link subscribeWithMetadata} */ subscribeWithKeys(storeName: string, keys: string[], cb: SubscribeConfigurationCallback): Promise; /** * Subscribes to configuration with store-specific metadata. * * @param storeName - Name of the configuration store * @param keys - Configuration keys to subscribe to * @param metadata - Store-specific metadata for the subscription * @param cb - Callback invoked on subscription and when keys change * * @returns Promise resolving to a subscription handle with stop() method * * @throws Rejects if store does not exist or subscription fails * * @see {@link subscribe} * @see {@link subscribeWithKeys} */ subscribeWithMetadata(storeName: string, keys: string[], metadata: KeyValueType, cb: SubscribeConfigurationCallback): Promise; /** * Internal implementation for all subscribe methods. * * Establishes a gRPC streaming subscription with automatic cleanup. * Handles stream lifecycle (abort on stop) and unsubscribe messages. * * @private * @internal */ _subscribe(storeName: string, cb: SubscribeConfigurationCallback, keys?: string[], metadataObj?: KeyValueType): Promise; }