{"version":3,"sources":["../src/errors.ts","../src/internal/utils/encoding.ts","../src/internal/utils/body.ts","../src/internal/validation/message-validator.ts","../src/messages/events-store.ts","../src/internal/transport/connection-state.ts","../src/protos/kubemq.ts","../src/options.ts","../src/internal/transport/typed-emitter.ts","../src/internal/transport/connection-state-machine.ts","../src/internal/transport/reconnection-manager.ts","../src/internal/transport/message-buffer.ts","../src/internal/transport/in-flight-tracker.ts","../src/internal/transport/subscription-tracker.ts","../src/logger.ts","../src/auth/credential-provider.ts","../src/auth/token-cache.ts","../src/auth/tls-utils.ts","../src/internal/middleware/auth.ts","../src/internal/transport/grpc-transport.ts","../src/internal/config-validator.ts","../src/internal/config-defaults.ts","../src/internal/protocol/marshaller.ts","../src/internal/transport/subscription-handle.ts","../src/internal/middleware/error-mapper.ts","../src/internal/concurrency/semaphore.ts","../src/internal/concurrency/callback-dispatcher.ts","../src/internal/streaming/base-streaming-sender.ts","../src/internal/streaming/async-event-sender.ts","../src/internal/streaming/async-upstream-sender.ts","../src/internal/runtime-check.ts","../src/internal/middleware/retry.ts","../src/internal/telemetry/attributes.ts","../src/internal/middleware/telemetry.ts","../src/internal/middleware/metrics.ts","../src/client.ts","../src/internal/utils/id.ts","../src/internal/validation/message-size.ts","../src/messages/events.ts","../src/messages/queues.ts","../src/messages/commands.ts","../src/messages/queries.ts","../src/version.ts"],"names":["randomUUID","EventStoreStartPosition","ConnectionState","kubemq","StreamRequestType","QueuesDownstreamRequestType","pb_1","Subscribe","SubscribeType","EventsStoreType","Request","RequestType","grpc_1","credentials","EventEmitter","normalize","readFile","X509Certificate","isLocalhost","grpc","metadata"],"mappings":"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","file":"index.cjs","sourcesContent":["import { randomUUID } from 'node:crypto';\n\n// ─── Error Codes ─────────────────────────────────────────────────────\n\n/**\n * Machine-readable error codes identifying the specific failure condition.\n *\n * @remarks\n * Every {@link KubeMQError} carries an `ErrorCode`. Use these constants in\n * `switch` / `if` checks rather than comparing error message strings.\n *\n * @see {@link KubeMQError.code}\n * @see {@link ErrorCategory}\n */\nexport const ErrorCode = {\n  /** The initial connection or a reconnection attempt timed out. */\n  ConnectionTimeout: 'CONNECTION_TIMEOUT',\n  /** Authentication credentials were rejected by the server. */\n  AuthFailed: 'AUTH_FAILED',\n  /** A message or request failed input validation before being sent. */\n  ValidationFailed: 'VALIDATION_FAILED',\n  /** The server is temporarily unavailable (transient). */\n  Unavailable: 'UNAVAILABLE',\n  /** An operation exceeded its deadline. */\n  Timeout: 'TIMEOUT',\n  /** The server throttled the request due to rate limiting. */\n  Throttled: 'THROTTLED',\n  /** The requested channel or resource does not exist. */\n  NotFound: 'NOT_FOUND',\n  /** The authenticated identity lacks permission for this operation. */\n  PermissionDenied: 'PERMISSION_DENIED',\n  /** An unrecoverable internal error. */\n  Fatal: 'FATAL',\n  /** The operation was cancelled via `AbortSignal`. */\n  Cancelled: 'CANCELLED',\n  /** The reconnect buffer is full and cannot accept more messages. */\n  BufferFull: 'BUFFER_FULL',\n  /** A streaming connection broke mid-flight. */\n  StreamBroken: 'STREAM_BROKEN',\n  /** The client has been closed; no further operations are allowed. */\n  ClientClosed: 'CLIENT_CLOSED',\n  /** The requested feature is not implemented in this SDK version. */\n  NotImplemented: 'NOT_IMPLEMENTED',\n  /** A client configuration value is invalid. */\n  ConfigurationError: 'CONFIGURATION_ERROR',\n  /** The transport connection is not in a ready state. */\n  ConnectionNotReady: 'CONNECTION_NOT_READY',\n  /** All retry attempts have been exhausted. */\n  RetryExhausted: 'RETRY_EXHAUSTED',\n} as const;\n\n/** @see {@link ErrorCode} */\nexport type ErrorCode = (typeof ErrorCode)[keyof typeof ErrorCode];\n\n// ─── Error Categories ────────────────────────────────────────────────\n\n/**\n * Broad error categories for high-level error handling strategies.\n *\n * @remarks\n * While {@link ErrorCode} identifies the specific failure, `ErrorCategory`\n * groups errors by recovery strategy:\n * - **Transient / Timeout / Throttling** — safe to retry with backoff.\n * - **Authentication / Authorization** — fix credentials or permissions.\n * - **Validation / Configuration** — fix the input or config, then retry.\n * - **Fatal / Cancellation** — not recoverable by retry.\n * - **Backpressure** — slow down or increase buffer capacity.\n * - **NotFound** — the target channel or resource doesn't exist.\n *\n * @see {@link KubeMQError.category}\n * @see {@link ErrorCode}\n */\nexport const ErrorCategory = {\n  /** A temporary failure that may self-resolve (e.g. network blip). */\n  Transient: 'Transient',\n  /** An operation exceeded its deadline. */\n  Timeout: 'Timeout',\n  /** The server is rate-limiting the client. */\n  Throttling: 'Throttling',\n  /** Credentials are invalid or expired. */\n  Authentication: 'Authentication',\n  /** The identity lacks required permissions. */\n  Authorization: 'Authorization',\n  /** Input did not pass validation rules. */\n  Validation: 'Validation',\n  /** The target resource was not found. */\n  NotFound: 'NotFound',\n  /** Unrecoverable failure. */\n  Fatal: 'Fatal',\n  /** The operation was explicitly cancelled. */\n  Cancellation: 'Cancellation',\n  /** The system is applying backpressure (buffer full). */\n  Backpressure: 'Backpressure',\n  /** A configuration parameter is invalid. */\n  Configuration: 'Configuration',\n} as const;\n\n/** @see {@link ErrorCategory} */\nexport type ErrorCategory = (typeof ErrorCategory)[keyof typeof ErrorCategory];\n\n// ─── Options Interfaces ─────────────────────────────────────────────\n\n/**\n * Construction options shared by all {@link KubeMQError} subclasses.\n *\n * @see {@link KubeMQError}\n */\nexport interface KubeMQErrorOptions {\n  /** Machine-readable error code. Defaults to {@link ErrorCode.Fatal}. */\n  code?: ErrorCode;\n  /** Human-readable error description. */\n  message: string;\n  /** The SDK operation that failed (e.g. `'sendEvent'`). */\n  operation: string;\n  /** The channel involved, if any. */\n  channel?: string;\n  /** Whether the operation is safe to retry. */\n  isRetryable?: boolean;\n  /** The underlying cause, if this error wraps another. */\n  cause?: Error;\n  /** Correlation ID for tracing. Auto-generated UUID if omitted. */\n  requestId?: string;\n  /** gRPC status code, when the error originates from the server. */\n  statusCode?: number;\n  /** Address of the KubeMQ server that returned the error. */\n  serverAddress?: string;\n  /** Actionable suggestion for resolving the error. */\n  suggestion?: string;\n  /** Number of retry attempts made before this error was raised. */\n  retryAttempts?: number;\n  /** Maximum retries configured in the active {@link RetryPolicy}. */\n  maxRetries?: number;\n  /** Total wall-clock time spent retrying, in milliseconds. */\n  retryDuration?: number;\n}\n\n/**\n * Construction options for {@link StreamBrokenError}.\n *\n * @see {@link StreamBrokenError}\n */\nexport interface StreamBrokenErrorOptions extends KubeMQErrorOptions {\n  /** IDs of messages that were sent but not acknowledged before the stream broke. */\n  unacknowledgedMessageIds: string[];\n}\n\n/**\n * Construction options for {@link RetryExhaustedError}.\n *\n * @see {@link RetryExhaustedError}\n */\nexport interface RetryExhaustedErrorOptions extends KubeMQErrorOptions {\n  /** Total number of attempts made (initial + retries). */\n  attempts: number;\n  /** Total wall-clock time spent across all retry attempts, in milliseconds. */\n  totalDuration: number;\n  /** The error from the final failed attempt. */\n  lastError: Error;\n}\n\n/**\n * Construction options for {@link PartialFailureError}.\n *\n * @see {@link PartialFailureError}\n */\nexport interface PartialFailureErrorOptions extends KubeMQErrorOptions {\n  /** Per-item failures with their batch index and error. */\n  failures: { index: number; error: KubeMQError }[];\n}\n\n// ─── Symbol for cross-version instanceof safety ─────────────────────\n\nconst KUBEMQ_ERROR_SYMBOL = Symbol.for('kubemq.error');\n\n// ─── Base Error Class ───────────────────────────────────────────────\n\n/**\n * Base error class for all KubeMQ SDK errors.\n *\n * @remarks\n * All errors thrown by the SDK are instances of `KubeMQError` (or a subclass).\n * Use `instanceof KubeMQError` for broad catches, or check specific subclasses\n * for targeted handling. Cross-version `instanceof` safety is provided via\n * `Symbol.hasInstance`.\n *\n * Key properties for error handling:\n * - {@link KubeMQError.code | code} — machine-readable {@link ErrorCode}\n * - {@link KubeMQError.category | category} — broad {@link ErrorCategory} for strategy selection\n * - {@link KubeMQError.isRetryable | isRetryable} — whether automatic retry is appropriate\n * - {@link KubeMQError.suggestion | suggestion} — actionable fix hint\n *\n * @see {@link ErrorCode}\n * @see {@link ErrorCategory}\n */\nexport class KubeMQError extends Error {\n  /**\n   * Cross-version instanceof check via well-known symbol.\n   * Only used on the base class — subclass discrimination uses the\n   * standard prototype chain (preserved by Object.setPrototypeOf).\n   */\n  static override [Symbol.hasInstance](instance: unknown): boolean {\n    if (\n      typeof instance !== 'object' ||\n      instance === null ||\n      !(instance as Record<symbol, unknown>)[KUBEMQ_ERROR_SYMBOL]\n    ) {\n      return false;\n    }\n    if (this === KubeMQError) return true;\n    return Function.prototype[Symbol.hasInstance].call(this, instance);\n  }\n\n  override name: string;\n  readonly code: ErrorCode;\n  readonly operation: string;\n  readonly channel: string | undefined;\n  readonly isRetryable: boolean;\n  readonly requestId: string;\n  readonly statusCode: number | undefined;\n  readonly serverAddress: string | undefined;\n  readonly timestamp: Date;\n  readonly category: ErrorCategory;\n  readonly suggestion: string | undefined;\n\n  constructor(options: KubeMQErrorOptions) {\n    super(options.message, { cause: options.cause });\n    this.name = 'KubeMQError';\n    this.code = options.code ?? ErrorCode.Fatal;\n    this.operation = options.operation;\n    this.channel = options.channel;\n    this.isRetryable = options.isRetryable ?? false;\n    this.requestId = options.requestId ?? randomUUID();\n    this.statusCode = options.statusCode;\n    this.serverAddress = options.serverAddress;\n    this.timestamp = new Date();\n    this.category = ErrorCategory.Fatal;\n    this.suggestion = options.suggestion;\n    Object.setPrototypeOf(this, new.target.prototype);\n    Object.defineProperty(this, KUBEMQ_ERROR_SYMBOL, { value: true });\n  }\n\n  toJSON(): Record<string, unknown> {\n    return {\n      name: this.name,\n      code: this.code,\n      category: this.category,\n      message: this.message,\n      operation: this.operation,\n      channel: this.channel,\n      isRetryable: this.isRetryable,\n      requestId: this.requestId,\n      statusCode: this.statusCode,\n      serverAddress: this.serverAddress,\n      timestamp: this.timestamp.toISOString(),\n      suggestion: this.suggestion,\n      cause: this.cause instanceof Error ? this.cause.message : undefined,\n    };\n  }\n\n  toSanitizedString(): string {\n    const parts = [\n      `${this.operation} failed`,\n      this.channel ? `on channel \"${this.channel}\"` : undefined,\n      `: ${this.message}`,\n    ]\n      .filter(Boolean)\n      .join(' ');\n\n    const lines = [parts];\n    if (this.suggestion) {\n      lines.push(`  Suggestion: ${this.suggestion}`);\n    }\n    return lines.join('\\n');\n  }\n}\n\n// ─── Error Subclasses ───────────────────────────────────────────────\n\n/**\n * Thrown when the SDK cannot establish or maintain a connection to the server.\n *\n * @remarks\n * Retryable by default. The reconnection policy handles automatic recovery;\n * this error surfaces only if reconnection is disabled or exhausted.\n *\n * @see {@link KubeMQError}\n * @see {@link ConnectionNotReadyError}\n */\nexport class ConnectionError extends KubeMQError {\n  override readonly category = ErrorCategory.Transient;\n\n  constructor(options: KubeMQErrorOptions) {\n    super({\n      ...options,\n      code: options.code ?? ErrorCode.ConnectionTimeout,\n      isRetryable: options.isRetryable ?? true,\n    });\n    this.name = 'ConnectionError';\n    Object.setPrototypeOf(this, new.target.prototype);\n  }\n}\n\n/**\n * Thrown when the server rejects the provided authentication credentials.\n *\n * @remarks\n * Not retryable. Verify the token or {@link CredentialProvider} configuration.\n *\n * @see {@link KubeMQError}\n * @see {@link AuthorizationError}\n */\nexport class AuthenticationError extends KubeMQError {\n  override readonly category = ErrorCategory.Authentication;\n\n  constructor(options: KubeMQErrorOptions) {\n    super({\n      ...options,\n      code: options.code ?? ErrorCode.AuthFailed,\n      isRetryable: false,\n    });\n    this.name = 'AuthenticationError';\n    Object.setPrototypeOf(this, new.target.prototype);\n  }\n}\n\n/**\n * Thrown when the authenticated identity lacks permission for the requested operation.\n *\n * @remarks\n * Not retryable. The credentials are valid but the associated role/policy\n * does not grant access to the target channel or operation.\n *\n * @see {@link KubeMQError}\n * @see {@link AuthenticationError}\n */\nexport class AuthorizationError extends KubeMQError {\n  override readonly category = ErrorCategory.Authorization;\n\n  constructor(options: KubeMQErrorOptions) {\n    super({\n      ...options,\n      code: options.code ?? ErrorCode.PermissionDenied,\n      isRetryable: false,\n    });\n    this.name = 'AuthorizationError';\n    Object.setPrototypeOf(this, new.target.prototype);\n  }\n}\n\n/**\n * Thrown when an operation exceeds its configured timeout.\n *\n * @remarks\n * Retryable by default. Consider increasing the timeout via\n * {@link OperationOptions.timeout} or the relevant default in {@link ClientOptions}.\n *\n * @see {@link KubeMQError}\n */\nexport class KubeMQTimeoutError extends KubeMQError {\n  override readonly category = ErrorCategory.Timeout;\n\n  constructor(options: KubeMQErrorOptions) {\n    super({\n      ...options,\n      code: options.code ?? ErrorCode.Timeout,\n      isRetryable: options.isRetryable ?? true,\n    });\n    this.name = 'KubeMQTimeoutError';\n    Object.setPrototypeOf(this, new.target.prototype);\n  }\n}\n\n/**\n * Thrown when a message or request fails client-side validation before sending.\n *\n * @remarks\n * Not retryable. Fix the invalid input (e.g. empty channel name, missing body)\n * and re-submit. The `suggestion` property usually indicates what to fix.\n *\n * @see {@link KubeMQError}\n */\nexport class ValidationError extends KubeMQError {\n  override readonly category = ErrorCategory.Validation;\n\n  constructor(options: KubeMQErrorOptions) {\n    super({\n      ...options,\n      code: options.code ?? ErrorCode.ValidationFailed,\n      isRetryable: false,\n    });\n    this.name = 'ValidationError';\n    Object.setPrototypeOf(this, new.target.prototype);\n  }\n}\n\n/**\n * Thrown for temporary server-side failures that are expected to self-resolve.\n *\n * @remarks\n * Retryable by default. The SDK's built-in retry policy handles these\n * automatically; this error surfaces only when retries are exhausted.\n *\n * @see {@link KubeMQError}\n * @see {@link RetryPolicy}\n */\nexport class TransientError extends KubeMQError {\n  override readonly category = ErrorCategory.Transient;\n\n  constructor(options: KubeMQErrorOptions) {\n    super({\n      ...options,\n      code: options.code ?? ErrorCode.Unavailable,\n      isRetryable: options.isRetryable ?? true,\n    });\n    this.name = 'TransientError';\n    Object.setPrototypeOf(this, new.target.prototype);\n  }\n}\n\n/**\n * Thrown when the server rate-limits the client.\n *\n * @remarks\n * Retryable by default with backoff. Reduce request rate or increase\n * server-side rate limits.\n *\n * @see {@link KubeMQError}\n */\nexport class ThrottlingError extends KubeMQError {\n  override readonly category = ErrorCategory.Throttling;\n\n  constructor(options: KubeMQErrorOptions) {\n    super({\n      ...options,\n      code: options.code ?? ErrorCode.Throttled,\n      isRetryable: options.isRetryable ?? true,\n    });\n    this.name = 'ThrottlingError';\n    Object.setPrototypeOf(this, new.target.prototype);\n  }\n}\n\n/**\n * Thrown when the target channel or resource does not exist on the server.\n *\n * @remarks\n * Not retryable. Create the channel first via\n * {@link KubeMQClient.createChannel} or one of the convenience aliases.\n *\n * @see {@link KubeMQError}\n */\nexport class NotFoundError extends KubeMQError {\n  override readonly category = ErrorCategory.NotFound;\n\n  constructor(options: KubeMQErrorOptions) {\n    super({\n      ...options,\n      code: options.code ?? ErrorCode.NotFound,\n      isRetryable: false,\n    });\n    this.name = 'NotFoundError';\n    Object.setPrototypeOf(this, new.target.prototype);\n  }\n}\n\n/**\n * Thrown for unrecoverable internal failures.\n *\n * @remarks\n * Not retryable by default. Indicates a server-side or SDK-internal bug.\n * Report to the KubeMQ team if recurring.\n *\n * @see {@link KubeMQError}\n */\nexport class FatalError extends KubeMQError {\n  override readonly category = ErrorCategory.Fatal;\n\n  constructor(options: KubeMQErrorOptions) {\n    super({\n      ...options,\n      code: options.code ?? ErrorCode.Fatal,\n      isRetryable: options.isRetryable ?? false,\n    });\n    this.name = 'FatalError';\n    Object.setPrototypeOf(this, new.target.prototype);\n  }\n}\n\n/**\n * Thrown when an operation is cancelled via `AbortSignal`.\n *\n * @remarks\n * Not retryable. This is the expected error when cooperative cancellation\n * is triggered by the caller through {@link OperationOptions.signal}.\n *\n * @see {@link KubeMQError}\n */\nexport class CancellationError extends KubeMQError {\n  override readonly category = ErrorCategory.Cancellation;\n\n  constructor(options: KubeMQErrorOptions) {\n    super({\n      ...options,\n      code: options.code ?? ErrorCode.Cancelled,\n      isRetryable: false,\n    });\n    this.name = 'CancellationError';\n    Object.setPrototypeOf(this, new.target.prototype);\n  }\n}\n\n/**\n * Thrown when the reconnect buffer is full and cannot accept more messages.\n *\n * @remarks\n * Not retryable. Increase {@link ClientOptions.reconnectBufferSize} or\n * switch `reconnectBufferMode` to `'block'` for flow control.\n *\n * @see {@link KubeMQError}\n * @see {@link ClientOptions.reconnectBufferSize}\n */\nexport class BufferFullError extends KubeMQError {\n  override readonly category = ErrorCategory.Backpressure;\n\n  constructor(options: KubeMQErrorOptions) {\n    super({\n      ...options,\n      code: options.code ?? ErrorCode.BufferFull,\n      isRetryable: false,\n    });\n    this.name = 'BufferFullError';\n    Object.setPrototypeOf(this, new.target.prototype);\n  }\n}\n\n/**\n * Thrown when a streaming connection (subscription or queue stream) breaks mid-flight.\n *\n * @remarks\n * Retryable by default. Carries `unacknowledgedMessageIds` — the IDs of messages\n * that were sent but not yet acknowledged at the time the stream broke.\n * Application code should decide whether to re-send or deduplicate these messages.\n *\n * @see {@link KubeMQError}\n * @see {@link StreamBrokenErrorOptions}\n */\nexport class StreamBrokenError extends KubeMQError {\n  override readonly category = ErrorCategory.Transient;\n  readonly unacknowledgedMessageIds: string[];\n\n  constructor(options: StreamBrokenErrorOptions) {\n    super({\n      ...options,\n      code: options.code ?? ErrorCode.StreamBroken,\n      isRetryable: options.isRetryable ?? true,\n    });\n    this.name = 'StreamBrokenError';\n    this.unacknowledgedMessageIds = options.unacknowledgedMessageIds;\n    Object.setPrototypeOf(this, new.target.prototype);\n  }\n}\n\n/**\n * Thrown when an operation is attempted on a client that has already been closed.\n *\n * @remarks\n * Not retryable. Create a new {@link KubeMQClient} instance if further\n * operations are needed.\n *\n * @see {@link KubeMQError}\n * @see {@link KubeMQClient.close}\n */\nexport class ClientClosedError extends KubeMQError {\n  override readonly category = ErrorCategory.Fatal;\n\n  constructor(options: KubeMQErrorOptions) {\n    super({\n      ...options,\n      code: options.code ?? ErrorCode.ClientClosed,\n      isRetryable: false,\n    });\n    this.name = 'ClientClosedError';\n    Object.setPrototypeOf(this, new.target.prototype);\n  }\n}\n\n/**\n * Thrown when an operation is attempted before the transport connection is ready.\n *\n * @remarks\n * Not retryable by default. Usually indicates the client is still connecting\n * or in the process of reconnecting. Wait for the `'connected'` or\n * `'reconnected'` event before retrying.\n *\n * @see {@link ConnectionError}\n * @see {@link ConnectionState}\n */\nexport class ConnectionNotReadyError extends ConnectionError {\n  override readonly category = ErrorCategory.Transient;\n\n  constructor(options: KubeMQErrorOptions) {\n    super({\n      ...options,\n      code: options.code ?? ErrorCode.ConnectionNotReady,\n      isRetryable: options.isRetryable ?? false,\n    });\n    this.name = 'ConnectionNotReadyError';\n    Object.setPrototypeOf(this, new.target.prototype);\n  }\n}\n\n/**\n * Thrown when {@link ClientOptions} contain invalid or conflicting values.\n *\n * @remarks\n * Not retryable. Fix the configuration and create a new client.\n *\n * @see {@link KubeMQError}\n * @see {@link ClientOptions}\n */\nexport class ConfigurationError extends KubeMQError {\n  override readonly category = ErrorCategory.Configuration;\n\n  constructor(options: KubeMQErrorOptions) {\n    super({\n      ...options,\n      code: options.code ?? ErrorCode.ConfigurationError,\n      isRetryable: false,\n    });\n    this.name = 'ConfigurationError';\n    Object.setPrototypeOf(this, new.target.prototype);\n  }\n}\n\n/**\n * Thrown when all retry attempts for an operation have been exhausted.\n *\n * @remarks\n * Not retryable. Carries detailed retry diagnostics: `attempts`, `totalDuration`,\n * and `lastError` (the error from the final attempt). Consider increasing\n * {@link RetryPolicy.maxRetries} or investigating the root cause via `lastError`.\n *\n * @see {@link KubeMQError}\n * @see {@link RetryPolicy}\n * @see {@link RetryExhaustedErrorOptions}\n */\nexport class RetryExhaustedError extends KubeMQError {\n  readonly attempts: number;\n  readonly maxRetries: number;\n  readonly totalDuration: number;\n  readonly lastError: Error;\n\n  constructor(options: RetryExhaustedErrorOptions) {\n    super({\n      ...options,\n      code: options.code ?? ErrorCode.RetryExhausted,\n      isRetryable: false,\n    });\n    this.name = 'RetryExhaustedError';\n    this.attempts = options.attempts;\n    this.maxRetries = options.maxRetries ?? options.attempts;\n    this.totalDuration = options.totalDuration;\n    this.lastError = options.lastError;\n    Object.setPrototypeOf(this, new.target.prototype);\n  }\n\n  override toSanitizedString(): string {\n    const base = super.toSanitizedString();\n    return `${base}\\n  Retries exhausted: ${String(this.attempts)}/${String(this.maxRetries)} attempts over ${String(this.totalDuration)}ms`;\n  }\n}\n\n/**\n * Thrown when a requested feature is not implemented in this SDK version.\n *\n * @remarks\n * Not retryable. Check the SDK release notes for feature availability\n * or use an alternative API surface.\n *\n * @see {@link KubeMQError}\n */\nexport class NotImplementedError extends KubeMQError {\n  override readonly category = ErrorCategory.Fatal;\n\n  constructor(options: KubeMQErrorOptions) {\n    super({\n      ...options,\n      code: options.code ?? ErrorCode.NotImplemented,\n      isRetryable: false,\n    });\n    this.name = 'NotImplementedError';\n    Object.setPrototypeOf(this, new.target.prototype);\n  }\n}\n\n/**\n * Thrown when a batch operation partially succeeds — some items failed while others succeeded.\n *\n * @remarks\n * Inspect the {@link PartialFailureError.failures | failures} array for per-item\n * error details including the batch `index` and the associated {@link KubeMQError}.\n *\n * @see {@link KubeMQError}\n * @see {@link PartialFailureErrorOptions}\n * @see {@link KubeMQClient.sendQueueMessagesBatch}\n */\nexport class PartialFailureError extends KubeMQError {\n  readonly failures: { index: number; error: KubeMQError }[];\n\n  constructor(options: PartialFailureErrorOptions) {\n    super(options);\n    this.name = 'PartialFailureError';\n    this.failures = options.failures;\n    Object.setPrototypeOf(this, new.target.prototype);\n  }\n}\n\n/**\n * Thrown when a user-provided callback or handler throws an unhandled error.\n *\n * @remarks\n * Not retryable by default. Wraps the original error thrown by the user's\n * subscription callback or event handler. Fix the handler code to prevent\n * unhandled exceptions.\n *\n * @see {@link KubeMQError}\n */\nexport class HandlerError extends KubeMQError {\n  override readonly category = ErrorCategory.Fatal;\n\n  constructor(options: KubeMQErrorOptions) {\n    super({\n      ...options,\n      code: options.code ?? ErrorCode.Fatal,\n      isRetryable: options.isRetryable ?? false,\n    });\n    this.name = 'HandlerError';\n    Object.setPrototypeOf(this, new.target.prototype);\n  }\n}\n\n/**\n * All pending sends failed because the shared streaming sender's gRPC stream\n * disconnected. The caller can retry after the client reconnects.\n */\nexport class SenderDisconnectedError extends TransientError {\n  constructor(\n    options: Omit<KubeMQErrorOptions, 'code' | 'isRetryable'> & {\n      code?: ErrorCode;\n      isRetryable?: boolean;\n    },\n  ) {\n    super({\n      ...options,\n      code: options.code ?? ErrorCode.StreamBroken,\n      isRetryable: options.isRetryable ?? true,\n    });\n    this.name = 'SenderDisconnectedError';\n    Object.setPrototypeOf(this, new.target.prototype);\n  }\n}\n\n/**\n * A send was attempted on a sender that has been closed.\n */\nexport class SenderClosedError extends KubeMQError {\n  override readonly category = ErrorCategory.Fatal;\n\n  constructor(\n    options: Omit<KubeMQErrorOptions, 'code' | 'isRetryable'> & {\n      code?: ErrorCode;\n      isRetryable?: boolean;\n    },\n  ) {\n    super({\n      ...options,\n      code: options.code ?? ErrorCode.ClientClosed,\n      isRetryable: options.isRetryable ?? false,\n    });\n    this.name = 'SenderClosedError';\n    Object.setPrototypeOf(this, new.target.prototype);\n  }\n}\n","/**\n * Cached TextEncoder/TextDecoder singletons for efficient string↔bytes\n * conversion. Both are stateless when used without streaming, so\n * module-level reuse is safe across concurrent async operations.\n *\n * @internal\n */\n\nconst encoder = new TextEncoder();\nconst decoder = new TextDecoder('utf-8', { fatal: true });\n\n/**\n * Encode a string to UTF-8 bytes using the cached TextEncoder.\n */\nexport function stringToBytes(str: string): Uint8Array {\n  return encoder.encode(str);\n}\n\n/**\n * Decode UTF-8 bytes to a string using the cached TextDecoder.\n * Throws `TypeError` on invalid UTF-8 sequences (fail-fast).\n */\nexport function bytesToString(bytes: Uint8Array): string {\n  return decoder.decode(bytes);\n}\n\n/**\n * Normalize input to `Uint8Array`. Zero-copy when input is already\n * `Uint8Array`; encodes via cached TextEncoder when input is a string.\n */\nexport function toBytes(input: Uint8Array | string): Uint8Array {\n  if (typeof input === 'string') {\n    return encoder.encode(input);\n  }\n  return input;\n}\n\n/**\n * Create a zero-copy `Buffer` view over a `Uint8Array`.\n * Use when gRPC or protobuf APIs require `Buffer`.\n *\n * @remarks\n * `Buffer.from(uint8.buffer, uint8.byteOffset, uint8.byteLength)` shares\n * the underlying ArrayBuffer — no data copy.\n */\nexport function toBuffer(data: Uint8Array): Buffer {\n  return Buffer.from(data.buffer, data.byteOffset, data.byteLength);\n}\n","/** @internal */\n\nimport { stringToBytes, bytesToString as decodeBytesToString } from './encoding.js';\n\n/**\n * Union type for message body inputs. Accepts string (auto-encoded to UTF-8),\n * Uint8Array, or Node.js Buffer (zero-copy view extracted).\n *\n * Public API methods and factory functions accept `MessageBody`;\n * internally the SDK normalizes to `Uint8Array` before sending to gRPC.\n */\nexport type MessageBody = string | Uint8Array | Buffer;\n\n/**\n * Normalize any accepted body input to a `Uint8Array`.\n *\n * - `string` → UTF-8 encoded via cached `TextEncoder`\n * - `Buffer` → zero-copy `Uint8Array` view (no data copy)\n * - `Uint8Array` → returned as-is\n */\nexport function normalizeBody(body: MessageBody): Uint8Array {\n  if (typeof body === 'string') {\n    return stringToBytes(body);\n  }\n  if (Buffer.isBuffer(body)) {\n    return new Uint8Array(body.buffer, body.byteOffset, body.byteLength);\n  }\n  return body;\n}\n\n/**\n * Decode a `Uint8Array` body to a UTF-8 string.\n * Uses the cached `TextDecoder` singleton.\n */\nexport function bodyToString(body: Uint8Array): string {\n  return decodeBytesToString(body);\n}\n","/** @internal */\n\nimport { ValidationError, ErrorCode } from '../../errors.js';\nimport type { EventMessage } from '../../messages/events.js';\nimport type { EventStoreMessage, EventStoreSubscription } from '../../messages/events-store.js';\nimport { EventStoreStartPosition } from '../../messages/events-store.js';\nimport type { QueueMessage, QueuePollRequest } from '../../messages/queues.js';\nimport type { CommandMessage } from '../../messages/commands.js';\nimport type { QueryMessage } from '../../messages/queries.js';\n\nfunction fail(message: string, operation: string, channel?: string, suggestion?: string): never {\n  throw new ValidationError({\n    code: ErrorCode.ValidationFailed,\n    message,\n    operation,\n    channel,\n    isRetryable: false,\n    suggestion,\n  });\n}\n\nfunction requireNonEmptyChannel(channel: unknown, operation: string): asserts channel is string {\n  if (typeof channel !== 'string' || channel.trim().length === 0) {\n    fail(\n      'Channel name is required and must not be empty',\n      operation,\n      undefined,\n      \"Provide a non-empty channel name, e.g., 'my-events'\",\n    );\n  }\n}\n\nfunction requireBody(\n  msg: { body?: unknown; metadata?: string; tags?: Record<string, string> },\n  operation: string,\n): void {\n  const hasBody =\n    msg.body !== undefined &&\n    msg.body !== null &&\n    (typeof msg.body === 'string' ? msg.body.length > 0 : (msg.body as Uint8Array).length > 0);\n  const hasMetadata = typeof msg.metadata === 'string' && msg.metadata.trim().length > 0;\n  const hasTags = msg.tags !== undefined && Object.keys(msg.tags).length > 0;\n\n  if (!hasBody && !hasMetadata && !hasTags) {\n    fail(\n      'Message must have at least one of: body, metadata, or tags',\n      operation,\n      (msg as { channel?: string }).channel,\n      'Provide a body (string or Uint8Array), metadata string, or tags',\n    );\n  }\n}\n\nfunction requirePositive(value: number | undefined, field: string, operation: string): void {\n  if (value !== undefined && value <= 0) {\n    fail(`${field} must be a positive number, got ${String(value)}`, operation);\n  }\n}\n\nfunction requireNonNegative(value: number | undefined, field: string, operation: string): void {\n  if (value !== undefined && value < 0) {\n    fail(`${field} must be non-negative, got ${String(value)}`, operation);\n  }\n}\n\nfunction validateChannelFormat(channel: string, allowWildcards: boolean, operation: string): void {\n  if (!allowWildcards && /[*>]/.test(channel)) {\n    fail(\n      'Channel name cannot contain wildcards (* or >)',\n      operation,\n      channel,\n      'Wildcards are only allowed for Events subscribe',\n    );\n  }\n  if (/\\s/.test(channel)) {\n    fail(\n      'Channel name cannot contain whitespace',\n      operation,\n      channel,\n      'Remove whitespace from channel name',\n    );\n  }\n  if (channel.endsWith('.')) {\n    fail(\n      'Channel name cannot end with \".\"',\n      operation,\n      channel,\n      'Remove trailing dot from channel name',\n    );\n  }\n}\n\n// ─── Per-Pattern Validators ──────────────────────────────────────────\n\nexport function validateEventMessage(msg: EventMessage, operation: string): void {\n  requireNonEmptyChannel(msg.channel, operation);\n  validateChannelFormat(msg.channel, false, operation);\n  requireBody(msg, operation);\n}\n\nexport function validateEventStoreMessage(msg: EventStoreMessage, operation: string): void {\n  requireNonEmptyChannel(msg.channel, operation);\n  validateChannelFormat(msg.channel, false, operation);\n  requireBody(msg, operation);\n}\n\nexport function validateQueueMessage(msg: QueueMessage, operation: string): void {\n  requireNonEmptyChannel(msg.channel, operation);\n  validateChannelFormat(msg.channel, false, operation);\n  requireBody(msg, operation);\n  if (msg.policy) {\n    requireNonNegative(msg.policy.delaySeconds, 'policy.delaySeconds', operation);\n    requireNonNegative(msg.policy.expirationSeconds, 'policy.expirationSeconds', operation);\n    requireNonNegative(msg.policy.maxReceiveCount, 'policy.maxReceiveCount', operation);\n    if (msg.policy.maxReceiveCount !== undefined && msg.policy.maxReceiveCount > 0) {\n      if (!msg.policy.maxReceiveQueue || msg.policy.maxReceiveQueue.trim().length === 0) {\n        fail(\n          'policy.maxReceiveQueue is required when policy.maxReceiveCount > 0',\n          operation,\n          msg.channel,\n          'Provide a dead-letter queue name for rejected messages',\n        );\n      }\n    }\n  }\n}\n\nexport function validateCommandMessage(msg: CommandMessage, operation: string): void {\n  requireNonEmptyChannel(msg.channel, operation);\n  validateChannelFormat(msg.channel, false, operation);\n  requireBody(msg, operation);\n  if (msg.timeoutInSeconds <= 0) {\n    fail(\n      'Command message requires a positive timeoutInSeconds',\n      operation,\n      msg.channel,\n      'Set timeoutInSeconds to the maximum time (in seconds) to wait for a response',\n    );\n  }\n}\n\nexport function validateQueryMessage(msg: QueryMessage, operation: string): void {\n  requireNonEmptyChannel(msg.channel, operation);\n  validateChannelFormat(msg.channel, false, operation);\n  requireBody(msg, operation);\n  if (msg.timeoutInSeconds <= 0) {\n    fail(\n      'Query message requires a positive timeoutInSeconds',\n      operation,\n      msg.channel,\n      'Set timeoutInSeconds to the maximum time (in seconds) to wait for a response',\n    );\n  }\n  if (msg.cacheKey && (!msg.cacheTtlInSeconds || msg.cacheTtlInSeconds <= 0)) {\n    fail(\n      'cacheTtlInSeconds is required and must be > 0 when cacheKey is set',\n      operation,\n      msg.channel,\n      'Set cacheTtlInSeconds to a positive number of seconds',\n    );\n  }\n  if (msg.cacheTtlInSeconds !== undefined) {\n    requirePositive(msg.cacheTtlInSeconds, 'cacheTtlInSeconds', operation);\n  }\n}\n\nexport function validateQueuePollRequest(req: QueuePollRequest, operation: string): void {\n  requireNonEmptyChannel(req.channel, operation);\n  requirePositive(req.waitTimeoutSeconds, 'waitTimeoutSeconds', operation);\n  if (req.maxMessages !== undefined) {\n    requirePositive(req.maxMessages, 'maxMessages', operation);\n  }\n  if (req.maxMessages !== undefined && req.maxMessages > 1024) {\n    fail('maxMessages must be <= 1024', operation, req.channel);\n  }\n  if (req.waitTimeoutSeconds > 3600) {\n    fail('waitTimeoutSeconds must be <= 3600', operation, req.channel);\n  }\n  // M4 note: autoAck is accepted but has no wire effect\n  // on the unary ReceiveQueueMessages API — server always auto-acks.\n}\n\nexport function validateSubscription(\n  sub: { channel: string; group?: string },\n  operation: string,\n  allowWildcards = false,\n): void {\n  requireNonEmptyChannel(sub.channel, operation);\n  validateChannelFormat(sub.channel, allowWildcards, operation);\n}\n\nexport function validateEventStoreSubscription(\n  sub: EventStoreSubscription,\n  operation: string,\n): void {\n  requireNonEmptyChannel(sub.channel, operation);\n  if (/[*>]/.test(sub.channel)) {\n    fail(\n      'EventsStore subscriptions do not support wildcard channels',\n      operation,\n      sub.channel,\n      'Use Events subscribe for wildcard patterns',\n    );\n  }\n\n  if ((sub.startFrom as number | undefined) == null) {\n    fail(\n      'EventStore subscription requires a startFrom value',\n      operation,\n      sub.channel,\n      'Set startFrom to one of the EventStoreStartPosition values (e.g., EventStoreStartPosition.StartFromNew)',\n    );\n  }\n\n  if (sub.startFrom === EventStoreStartPosition.StartAtSequence) {\n    if (sub.startValue === undefined || sub.startValue <= 0) {\n      fail(\n        'EventStore subscription with StartAtSequence requires a positive startValue (sequence number)',\n        operation,\n        sub.channel,\n      );\n    }\n  }\n\n  if (sub.startFrom === EventStoreStartPosition.StartAtTime) {\n    if (sub.startValue === undefined || sub.startValue <= 0) {\n      fail(\n        'EventStore subscription with StartAtTime requires a positive startValue (Unix timestamp in seconds)',\n        operation,\n        sub.channel,\n      );\n    }\n  }\n\n  if (sub.startFrom === EventStoreStartPosition.StartAtTimeDelta) {\n    if (sub.startValue === undefined || sub.startValue <= 0) {\n      fail(\n        'EventStore subscription with StartAtTimeDelta requires a positive startValue (seconds from now)',\n        operation,\n        sub.channel,\n      );\n    }\n  }\n}\n\nexport function validateResponseMessage(\n  resp: { id: string; replyChannel: string },\n  operation: string,\n): void {\n  if (!resp.id || resp.id.trim().length === 0) {\n    fail('Response id (RequestID) is required', operation);\n  }\n  if (!resp.replyChannel || resp.replyChannel.trim().length === 0) {\n    fail('Response replyChannel is required', operation);\n  }\n}\n","import { randomUUID } from 'node:crypto';\nimport type { KubeMQError } from '../errors.js';\nimport type { MessageBody } from '../internal/utils/body.js';\nimport { normalizeBody } from '../internal/utils/body.js';\nimport { validateEventStoreMessage } from '../internal/validation/message-validator.js';\n\n/**\n * Subscription start position for event-store channels.\n *\n * @remarks\n * Determines where in the persisted event stream a new subscriber begins\n * receiving messages. Used in {@link EventStoreSubscription.startFrom}.\n *\n * @see {@link EventStoreSubscription}\n * @see {@link KubeMQClient.subscribeToEventsStore}\n */\nexport enum EventStoreStartPosition {\n  /** Receive only events published after the subscription is created. */\n  StartFromNew = 1,\n  /** Replay all events from the beginning of the stream. */\n  StartFromFirst = 2,\n  /** Start from the most recent event and receive new ones going forward. */\n  StartFromLast = 3,\n  /** Start at a specific sequence number (set via {@link EventStoreSubscription.startValue}). */\n  StartAtSequence = 4,\n  /** Start at a specific point in time (set via {@link EventStoreSubscription.startValue} as Unix epoch ms). */\n  StartAtTime = 5,\n  /** Start at a time delta in seconds from now (set via {@link EventStoreSubscription.startValue}). */\n  StartAtTimeDelta = 6,\n}\n\n/**\n * Outbound persistent event message.\n *\n * @remarks\n * **Async safety:** Not safe for concurrent modification. Create a new instance\n * per send operation. Do not share outbound message objects between concurrent\n * async operations. Message objects are frozen (`Object.freeze()`) by factory\n * functions — modification after creation throws a `TypeError`.\n */\nexport interface EventStoreMessage {\n  readonly channel: string;\n  readonly body?: MessageBody;\n  readonly metadata?: string;\n  readonly tags?: Record<string, string>;\n  readonly id?: string;\n  readonly clientId?: string;\n}\n\n/**\n * Received persistent event from a subscription.\n *\n * @remarks\n * **Async safety:** Safe to read from multiple async contexts concurrently.\n * Do not modify received message objects — they are shared references from\n * the subscription's delivery pipeline. Fields are readonly.\n */\nexport interface EventStoreReceived {\n  readonly id: string;\n  readonly channel: string;\n  readonly timestamp: Date;\n  readonly body: Uint8Array;\n  readonly metadata: string;\n  readonly tags: Record<string, string>;\n  readonly sequence: number;\n}\n\n/**\n * Subscription request for persistent events.\n *\n * @remarks\n * **Async safety:** Subscription callbacks fire sequentially on the Node.js\n * event loop by default. Opt-in concurrent processing is available via\n * `maxConcurrentCallbacks` in `SubscriptionOptions`. When concurrency > 1,\n * message ordering is NOT guaranteed.\n */\nexport interface EventStoreSubscription {\n  readonly channel: string;\n  readonly group?: string;\n  readonly startFrom: EventStoreStartPosition;\n  readonly startValue?: number;\n  readonly onEvent: (event: EventStoreReceived) => void;\n  readonly onError: (err: KubeMQError) => void;\n}\n\n/**\n * Result of a persistent event-store send operation.\n *\n * @see {@link KubeMQClient.sendEventStore}\n */\nexport interface EventStoreResult {\n  /** Server-assigned event ID. */\n  readonly id: string;\n  /** Whether the event was successfully persisted. */\n  readonly sent: boolean;\n  /** Error message if the send failed. */\n  readonly error: string;\n}\n\n/**\n * Handle for a persistent event-store publishing stream with delivery confirmation.\n *\n * @remarks\n * Obtained from {@link KubeMQClient.createEventStoreStream}. Unlike\n * {@link EventStreamHandle}, the `send()` method returns a `Promise`\n * that resolves when the server confirms persistence, or rejects on failure.\n *\n * @see {@link KubeMQClient.createEventStoreStream}\n * @see {@link EventStoreMessage}\n */\nexport interface EventStoreStreamHandle {\n  /** Publish an event-store message. Resolves when the server confirms persistence. */\n  send(msg: EventStoreMessage): Promise<void>;\n  /** Register a handler for asynchronous stream errors. */\n  onError(handler: (err: Error) => void): void;\n  /** Close the stream and release resources. */\n  close(): void;\n  /** Whether the stream is still active. */\n  readonly isActive: boolean;\n}\n\n/**\n * Create a validated, frozen EventStoreMessage with defaults applied.\n *\n * - `id` defaults to a random UUID\n * - `metadata` defaults to `''`\n * - `tags` defaults to `{}`\n * - String/Buffer body is normalized to `Uint8Array`\n *\n * @example\n * ```typescript\n * const event = createEventStoreMessage({\n *   channel: 'events-store.audit-log',\n *   body: new TextEncoder().encode(JSON.stringify({ action: 'login', userId: '42' })),\n *   tags: { service: 'auth' },\n * });\n * await client.sendEventStore(event);\n * ```\n */\nexport function createEventStoreMessage(\n  opts: Omit<EventStoreMessage, 'id'> & { id?: string },\n): Readonly<EventStoreMessage> {\n  validateEventStoreMessage(opts, 'createEventStoreMessage');\n\n  const msg: EventStoreMessage = {\n    channel: opts.channel,\n    body: opts.body !== undefined ? normalizeBody(opts.body) : undefined,\n    metadata: opts.metadata ?? '',\n    tags: opts.tags ?? {},\n    id: opts.id ?? randomUUID(),\n    clientId: opts.clientId,\n  };\n\n  return Object.freeze(msg);\n}\n","/**\n * Connection lifecycle states.\n *\n * Transition diagram:\n *   IDLE ──> CONNECTING ──> READY\n *     ^          │             │\n *     │          v             v\n *     │    RECONNECTING ──> READY\n *     │      │  ↺ (self)\n *     v      v\n *       CLOSED (terminal)\n *\n * RECONNECTING → RECONNECTING is a valid self-transition representing\n * a new reconnection attempt. The 'reconnecting' event fires on each attempt.\n *\n * @internal\n */\nexport enum ConnectionState {\n  IDLE = 'IDLE',\n  CONNECTING = 'CONNECTING',\n  READY = 'READY',\n  RECONNECTING = 'RECONNECTING',\n  CLOSED = 'CLOSED',\n}\n\nconst VALID_TRANSITIONS: ReadonlyMap<ConnectionState, ReadonlySet<ConnectionState>> = new Map([\n  [ConnectionState.IDLE, new Set([ConnectionState.CONNECTING, ConnectionState.CLOSED])],\n  [\n    ConnectionState.CONNECTING,\n    new Set([ConnectionState.READY, ConnectionState.RECONNECTING, ConnectionState.CLOSED]),\n  ],\n  [ConnectionState.READY, new Set([ConnectionState.RECONNECTING, ConnectionState.CLOSED])],\n  [\n    ConnectionState.RECONNECTING,\n    new Set([ConnectionState.RECONNECTING, ConnectionState.READY, ConnectionState.CLOSED]),\n  ],\n  [ConnectionState.CLOSED, new Set<ConnectionState>()],\n]);\n\nexport function isValidTransition(from: ConnectionState, to: ConnectionState): boolean {\n  return VALID_TRANSITIONS.get(from)?.has(to) ?? false;\n}\n","// @ts-nocheck\n/**\n * Generated by the protoc-gen-ts.  DO NOT EDIT!\n * compiler version: 3.19.1\n * source: kubemq.proto\n * git: https://github.com/thesayyn/protoc-gen-ts */\nimport * as pb_1 from 'google-protobuf';\nimport * as grpc_1 from '@grpc/grpc-js';\nexport namespace kubemq {\n  export enum StreamRequestType {\n    StreamRequestTypeUnknown = 0,\n    ReceiveMessage = 1,\n    AckMessage = 2,\n    RejectMessage = 3,\n    ModifyVisibility = 4,\n    ResendMessage = 5,\n    SendModifiedMessage = 6,\n  }\n  export enum QueuesDownstreamRequestType {\n    PollRequestTypeUnknown = 0,\n    Get = 1,\n    AckAll = 2,\n    AckRange = 3,\n    NAckAll = 4,\n    NAckRange = 5,\n    ReQueueAll = 6,\n    ReQueueRange = 7,\n    ActiveOffsets = 8,\n    TransactionStatus = 9,\n    CloseByClient = 10,\n    CloseByServer = 11,\n  }\n  export class PingResult extends pb_1.Message {\n    #one_of_decls: number[][] = [];\n    constructor(\n      data?:\n        | any[]\n        | {\n            Host?: string;\n            Version?: string;\n            ServerStartTime?: number;\n            ServerUpTimeSeconds?: number;\n          },\n    ) {\n      super();\n      pb_1.Message.initialize(this, Array.isArray(data) ? data : [], 0, -1, [], this.#one_of_decls);\n      if (!Array.isArray(data) && typeof data == 'object') {\n        if ('Host' in data && data.Host != undefined) {\n          this.Host = data.Host;\n        }\n        if ('Version' in data && data.Version != undefined) {\n          this.Version = data.Version;\n        }\n        if ('ServerStartTime' in data && data.ServerStartTime != undefined) {\n          this.ServerStartTime = data.ServerStartTime;\n        }\n        if ('ServerUpTimeSeconds' in data && data.ServerUpTimeSeconds != undefined) {\n          this.ServerUpTimeSeconds = data.ServerUpTimeSeconds;\n        }\n      }\n    }\n    get Host() {\n      return pb_1.Message.getFieldWithDefault(this, 1, '') as string;\n    }\n    set Host(value: string) {\n      pb_1.Message.setField(this, 1, value);\n    }\n    get Version() {\n      return pb_1.Message.getFieldWithDefault(this, 2, '') as string;\n    }\n    set Version(value: string) {\n      pb_1.Message.setField(this, 2, value);\n    }\n    get ServerStartTime() {\n      return pb_1.Message.getFieldWithDefault(this, 3, 0) as number;\n    }\n    set ServerStartTime(value: number) {\n      pb_1.Message.setField(this, 3, value);\n    }\n    get ServerUpTimeSeconds() {\n      return pb_1.Message.getFieldWithDefault(this, 4, 0) as number;\n    }\n    set ServerUpTimeSeconds(value: number) {\n      pb_1.Message.setField(this, 4, value);\n    }\n    static fromObject(data: {\n      Host?: string;\n      Version?: string;\n      ServerStartTime?: number;\n      ServerUpTimeSeconds?: number;\n    }): PingResult {\n      const message = new PingResult({});\n      if (data.Host != null) {\n        message.Host = data.Host;\n      }\n      if (data.Version != null) {\n        message.Version = data.Version;\n      }\n      if (data.ServerStartTime != null) {\n        message.ServerStartTime = data.ServerStartTime;\n      }\n      if (data.ServerUpTimeSeconds != null) {\n        message.ServerUpTimeSeconds = data.ServerUpTimeSeconds;\n      }\n      return message;\n    }\n    toObject() {\n      const data: {\n        Host?: string;\n        Version?: string;\n        ServerStartTime?: number;\n        ServerUpTimeSeconds?: number;\n      } = {};\n      if (this.Host != null) {\n        data.Host = this.Host;\n      }\n      if (this.Version != null) {\n        data.Version = this.Version;\n      }\n      if (this.ServerStartTime != null) {\n        data.ServerStartTime = this.ServerStartTime;\n      }\n      if (this.ServerUpTimeSeconds != null) {\n        data.ServerUpTimeSeconds = this.ServerUpTimeSeconds;\n      }\n      return data;\n    }\n    serialize(): Uint8Array;\n    serialize(w: pb_1.BinaryWriter): void;\n    serialize(w?: pb_1.BinaryWriter): Uint8Array | void {\n      const writer = w || new pb_1.BinaryWriter();\n      if (this.Host.length) writer.writeString(1, this.Host);\n      if (this.Version.length) writer.writeString(2, this.Version);\n      if (this.ServerStartTime != 0) writer.writeInt64(3, this.ServerStartTime);\n      if (this.ServerUpTimeSeconds != 0) writer.writeInt64(4, this.ServerUpTimeSeconds);\n      if (!w) return writer.getResultBuffer();\n    }\n    static deserialize(bytes: Uint8Array | pb_1.BinaryReader): PingResult {\n      const reader = bytes instanceof pb_1.BinaryReader ? bytes : new pb_1.BinaryReader(bytes),\n        message = new PingResult();\n      while (reader.nextField()) {\n        if (reader.isEndGroup()) break;\n        switch (reader.getFieldNumber()) {\n          case 1:\n            message.Host = reader.readString();\n            break;\n          case 2:\n            message.Version = reader.readString();\n            break;\n          case 3:\n            message.ServerStartTime = reader.readInt64();\n            break;\n          case 4:\n            message.ServerUpTimeSeconds = reader.readInt64();\n            break;\n          default:\n            reader.skipField();\n        }\n      }\n      return message;\n    }\n    serializeBinary(): Uint8Array {\n      return this.serialize();\n    }\n    static deserializeBinary(bytes: Uint8Array): PingResult {\n      return PingResult.deserialize(bytes);\n    }\n  }\n  export class Empty extends pb_1.Message {\n    #one_of_decls: number[][] = [];\n    constructor(data?: any[] | {}) {\n      super();\n      pb_1.Message.initialize(this, Array.isArray(data) ? data : [], 0, -1, [], this.#one_of_decls);\n      if (!Array.isArray(data) && typeof data == 'object') {\n      }\n    }\n    static fromObject(data: {}): Empty {\n      const message = new Empty({});\n      return message;\n    }\n    toObject() {\n      const data: {} = {};\n      return data;\n    }\n    serialize(): Uint8Array;\n    serialize(w: pb_1.BinaryWriter): void;\n    serialize(w?: pb_1.BinaryWriter): Uint8Array | void {\n      const writer = w || new pb_1.BinaryWriter();\n      if (!w) return writer.getResultBuffer();\n    }\n    static deserialize(bytes: Uint8Array | pb_1.BinaryReader): Empty {\n      const reader = bytes instanceof pb_1.BinaryReader ? bytes : new pb_1.BinaryReader(bytes),\n        message = new Empty();\n      while (reader.nextField()) {\n        if (reader.isEndGroup()) break;\n        switch (reader.getFieldNumber()) {\n          default:\n            reader.skipField();\n        }\n      }\n      return message;\n    }\n    serializeBinary(): Uint8Array {\n      return this.serialize();\n    }\n    static deserializeBinary(bytes: Uint8Array): Empty {\n      return Empty.deserialize(bytes);\n    }\n  }\n  export class Result extends pb_1.Message {\n    #one_of_decls: number[][] = [];\n    constructor(\n      data?:\n        | any[]\n        | {\n            EventID?: string;\n            Sent?: boolean;\n            Error?: string;\n          },\n    ) {\n      super();\n      pb_1.Message.initialize(this, Array.isArray(data) ? data : [], 0, -1, [], this.#one_of_decls);\n      if (!Array.isArray(data) && typeof data == 'object') {\n        if ('EventID' in data && data.EventID != undefined) {\n          this.EventID = data.EventID;\n        }\n        if ('Sent' in data && data.Sent != undefined) {\n          this.Sent = data.Sent;\n        }\n        if ('Error' in data && data.Error != undefined) {\n          this.Error = data.Error;\n        }\n      }\n    }\n    get EventID() {\n      return pb_1.Message.getFieldWithDefault(this, 1, '') as string;\n    }\n    set EventID(value: string) {\n      pb_1.Message.setField(this, 1, value);\n    }\n    get Sent() {\n      return pb_1.Message.getFieldWithDefault(this, 2, false) as boolean;\n    }\n    set Sent(value: boolean) {\n      pb_1.Message.setField(this, 2, value);\n    }\n    get Error() {\n      return pb_1.Message.getFieldWithDefault(this, 3, '') as string;\n    }\n    set Error(value: string) {\n      pb_1.Message.setField(this, 3, value);\n    }\n    static fromObject(data: { EventID?: string; Sent?: boolean; Error?: string }): Result {\n      const message = new Result({});\n      if (data.EventID != null) {\n        message.EventID = data.EventID;\n      }\n      if (data.Sent != null) {\n        message.Sent = data.Sent;\n      }\n      if (data.Error != null) {\n        message.Error = data.Error;\n      }\n      return message;\n    }\n    toObject() {\n      const data: {\n        EventID?: string;\n        Sent?: boolean;\n        Error?: string;\n      } = {};\n      if (this.EventID != null) {\n        data.EventID = this.EventID;\n      }\n      if (this.Sent != null) {\n        data.Sent = this.Sent;\n      }\n      if (this.Error != null) {\n        data.Error = this.Error;\n      }\n      return data;\n    }\n    serialize(): Uint8Array;\n    serialize(w: pb_1.BinaryWriter): void;\n    serialize(w?: pb_1.BinaryWriter): Uint8Array | void {\n      const writer = w || new pb_1.BinaryWriter();\n      if (this.EventID.length) writer.writeString(1, this.EventID);\n      if (this.Sent != false) writer.writeBool(2, this.Sent);\n      if (this.Error.length) writer.writeString(3, this.Error);\n      if (!w) return writer.getResultBuffer();\n    }\n    static deserialize(bytes: Uint8Array | pb_1.BinaryReader): Result {\n      const reader = bytes instanceof pb_1.BinaryReader ? bytes : new pb_1.BinaryReader(bytes),\n        message = new Result();\n      while (reader.nextField()) {\n        if (reader.isEndGroup()) break;\n        switch (reader.getFieldNumber()) {\n          case 1:\n            message.EventID = reader.readString();\n            break;\n          case 2:\n            message.Sent = reader.readBool();\n            break;\n          case 3:\n            message.Error = reader.readString();\n            break;\n          default:\n            reader.skipField();\n        }\n      }\n      return message;\n    }\n    serializeBinary(): Uint8Array {\n      return this.serialize();\n    }\n    static deserializeBinary(bytes: Uint8Array): Result {\n      return Result.deserialize(bytes);\n    }\n  }\n  export class Event extends pb_1.Message {\n    #one_of_decls: number[][] = [];\n    constructor(\n      data?:\n        | any[]\n        | {\n            EventID?: string;\n            ClientID?: string;\n            Channel?: string;\n            Metadata?: string;\n            Body?: Uint8Array;\n            Store?: boolean;\n            Tags?: Map<string, string>;\n          },\n    ) {\n      super();\n      pb_1.Message.initialize(this, Array.isArray(data) ? data : [], 0, -1, [], this.#one_of_decls);\n      if (!Array.isArray(data) && typeof data == 'object') {\n        if ('EventID' in data && data.EventID != undefined) {\n          this.EventID = data.EventID;\n        }\n        if ('ClientID' in data && data.ClientID != undefined) {\n          this.ClientID = data.ClientID;\n        }\n        if ('Channel' in data && data.Channel != undefined) {\n          this.Channel = data.Channel;\n        }\n        if ('Metadata' in data && data.Metadata != undefined) {\n          this.Metadata = data.Metadata;\n        }\n        if ('Body' in data && data.Body != undefined) {\n          this.Body = data.Body;\n        }\n        if ('Store' in data && data.Store != undefined) {\n          this.Store = data.Store;\n        }\n        if ('Tags' in data && data.Tags != undefined) {\n          this.Tags = data.Tags;\n        }\n      }\n      if (!this.Tags) this.Tags = new Map();\n    }\n    get EventID() {\n      return pb_1.Message.getFieldWithDefault(this, 1, '') as string;\n    }\n    set EventID(value: string) {\n      pb_1.Message.setField(this, 1, value);\n    }\n    get ClientID() {\n      return pb_1.Message.getFieldWithDefault(this, 2, '') as string;\n    }\n    set ClientID(value: string) {\n      pb_1.Message.setField(this, 2, value);\n    }\n    get Channel() {\n      return pb_1.Message.getFieldWithDefault(this, 3, '') as string;\n    }\n    set Channel(value: string) {\n      pb_1.Message.setField(this, 3, value);\n    }\n    get Metadata() {\n      return pb_1.Message.getFieldWithDefault(this, 4, '') as string;\n    }\n    set Metadata(value: string) {\n      pb_1.Message.setField(this, 4, value);\n    }\n    get Body() {\n      return pb_1.Message.getFieldWithDefault(this, 5, new Uint8Array(0)) as Uint8Array;\n    }\n    set Body(value: Uint8Array) {\n      pb_1.Message.setField(this, 5, value);\n    }\n    get Store() {\n      return pb_1.Message.getFieldWithDefault(this, 6, false) as boolean;\n    }\n    set Store(value: boolean) {\n      pb_1.Message.setField(this, 6, value);\n    }\n    get Tags() {\n      return pb_1.Message.getField(this, 7) as any as Map<string, string>;\n    }\n    set Tags(value: Map<string, string>) {\n      pb_1.Message.setField(this, 7, value as any);\n    }\n    static fromObject(data: {\n      EventID?: string;\n      ClientID?: string;\n      Channel?: string;\n      Metadata?: string;\n      Body?: Uint8Array;\n      Store?: boolean;\n      Tags?: {\n        [key: string]: string;\n      };\n    }): Event {\n      const message = new Event({});\n      if (data.EventID != null) {\n        message.EventID = data.EventID;\n      }\n      if (data.ClientID != null) {\n        message.ClientID = data.ClientID;\n      }\n      if (data.Channel != null) {\n        message.Channel = data.Channel;\n      }\n      if (data.Metadata != null) {\n        message.Metadata = data.Metadata;\n      }\n      if (data.Body != null) {\n        message.Body = data.Body;\n      }\n      if (data.Store != null) {\n        message.Store = data.Store;\n      }\n      if (typeof data.Tags == 'object') {\n        message.Tags = new Map(Object.entries(data.Tags));\n      }\n      return message;\n    }\n    toObject() {\n      const data: {\n        EventID?: string;\n        ClientID?: string;\n        Channel?: string;\n        Metadata?: string;\n        Body?: Uint8Array;\n        Store?: boolean;\n        Tags?: {\n          [key: string]: string;\n        };\n      } = {};\n      if (this.EventID != null) {\n        data.EventID = this.EventID;\n      }\n      if (this.ClientID != null) {\n        data.ClientID = this.ClientID;\n      }\n      if (this.Channel != null) {\n        data.Channel = this.Channel;\n      }\n      if (this.Metadata != null) {\n        data.Metadata = this.Metadata;\n      }\n      if (this.Body != null) {\n        data.Body = this.Body;\n      }\n      if (this.Store != null) {\n        data.Store = this.Store;\n      }\n      if (this.Tags != null) {\n        data.Tags = Object.fromEntries(this.Tags);\n      }\n      return data;\n    }\n    serialize(): Uint8Array;\n    serialize(w: pb_1.BinaryWriter): void;\n    serialize(w?: pb_1.BinaryWriter): Uint8Array | void {\n      const writer = w || new pb_1.BinaryWriter();\n      if (this.EventID.length) writer.writeString(1, this.EventID);\n      if (this.ClientID.length) writer.writeString(2, this.ClientID);\n      if (this.Channel.length) writer.writeString(3, this.Channel);\n      if (this.Metadata.length) writer.writeString(4, this.Metadata);\n      if (this.Body.length) writer.writeBytes(5, this.Body);\n      if (this.Store != false) writer.writeBool(6, this.Store);\n      for (const [key, value] of this.Tags) {\n        writer.writeMessage(7, this.Tags, () => {\n          writer.writeString(1, key);\n          writer.writeString(2, value);\n        });\n      }\n      if (!w) return writer.getResultBuffer();\n    }\n    static deserialize(bytes: Uint8Array | pb_1.BinaryReader): Event {\n      const reader = bytes instanceof pb_1.BinaryReader ? bytes : new pb_1.BinaryReader(bytes),\n        message = new Event();\n      while (reader.nextField()) {\n        if (reader.isEndGroup()) break;\n        switch (reader.getFieldNumber()) {\n          case 1:\n            message.EventID = reader.readString();\n            break;\n          case 2:\n            message.ClientID = reader.readString();\n            break;\n          case 3:\n            message.Channel = reader.readString();\n            break;\n          case 4:\n            message.Metadata = reader.readString();\n            break;\n          case 5:\n            message.Body = reader.readBytes();\n            break;\n          case 6:\n            message.Store = reader.readBool();\n            break;\n          case 7:\n            reader.readMessage(message, () =>\n              pb_1.Map.deserializeBinary(\n                message.Tags as any,\n                reader,\n                reader.readString,\n                reader.readString,\n              ),\n            );\n            break;\n          default:\n            reader.skipField();\n        }\n      }\n      return message;\n    }\n    serializeBinary(): Uint8Array {\n      return this.serialize();\n    }\n    static deserializeBinary(bytes: Uint8Array): Event {\n      return Event.deserialize(bytes);\n    }\n  }\n  export class EventReceive extends pb_1.Message {\n    #one_of_decls: number[][] = [];\n    constructor(\n      data?:\n        | any[]\n        | {\n            EventID?: string;\n            Channel?: string;\n            Metadata?: string;\n            Body?: Uint8Array;\n            Timestamp?: number;\n            Sequence?: number;\n            Tags?: Map<string, string>;\n          },\n    ) {\n      super();\n      pb_1.Message.initialize(this, Array.isArray(data) ? data : [], 0, -1, [], this.#one_of_decls);\n      if (!Array.isArray(data) && typeof data == 'object') {\n        if ('EventID' in data && data.EventID != undefined) {\n          this.EventID = data.EventID;\n        }\n        if ('Channel' in data && data.Channel != undefined) {\n          this.Channel = data.Channel;\n        }\n        if ('Metadata' in data && data.Metadata != undefined) {\n          this.Metadata = data.Metadata;\n        }\n        if ('Body' in data && data.Body != undefined) {\n          this.Body = data.Body;\n        }\n        if ('Timestamp' in data && data.Timestamp != undefined) {\n          this.Timestamp = data.Timestamp;\n        }\n        if ('Sequence' in data && data.Sequence != undefined) {\n          this.Sequence = data.Sequence;\n        }\n        if ('Tags' in data && data.Tags != undefined) {\n          this.Tags = data.Tags;\n        }\n      }\n      if (!this.Tags) this.Tags = new Map();\n    }\n    get EventID() {\n      return pb_1.Message.getFieldWithDefault(this, 1, '') as string;\n    }\n    set EventID(value: string) {\n      pb_1.Message.setField(this, 1, value);\n    }\n    get Channel() {\n      return pb_1.Message.getFieldWithDefault(this, 2, '') as string;\n    }\n    set Channel(value: string) {\n      pb_1.Message.setField(this, 2, value);\n    }\n    get Metadata() {\n      return pb_1.Message.getFieldWithDefault(this, 3, '') as string;\n    }\n    set Metadata(value: string) {\n      pb_1.Message.setField(this, 3, value);\n    }\n    get Body() {\n      return pb_1.Message.getFieldWithDefault(this, 4, new Uint8Array(0)) as Uint8Array;\n    }\n    set Body(value: Uint8Array) {\n      pb_1.Message.setField(this, 4, value);\n    }\n    get Timestamp() {\n      return pb_1.Message.getFieldWithDefault(this, 5, 0) as number;\n    }\n    set Timestamp(value: number) {\n      pb_1.Message.setField(this, 5, value);\n    }\n    get Sequence() {\n      return pb_1.Message.getFieldWithDefault(this, 6, 0) as number;\n    }\n    set Sequence(value: number) {\n      pb_1.Message.setField(this, 6, value);\n    }\n    get Tags() {\n      return pb_1.Message.getField(this, 7) as any as Map<string, string>;\n    }\n    set Tags(value: Map<string, string>) {\n      pb_1.Message.setField(this, 7, value as any);\n    }\n    static fromObject(data: {\n      EventID?: string;\n      Channel?: string;\n      Metadata?: string;\n      Body?: Uint8Array;\n      Timestamp?: number;\n      Sequence?: number;\n      Tags?: {\n        [key: string]: string;\n      };\n    }): EventReceive {\n      const message = new EventReceive({});\n      if (data.EventID != null) {\n        message.EventID = data.EventID;\n      }\n      if (data.Channel != null) {\n        message.Channel = data.Channel;\n      }\n      if (data.Metadata != null) {\n        message.Metadata = data.Metadata;\n      }\n      if (data.Body != null) {\n        message.Body = data.Body;\n      }\n      if (data.Timestamp != null) {\n        message.Timestamp = data.Timestamp;\n      }\n      if (data.Sequence != null) {\n        message.Sequence = data.Sequence;\n      }\n      if (typeof data.Tags == 'object') {\n        message.Tags = new Map(Object.entries(data.Tags));\n      }\n      return message;\n    }\n    toObject() {\n      const data: {\n        EventID?: string;\n        Channel?: string;\n        Metadata?: string;\n        Body?: Uint8Array;\n        Timestamp?: number;\n        Sequence?: number;\n        Tags?: {\n          [key: string]: string;\n        };\n      } = {};\n      if (this.EventID != null) {\n        data.EventID = this.EventID;\n      }\n      if (this.Channel != null) {\n        data.Channel = this.Channel;\n      }\n      if (this.Metadata != null) {\n        data.Metadata = this.Metadata;\n      }\n      if (this.Body != null) {\n        data.Body = this.Body;\n      }\n      if (this.Timestamp != null) {\n        data.Timestamp = this.Timestamp;\n      }\n      if (this.Sequence != null) {\n        data.Sequence = this.Sequence;\n      }\n      if (this.Tags != null) {\n        data.Tags = Object.fromEntries(this.Tags);\n      }\n      return data;\n    }\n    serialize(): Uint8Array;\n    serialize(w: pb_1.BinaryWriter): void;\n    serialize(w?: pb_1.BinaryWriter): Uint8Array | void {\n      const writer = w || new pb_1.BinaryWriter();\n      if (this.EventID.length) writer.writeString(1, this.EventID);\n      if (this.Channel.length) writer.writeString(2, this.Channel);\n      if (this.Metadata.length) writer.writeString(3, this.Metadata);\n      if (this.Body.length) writer.writeBytes(4, this.Body);\n      if (this.Timestamp != 0) writer.writeInt64(5, this.Timestamp);\n      if (this.Sequence != 0) writer.writeUint64(6, this.Sequence);\n      for (const [key, value] of this.Tags) {\n        writer.writeMessage(7, this.Tags, () => {\n          writer.writeString(1, key);\n          writer.writeString(2, value);\n        });\n      }\n      if (!w) return writer.getResultBuffer();\n    }\n    static deserialize(bytes: Uint8Array | pb_1.BinaryReader): EventReceive {\n      const reader = bytes instanceof pb_1.BinaryReader ? bytes : new pb_1.BinaryReader(bytes),\n        message = new EventReceive();\n      while (reader.nextField()) {\n        if (reader.isEndGroup()) break;\n        switch (reader.getFieldNumber()) {\n          case 1:\n            message.EventID = reader.readString();\n            break;\n          case 2:\n            message.Channel = reader.readString();\n            break;\n          case 3:\n            message.Metadata = reader.readString();\n            break;\n          case 4:\n            message.Body = reader.readBytes();\n            break;\n          case 5:\n            message.Timestamp = reader.readInt64();\n            break;\n          case 6:\n            message.Sequence = reader.readUint64();\n            break;\n          case 7:\n            reader.readMessage(message, () =>\n              pb_1.Map.deserializeBinary(\n                message.Tags as any,\n                reader,\n                reader.readString,\n                reader.readString,\n              ),\n            );\n            break;\n          default:\n            reader.skipField();\n        }\n      }\n      return message;\n    }\n    serializeBinary(): Uint8Array {\n      return this.serialize();\n    }\n    static deserializeBinary(bytes: Uint8Array): EventReceive {\n      return EventReceive.deserialize(bytes);\n    }\n  }\n  export class Subscribe extends pb_1.Message {\n    #one_of_decls: number[][] = [];\n    constructor(\n      data?:\n        | any[]\n        | {\n            SubscribeTypeData?: Subscribe.SubscribeType;\n            ClientID?: string;\n            Channel?: string;\n            Group?: string;\n            EventsStoreTypeData?: Subscribe.EventsStoreType;\n            EventsStoreTypeValue?: number;\n          },\n    ) {\n      super();\n      pb_1.Message.initialize(this, Array.isArray(data) ? data : [], 0, -1, [], this.#one_of_decls);\n      if (!Array.isArray(data) && typeof data == 'object') {\n        if ('SubscribeTypeData' in data && data.SubscribeTypeData != undefined) {\n          this.SubscribeTypeData = data.SubscribeTypeData;\n        }\n        if ('ClientID' in data && data.ClientID != undefined) {\n          this.ClientID = data.ClientID;\n        }\n        if ('Channel' in data && data.Channel != undefined) {\n          this.Channel = data.Channel;\n        }\n        if ('Group' in data && data.Group != undefined) {\n          this.Group = data.Group;\n        }\n        if ('EventsStoreTypeData' in data && data.EventsStoreTypeData != undefined) {\n          this.EventsStoreTypeData = data.EventsStoreTypeData;\n        }\n        if ('EventsStoreTypeValue' in data && data.EventsStoreTypeValue != undefined) {\n          this.EventsStoreTypeValue = data.EventsStoreTypeValue;\n        }\n      }\n    }\n    get SubscribeTypeData() {\n      return pb_1.Message.getFieldWithDefault(\n        this,\n        1,\n        Subscribe.SubscribeType.SubscribeTypeUndefined,\n      ) as Subscribe.SubscribeType;\n    }\n    set SubscribeTypeData(value: Subscribe.SubscribeType) {\n      pb_1.Message.setField(this, 1, value);\n    }\n    get ClientID() {\n      return pb_1.Message.getFieldWithDefault(this, 2, '') as string;\n    }\n    set ClientID(value: string) {\n      pb_1.Message.setField(this, 2, value);\n    }\n    get Channel() {\n      return pb_1.Message.getFieldWithDefault(this, 3, '') as string;\n    }\n    set Channel(value: string) {\n      pb_1.Message.setField(this, 3, value);\n    }\n    get Group() {\n      return pb_1.Message.getFieldWithDefault(this, 4, '') as string;\n    }\n    set Group(value: string) {\n      pb_1.Message.setField(this, 4, value);\n    }\n    get EventsStoreTypeData() {\n      return pb_1.Message.getFieldWithDefault(\n        this,\n        5,\n        Subscribe.EventsStoreType.EventsStoreTypeUndefined,\n      ) as Subscribe.EventsStoreType;\n    }\n    set EventsStoreTypeData(value: Subscribe.EventsStoreType) {\n      pb_1.Message.setField(this, 5, value);\n    }\n    get EventsStoreTypeValue() {\n      return pb_1.Message.getFieldWithDefault(this, 6, 0) as number;\n    }\n    set EventsStoreTypeValue(value: number) {\n      pb_1.Message.setField(this, 6, value);\n    }\n    static fromObject(data: {\n      SubscribeTypeData?: Subscribe.SubscribeType;\n      ClientID?: string;\n      Channel?: string;\n      Group?: string;\n      EventsStoreTypeData?: Subscribe.EventsStoreType;\n      EventsStoreTypeValue?: number;\n    }): Subscribe {\n      const message = new Subscribe({});\n      if (data.SubscribeTypeData != null) {\n        message.SubscribeTypeData = data.SubscribeTypeData;\n      }\n      if (data.ClientID != null) {\n        message.ClientID = data.ClientID;\n      }\n      if (data.Channel != null) {\n        message.Channel = data.Channel;\n      }\n      if (data.Group != null) {\n        message.Group = data.Group;\n      }\n      if (data.EventsStoreTypeData != null) {\n        message.EventsStoreTypeData = data.EventsStoreTypeData;\n      }\n      if (data.EventsStoreTypeValue != null) {\n        message.EventsStoreTypeValue = data.EventsStoreTypeValue;\n      }\n      return message;\n    }\n    toObject() {\n      const data: {\n        SubscribeTypeData?: Subscribe.SubscribeType;\n        ClientID?: string;\n        Channel?: string;\n        Group?: string;\n        EventsStoreTypeData?: Subscribe.EventsStoreType;\n        EventsStoreTypeValue?: number;\n      } = {};\n      if (this.SubscribeTypeData != null) {\n        data.SubscribeTypeData = this.SubscribeTypeData;\n      }\n      if (this.ClientID != null) {\n        data.ClientID = this.ClientID;\n      }\n      if (this.Channel != null) {\n        data.Channel = this.Channel;\n      }\n      if (this.Group != null) {\n        data.Group = this.Group;\n      }\n      if (this.EventsStoreTypeData != null) {\n        data.EventsStoreTypeData = this.EventsStoreTypeData;\n      }\n      if (this.EventsStoreTypeValue != null) {\n        data.EventsStoreTypeValue = this.EventsStoreTypeValue;\n      }\n      return data;\n    }\n    serialize(): Uint8Array;\n    serialize(w: pb_1.BinaryWriter): void;\n    serialize(w?: pb_1.BinaryWriter): Uint8Array | void {\n      const writer = w || new pb_1.BinaryWriter();\n      if (this.SubscribeTypeData != Subscribe.SubscribeType.SubscribeTypeUndefined)\n        writer.writeEnum(1, this.SubscribeTypeData);\n      if (this.ClientID.length) writer.writeString(2, this.ClientID);\n      if (this.Channel.length) writer.writeString(3, this.Channel);\n      if (this.Group.length) writer.writeString(4, this.Group);\n      if (this.EventsStoreTypeData != Subscribe.EventsStoreType.EventsStoreTypeUndefined)\n        writer.writeEnum(5, this.EventsStoreTypeData);\n      if (this.EventsStoreTypeValue != 0) writer.writeInt64(6, this.EventsStoreTypeValue);\n      if (!w) return writer.getResultBuffer();\n    }\n    static deserialize(bytes: Uint8Array | pb_1.BinaryReader): Subscribe {\n      const reader = bytes instanceof pb_1.BinaryReader ? bytes : new pb_1.BinaryReader(bytes),\n        message = new Subscribe();\n      while (reader.nextField()) {\n        if (reader.isEndGroup()) break;\n        switch (reader.getFieldNumber()) {\n          case 1:\n            message.SubscribeTypeData = reader.readEnum();\n            break;\n          case 2:\n            message.ClientID = reader.readString();\n            break;\n          case 3:\n            message.Channel = reader.readString();\n            break;\n          case 4:\n            message.Group = reader.readString();\n            break;\n          case 5:\n            message.EventsStoreTypeData = reader.readEnum();\n            break;\n          case 6:\n            message.EventsStoreTypeValue = reader.readInt64();\n            break;\n          default:\n            reader.skipField();\n        }\n      }\n      return message;\n    }\n    serializeBinary(): Uint8Array {\n      return this.serialize();\n    }\n    static deserializeBinary(bytes: Uint8Array): Subscribe {\n      return Subscribe.deserialize(bytes);\n    }\n  }\n  export namespace Subscribe {\n    export enum SubscribeType {\n      SubscribeTypeUndefined = 0,\n      Events = 1,\n      EventsStore = 2,\n      Commands = 3,\n      Queries = 4,\n    }\n    export enum EventsStoreType {\n      EventsStoreTypeUndefined = 0,\n      StartNewOnly = 1,\n      StartFromFirst = 2,\n      StartFromLast = 3,\n      StartAtSequence = 4,\n      StartAtTime = 5,\n      StartAtTimeDelta = 6,\n    }\n  }\n  export class Request extends pb_1.Message {\n    #one_of_decls: number[][] = [];\n    constructor(\n      data?:\n        | any[]\n        | {\n            RequestID?: string;\n            RequestTypeData?: Request.RequestType;\n            ClientID?: string;\n            Channel?: string;\n            Metadata?: string;\n            Body?: Uint8Array;\n            ReplyChannel?: string;\n            Timeout?: number;\n            CacheKey?: string;\n            CacheTTL?: number;\n            Span?: Uint8Array;\n            Tags?: Map<string, string>;\n          },\n    ) {\n      super();\n      pb_1.Message.initialize(this, Array.isArray(data) ? data : [], 0, -1, [], this.#one_of_decls);\n      if (!Array.isArray(data) && typeof data == 'object') {\n        if ('RequestID' in data && data.RequestID != undefined) {\n          this.RequestID = data.RequestID;\n        }\n        if ('RequestTypeData' in data && data.RequestTypeData != undefined) {\n          this.RequestTypeData = data.RequestTypeData;\n        }\n        if ('ClientID' in data && data.ClientID != undefined) {\n          this.ClientID = data.ClientID;\n        }\n        if ('Channel' in data && data.Channel != undefined) {\n          this.Channel = data.Channel;\n        }\n        if ('Metadata' in data && data.Metadata != undefined) {\n          this.Metadata = data.Metadata;\n        }\n        if ('Body' in data && data.Body != undefined) {\n          this.Body = data.Body;\n        }\n        if ('ReplyChannel' in data && data.ReplyChannel != undefined) {\n          this.ReplyChannel = data.ReplyChannel;\n        }\n        if ('Timeout' in data && data.Timeout != undefined) {\n          this.Timeout = data.Timeout;\n        }\n        if ('CacheKey' in data && data.CacheKey != undefined) {\n          this.CacheKey = data.CacheKey;\n        }\n        if ('CacheTTL' in data && data.CacheTTL != undefined) {\n          this.CacheTTL = data.CacheTTL;\n        }\n        if ('Span' in data && data.Span != undefined) {\n          this.Span = data.Span;\n        }\n        if ('Tags' in data && data.Tags != undefined) {\n          this.Tags = data.Tags;\n        }\n      }\n      if (!this.Tags) this.Tags = new Map();\n    }\n    get RequestID() {\n      return pb_1.Message.getFieldWithDefault(this, 1, '') as string;\n    }\n    set RequestID(value: string) {\n      pb_1.Message.setField(this, 1, value);\n    }\n    get RequestTypeData() {\n      return pb_1.Message.getFieldWithDefault(\n        this,\n        2,\n        Request.RequestType.RequestTypeUnknown,\n      ) as Request.RequestType;\n    }\n    set RequestTypeData(value: Request.RequestType) {\n      pb_1.Message.setField(this, 2, value);\n    }\n    get ClientID() {\n      return pb_1.Message.getFieldWithDefault(this, 3, '') as string;\n    }\n    set ClientID(value: string) {\n      pb_1.Message.setField(this, 3, value);\n    }\n    get Channel() {\n      return pb_1.Message.getFieldWithDefault(this, 4, '') as string;\n    }\n    set Channel(value: string) {\n      pb_1.Message.setField(this, 4, value);\n    }\n    get Metadata() {\n      return pb_1.Message.getFieldWithDefault(this, 5, '') as string;\n    }\n    set Metadata(value: string) {\n      pb_1.Message.setField(this, 5, value);\n    }\n    get Body() {\n      return pb_1.Message.getFieldWithDefault(this, 6, new Uint8Array(0)) as Uint8Array;\n    }\n    set Body(value: Uint8Array) {\n      pb_1.Message.setField(this, 6, value);\n    }\n    get ReplyChannel() {\n      return pb_1.Message.getFieldWithDefault(this, 7, '') as string;\n    }\n    set ReplyChannel(value: string) {\n      pb_1.Message.setField(this, 7, value);\n    }\n    get Timeout() {\n      return pb_1.Message.getFieldWithDefault(this, 8, 0) as number;\n    }\n    set Timeout(value: number) {\n      pb_1.Message.setField(this, 8, value);\n    }\n    get CacheKey() {\n      return pb_1.Message.getFieldWithDefault(this, 9, '') as string;\n    }\n    set CacheKey(value: string) {\n      pb_1.Message.setField(this, 9, value);\n    }\n    get CacheTTL() {\n      return pb_1.Message.getFieldWithDefault(this, 10, 0) as number;\n    }\n    set CacheTTL(value: number) {\n      pb_1.Message.setField(this, 10, value);\n    }\n    get Span() {\n      return pb_1.Message.getFieldWithDefault(this, 11, new Uint8Array(0)) as Uint8Array;\n    }\n    set Span(value: Uint8Array) {\n      pb_1.Message.setField(this, 11, value);\n    }\n    get Tags() {\n      return pb_1.Message.getField(this, 12) as any as Map<string, string>;\n    }\n    set Tags(value: Map<string, string>) {\n      pb_1.Message.setField(this, 12, value as any);\n    }\n    static fromObject(data: {\n      RequestID?: string;\n      RequestTypeData?: Request.RequestType;\n      ClientID?: string;\n      Channel?: string;\n      Metadata?: string;\n      Body?: Uint8Array;\n      ReplyChannel?: string;\n      Timeout?: number;\n      CacheKey?: string;\n      CacheTTL?: number;\n      Span?: Uint8Array;\n      Tags?: {\n        [key: string]: string;\n      };\n    }): Request {\n      const message = new Request({});\n      if (data.RequestID != null) {\n        message.RequestID = data.RequestID;\n      }\n      if (data.RequestTypeData != null) {\n        message.RequestTypeData = data.RequestTypeData;\n      }\n      if (data.ClientID != null) {\n        message.ClientID = data.ClientID;\n      }\n      if (data.Channel != null) {\n        message.Channel = data.Channel;\n      }\n      if (data.Metadata != null) {\n        message.Metadata = data.Metadata;\n      }\n      if (data.Body != null) {\n        message.Body = data.Body;\n      }\n      if (data.ReplyChannel != null) {\n        message.ReplyChannel = data.ReplyChannel;\n      }\n      if (data.Timeout != null) {\n        message.Timeout = data.Timeout;\n      }\n      if (data.CacheKey != null) {\n        message.CacheKey = data.CacheKey;\n      }\n      if (data.CacheTTL != null) {\n        message.CacheTTL = data.CacheTTL;\n      }\n      if (data.Span != null) {\n        message.Span = data.Span;\n      }\n      if (typeof data.Tags == 'object') {\n        message.Tags = new Map(Object.entries(data.Tags));\n      }\n      return message;\n    }\n    toObject() {\n      const data: {\n        RequestID?: string;\n        RequestTypeData?: Request.RequestType;\n        ClientID?: string;\n        Channel?: string;\n        Metadata?: string;\n        Body?: Uint8Array;\n        ReplyChannel?: string;\n        Timeout?: number;\n        CacheKey?: string;\n        CacheTTL?: number;\n        Span?: Uint8Array;\n        Tags?: {\n          [key: string]: string;\n        };\n      } = {};\n      if (this.RequestID != null) {\n        data.RequestID = this.RequestID;\n      }\n      if (this.RequestTypeData != null) {\n        data.RequestTypeData = this.RequestTypeData;\n      }\n      if (this.ClientID != null) {\n        data.ClientID = this.ClientID;\n      }\n      if (this.Channel != null) {\n        data.Channel = this.Channel;\n      }\n      if (this.Metadata != null) {\n        data.Metadata = this.Metadata;\n      }\n      if (this.Body != null) {\n        data.Body = this.Body;\n      }\n      if (this.ReplyChannel != null) {\n        data.ReplyChannel = this.ReplyChannel;\n      }\n      if (this.Timeout != null) {\n        data.Timeout = this.Timeout;\n      }\n      if (this.CacheKey != null) {\n        data.CacheKey = this.CacheKey;\n      }\n      if (this.CacheTTL != null) {\n        data.CacheTTL = this.CacheTTL;\n      }\n      if (this.Span != null) {\n        data.Span = this.Span;\n      }\n      if (this.Tags != null) {\n        data.Tags = Object.fromEntries(this.Tags);\n      }\n      return data;\n    }\n    serialize(): Uint8Array;\n    serialize(w: pb_1.BinaryWriter): void;\n    serialize(w?: pb_1.BinaryWriter): Uint8Array | void {\n      const writer = w || new pb_1.BinaryWriter();\n      if (this.RequestID.length) writer.writeString(1, this.RequestID);\n      if (this.RequestTypeData != Request.RequestType.RequestTypeUnknown)\n        writer.writeEnum(2, this.RequestTypeData);\n      if (this.ClientID.length) writer.writeString(3, this.ClientID);\n      if (this.Channel.length) writer.writeString(4, this.Channel);\n      if (this.Metadata.length) writer.writeString(5, this.Metadata);\n      if (this.Body.length) writer.writeBytes(6, this.Body);\n      if (this.ReplyChannel.length) writer.writeString(7, this.ReplyChannel);\n      if (this.Timeout != 0) writer.writeInt32(8, this.Timeout);\n      if (this.CacheKey.length) writer.writeString(9, this.CacheKey);\n      if (this.CacheTTL != 0) writer.writeInt32(10, this.CacheTTL);\n      if (this.Span.length) writer.writeBytes(11, this.Span);\n      for (const [key, value] of this.Tags) {\n        writer.writeMessage(12, this.Tags, () => {\n          writer.writeString(1, key);\n          writer.writeString(2, value);\n        });\n      }\n      if (!w) return writer.getResultBuffer();\n    }\n    static deserialize(bytes: Uint8Array | pb_1.BinaryReader): Request {\n      const reader = bytes instanceof pb_1.BinaryReader ? bytes : new pb_1.BinaryReader(bytes),\n        message = new Request();\n      while (reader.nextField()) {\n        if (reader.isEndGroup()) break;\n        switch (reader.getFieldNumber()) {\n          case 1:\n            message.RequestID = reader.readString();\n            break;\n          case 2:\n            message.RequestTypeData = reader.readEnum();\n            break;\n          case 3:\n            message.ClientID = reader.readString();\n            break;\n          case 4:\n            message.Channel = reader.readString();\n            break;\n          case 5:\n            message.Metadata = reader.readString();\n            break;\n          case 6:\n            message.Body = reader.readBytes();\n            break;\n          case 7:\n            message.ReplyChannel = reader.readString();\n            break;\n          case 8:\n            message.Timeout = reader.readInt32();\n            break;\n          case 9:\n            message.CacheKey = reader.readString();\n            break;\n          case 10:\n            message.CacheTTL = reader.readInt32();\n            break;\n          case 11:\n            message.Span = reader.readBytes();\n            break;\n          case 12:\n            reader.readMessage(message, () =>\n              pb_1.Map.deserializeBinary(\n                message.Tags as any,\n                reader,\n                reader.readString,\n                reader.readString,\n              ),\n            );\n            break;\n          default:\n            reader.skipField();\n        }\n      }\n      return message;\n    }\n    serializeBinary(): Uint8Array {\n      return this.serialize();\n    }\n    static deserializeBinary(bytes: Uint8Array): Request {\n      return Request.deserialize(bytes);\n    }\n  }\n  export namespace Request {\n    export enum RequestType {\n      RequestTypeUnknown = 0,\n      Command = 1,\n      Query = 2,\n    }\n  }\n  export class Response extends pb_1.Message {\n    #one_of_decls: number[][] = [];\n    constructor(\n      data?:\n        | any[]\n        | {\n            ClientID?: string;\n            RequestID?: string;\n            ReplyChannel?: string;\n            Metadata?: string;\n            Body?: Uint8Array;\n            CacheHit?: boolean;\n            Timestamp?: number;\n            Executed?: boolean;\n            Error?: string;\n            Span?: Uint8Array;\n            Tags?: Map<string, string>;\n          },\n    ) {\n      super();\n      pb_1.Message.initialize(this, Array.isArray(data) ? data : [], 0, -1, [], this.#one_of_decls);\n      if (!Array.isArray(data) && typeof data == 'object') {\n        if ('ClientID' in data && data.ClientID != undefined) {\n          this.ClientID = data.ClientID;\n        }\n        if ('RequestID' in data && data.RequestID != undefined) {\n          this.RequestID = data.RequestID;\n        }\n        if ('ReplyChannel' in data && data.ReplyChannel != undefined) {\n          this.ReplyChannel = data.ReplyChannel;\n        }\n        if ('Metadata' in data && data.Metadata != undefined) {\n          this.Metadata = data.Metadata;\n        }\n        if ('Body' in data && data.Body != undefined) {\n          this.Body = data.Body;\n        }\n        if ('CacheHit' in data && data.CacheHit != undefined) {\n          this.CacheHit = data.CacheHit;\n        }\n        if ('Timestamp' in data && data.Timestamp != undefined) {\n          this.Timestamp = data.Timestamp;\n        }\n        if ('Executed' in data && data.Executed != undefined) {\n          this.Executed = data.Executed;\n        }\n        if ('Error' in data && data.Error != undefined) {\n          this.Error = data.Error;\n        }\n        if ('Span' in data && data.Span != undefined) {\n          this.Span = data.Span;\n        }\n        if ('Tags' in data && data.Tags != undefined) {\n          this.Tags = data.Tags;\n        }\n      }\n      if (!this.Tags) this.Tags = new Map();\n    }\n    get ClientID() {\n      return pb_1.Message.getFieldWithDefault(this, 1, '') as string;\n    }\n    set ClientID(value: string) {\n      pb_1.Message.setField(this, 1, value);\n    }\n    get RequestID() {\n      return pb_1.Message.getFieldWithDefault(this, 2, '') as string;\n    }\n    set RequestID(value: string) {\n      pb_1.Message.setField(this, 2, value);\n    }\n    get ReplyChannel() {\n      return pb_1.Message.getFieldWithDefault(this, 3, '') as string;\n    }\n    set ReplyChannel(value: string) {\n      pb_1.Message.setField(this, 3, value);\n    }\n    get Metadata() {\n      return pb_1.Message.getFieldWithDefault(this, 4, '') as string;\n    }\n    set Metadata(value: string) {\n      pb_1.Message.setField(this, 4, value);\n    }\n    get Body() {\n      return pb_1.Message.getFieldWithDefault(this, 5, new Uint8Array(0)) as Uint8Array;\n    }\n    set Body(value: Uint8Array) {\n      pb_1.Message.setField(this, 5, value);\n    }\n    get CacheHit() {\n      return pb_1.Message.getFieldWithDefault(this, 6, false) as boolean;\n    }\n    set CacheHit(value: boolean) {\n      pb_1.Message.setField(this, 6, value);\n    }\n    get Timestamp() {\n      return pb_1.Message.getFieldWithDefault(this, 7, 0) as number;\n    }\n    set Timestamp(value: number) {\n      pb_1.Message.setField(this, 7, value);\n    }\n    get Executed() {\n      return pb_1.Message.getFieldWithDefault(this, 8, false) as boolean;\n    }\n    set Executed(value: boolean) {\n      pb_1.Message.setField(this, 8, value);\n    }\n    get Error() {\n      return pb_1.Message.getFieldWithDefault(this, 9, '') as string;\n    }\n    set Error(value: string) {\n      pb_1.Message.setField(this, 9, value);\n    }\n    get Span() {\n      return pb_1.Message.getFieldWithDefault(this, 10, new Uint8Array(0)) as Uint8Array;\n    }\n    set Span(value: Uint8Array) {\n      pb_1.Message.setField(this, 10, value);\n    }\n    get Tags() {\n      return pb_1.Message.getField(this, 11) as any as Map<string, string>;\n    }\n    set Tags(value: Map<string, string>) {\n      pb_1.Message.setField(this, 11, value as any);\n    }\n    static fromObject(data: {\n      ClientID?: string;\n      RequestID?: string;\n      ReplyChannel?: string;\n      Metadata?: string;\n      Body?: Uint8Array;\n      CacheHit?: boolean;\n      Timestamp?: number;\n      Executed?: boolean;\n      Error?: string;\n      Span?: Uint8Array;\n      Tags?: {\n        [key: string]: string;\n      };\n    }): Response {\n      const message = new Response({});\n      if (data.ClientID != null) {\n        message.ClientID = data.ClientID;\n      }\n      if (data.RequestID != null) {\n        message.RequestID = data.RequestID;\n      }\n      if (data.ReplyChannel != null) {\n        message.ReplyChannel = data.ReplyChannel;\n      }\n      if (data.Metadata != null) {\n        message.Metadata = data.Metadata;\n      }\n      if (data.Body != null) {\n        message.Body = data.Body;\n      }\n      if (data.CacheHit != null) {\n        message.CacheHit = data.CacheHit;\n      }\n      if (data.Timestamp != null) {\n        message.Timestamp = data.Timestamp;\n      }\n      if (data.Executed != null) {\n        message.Executed = data.Executed;\n      }\n      if (data.Error != null) {\n        message.Error = data.Error;\n      }\n      if (data.Span != null) {\n        message.Span = data.Span;\n      }\n      if (typeof data.Tags == 'object') {\n        message.Tags = new Map(Object.entries(data.Tags));\n      }\n      return message;\n    }\n    toObject() {\n      const data: {\n        ClientID?: string;\n        RequestID?: string;\n        ReplyChannel?: string;\n        Metadata?: string;\n        Body?: Uint8Array;\n        CacheHit?: boolean;\n        Timestamp?: number;\n        Executed?: boolean;\n        Error?: string;\n        Span?: Uint8Array;\n        Tags?: {\n          [key: string]: string;\n        };\n      } = {};\n      if (this.ClientID != null) {\n        data.ClientID = this.ClientID;\n      }\n      if (this.RequestID != null) {\n        data.RequestID = this.RequestID;\n      }\n      if (this.ReplyChannel != null) {\n        data.ReplyChannel = this.ReplyChannel;\n      }\n      if (this.Metadata != null) {\n        data.Metadata = this.Metadata;\n      }\n      if (this.Body != null) {\n        data.Body = this.Body;\n      }\n      if (this.CacheHit != null) {\n        data.CacheHit = this.CacheHit;\n      }\n      if (this.Timestamp != null) {\n        data.Timestamp = this.Timestamp;\n      }\n      if (this.Executed != null) {\n        data.Executed = this.Executed;\n      }\n      if (this.Error != null) {\n        data.Error = this.Error;\n      }\n      if (this.Span != null) {\n        data.Span = this.Span;\n      }\n      if (this.Tags != null) {\n        data.Tags = Object.fromEntries(this.Tags);\n      }\n      return data;\n    }\n    serialize(): Uint8Array;\n    serialize(w: pb_1.BinaryWriter): void;\n    serialize(w?: pb_1.BinaryWriter): Uint8Array | void {\n      const writer = w || new pb_1.BinaryWriter();\n      if (this.ClientID.length) writer.writeString(1, this.ClientID);\n      if (this.RequestID.length) writer.writeString(2, this.RequestID);\n      if (this.ReplyChannel.length) writer.writeString(3, this.ReplyChannel);\n      if (this.Metadata.length) writer.writeString(4, this.Metadata);\n      if (this.Body.length) writer.writeBytes(5, this.Body);\n      if (this.CacheHit != false) writer.writeBool(6, this.CacheHit);\n      if (this.Timestamp != 0) writer.writeInt64(7, this.Timestamp);\n      if (this.Executed != false) writer.writeBool(8, this.Executed);\n      if (this.Error.length) writer.writeString(9, this.Error);\n      if (this.Span.length) writer.writeBytes(10, this.Span);\n      for (const [key, value] of this.Tags) {\n        writer.writeMessage(11, this.Tags, () => {\n          writer.writeString(1, key);\n          writer.writeString(2, value);\n        });\n      }\n      if (!w) return writer.getResultBuffer();\n    }\n    static deserialize(bytes: Uint8Array | pb_1.BinaryReader): Response {\n      const reader = bytes instanceof pb_1.BinaryReader ? bytes : new pb_1.BinaryReader(bytes),\n        message = new Response();\n      while (reader.nextField()) {\n        if (reader.isEndGroup()) break;\n        switch (reader.getFieldNumber()) {\n          case 1:\n            message.ClientID = reader.readString();\n            break;\n          case 2:\n            message.RequestID = reader.readString();\n            break;\n          case 3:\n            message.ReplyChannel = reader.readString();\n            break;\n          case 4:\n            message.Metadata = reader.readString();\n            break;\n          case 5:\n            message.Body = reader.readBytes();\n            break;\n          case 6:\n            message.CacheHit = reader.readBool();\n            break;\n          case 7:\n            message.Timestamp = reader.readInt64();\n            break;\n          case 8:\n            message.Executed = reader.readBool();\n            break;\n          case 9:\n            message.Error = reader.readString();\n            break;\n          case 10:\n            message.Span = reader.readBytes();\n            break;\n          case 11:\n            reader.readMessage(message, () =>\n              pb_1.Map.deserializeBinary(\n                message.Tags as any,\n                reader,\n                reader.readString,\n                reader.readString,\n              ),\n            );\n            break;\n          default:\n            reader.skipField();\n        }\n      }\n      return message;\n    }\n    serializeBinary(): Uint8Array {\n      return this.serialize();\n    }\n    static deserializeBinary(bytes: Uint8Array): Response {\n      return Response.deserialize(bytes);\n    }\n  }\n  export class QueueMessage extends pb_1.Message {\n    #one_of_decls: number[][] = [];\n    constructor(\n      data?:\n        | any[]\n        | {\n            MessageID?: string;\n            ClientID?: string;\n            Channel?: string;\n            Metadata?: string;\n            Body?: Uint8Array;\n            Tags?: Map<string, string>;\n            Attributes?: QueueMessageAttributes;\n            Policy?: QueueMessagePolicy;\n          },\n    ) {\n      super();\n      pb_1.Message.initialize(this, Array.isArray(data) ? data : [], 0, -1, [], this.#one_of_decls);\n      if (!Array.isArray(data) && typeof data == 'object') {\n        if ('MessageID' in data && data.MessageID != undefined) {\n          this.MessageID = data.MessageID;\n        }\n        if ('ClientID' in data && data.ClientID != undefined) {\n          this.ClientID = data.ClientID;\n        }\n        if ('Channel' in data && data.Channel != undefined) {\n          this.Channel = data.Channel;\n        }\n        if ('Metadata' in data && data.Metadata != undefined) {\n          this.Metadata = data.Metadata;\n        }\n        if ('Body' in data && data.Body != undefined) {\n          this.Body = data.Body;\n        }\n        if ('Tags' in data && data.Tags != undefined) {\n          this.Tags = data.Tags;\n        }\n        if ('Attributes' in data && data.Attributes != undefined) {\n          this.Attributes = data.Attributes;\n        }\n        if ('Policy' in data && data.Policy != undefined) {\n          this.Policy = data.Policy;\n        }\n      }\n      if (!this.Tags) this.Tags = new Map();\n    }\n    get MessageID() {\n      return pb_1.Message.getFieldWithDefault(this, 1, '') as string;\n    }\n    set MessageID(value: string) {\n      pb_1.Message.setField(this, 1, value);\n    }\n    get ClientID() {\n      return pb_1.Message.getFieldWithDefault(this, 2, '') as string;\n    }\n    set ClientID(value: string) {\n      pb_1.Message.setField(this, 2, value);\n    }\n    get Channel() {\n      return pb_1.Message.getFieldWithDefault(this, 3, '') as string;\n    }\n    set Channel(value: string) {\n      pb_1.Message.setField(this, 3, value);\n    }\n    get Metadata() {\n      return pb_1.Message.getFieldWithDefault(this, 4, '') as string;\n    }\n    set Metadata(value: string) {\n      pb_1.Message.setField(this, 4, value);\n    }\n    get Body() {\n      return pb_1.Message.getFieldWithDefault(this, 5, new Uint8Array(0)) as Uint8Array;\n    }\n    set Body(value: Uint8Array) {\n      pb_1.Message.setField(this, 5, value);\n    }\n    get Tags() {\n      return pb_1.Message.getField(this, 6) as any as Map<string, string>;\n    }\n    set Tags(value: Map<string, string>) {\n      pb_1.Message.setField(this, 6, value as any);\n    }\n    get Attributes() {\n      return pb_1.Message.getWrapperField(\n        this,\n        QueueMessageAttributes,\n        7,\n      ) as QueueMessageAttributes;\n    }\n    set Attributes(value: QueueMessageAttributes) {\n      pb_1.Message.setWrapperField(this, 7, value);\n    }\n    get has_Attributes() {\n      return pb_1.Message.getField(this, 7) != null;\n    }\n    get Policy() {\n      return pb_1.Message.getWrapperField(this, QueueMessagePolicy, 8) as QueueMessagePolicy;\n    }\n    set Policy(value: QueueMessagePolicy) {\n      pb_1.Message.setWrapperField(this, 8, value);\n    }\n    get has_Policy() {\n      return pb_1.Message.getField(this, 8) != null;\n    }\n    static fromObject(data: {\n      MessageID?: string;\n      ClientID?: string;\n      Channel?: string;\n      Metadata?: string;\n      Body?: Uint8Array;\n      Tags?: {\n        [key: string]: string;\n      };\n      Attributes?: ReturnType<typeof QueueMessageAttributes.prototype.toObject>;\n      Policy?: ReturnType<typeof QueueMessagePolicy.prototype.toObject>;\n    }): QueueMessage {\n      const message = new QueueMessage({});\n      if (data.MessageID != null) {\n        message.MessageID = data.MessageID;\n      }\n      if (data.ClientID != null) {\n        message.ClientID = data.ClientID;\n      }\n      if (data.Channel != null) {\n        message.Channel = data.Channel;\n      }\n      if (data.Metadata != null) {\n        message.Metadata = data.Metadata;\n      }\n      if (data.Body != null) {\n        message.Body = data.Body;\n      }\n      if (typeof data.Tags == 'object') {\n        message.Tags = new Map(Object.entries(data.Tags));\n      }\n      if (data.Attributes != null) {\n        message.Attributes = QueueMessageAttributes.fromObject(data.Attributes);\n      }\n      if (data.Policy != null) {\n        message.Policy = QueueMessagePolicy.fromObject(data.Policy);\n      }\n      return message;\n    }\n    toObject() {\n      const data: {\n        MessageID?: string;\n        ClientID?: string;\n        Channel?: string;\n        Metadata?: string;\n        Body?: Uint8Array;\n        Tags?: {\n          [key: string]: string;\n        };\n        Attributes?: ReturnType<typeof QueueMessageAttributes.prototype.toObject>;\n        Policy?: ReturnType<typeof QueueMessagePolicy.prototype.toObject>;\n      } = {};\n      if (this.MessageID != null) {\n        data.MessageID = this.MessageID;\n      }\n      if (this.ClientID != null) {\n        data.ClientID = this.ClientID;\n      }\n      if (this.Channel != null) {\n        data.Channel = this.Channel;\n      }\n      if (this.Metadata != null) {\n        data.Metadata = this.Metadata;\n      }\n      if (this.Body != null) {\n        data.Body = this.Body;\n      }\n      if (this.Tags != null) {\n        data.Tags = Object.fromEntries(this.Tags);\n      }\n      if (this.Attributes != null) {\n        data.Attributes = this.Attributes.toObject();\n      }\n      if (this.Policy != null) {\n        data.Policy = this.Policy.toObject();\n      }\n      return data;\n    }\n    serialize(): Uint8Array;\n    serialize(w: pb_1.BinaryWriter): void;\n    serialize(w?: pb_1.BinaryWriter): Uint8Array | void {\n      const writer = w || new pb_1.BinaryWriter();\n      if (this.MessageID.length) writer.writeString(1, this.MessageID);\n      if (this.ClientID.length) writer.writeString(2, this.ClientID);\n      if (this.Channel.length) writer.writeString(3, this.Channel);\n      if (this.Metadata.length) writer.writeString(4, this.Metadata);\n      if (this.Body.length) writer.writeBytes(5, this.Body);\n      for (const [key, value] of this.Tags) {\n        writer.writeMessage(6, this.Tags, () => {\n          writer.writeString(1, key);\n          writer.writeString(2, value);\n        });\n      }\n      if (this.has_Attributes)\n        writer.writeMessage(7, this.Attributes, () => this.Attributes.serialize(writer));\n      if (this.has_Policy) writer.writeMessage(8, this.Policy, () => this.Policy.serialize(writer));\n      if (!w) return writer.getResultBuffer();\n    }\n    static deserialize(bytes: Uint8Array | pb_1.BinaryReader): QueueMessage {\n      const reader = bytes instanceof pb_1.BinaryReader ? bytes : new pb_1.BinaryReader(bytes),\n        message = new QueueMessage();\n      while (reader.nextField()) {\n        if (reader.isEndGroup()) break;\n        switch (reader.getFieldNumber()) {\n          case 1:\n            message.MessageID = reader.readString();\n            break;\n          case 2:\n            message.ClientID = reader.readString();\n            break;\n          case 3:\n            message.Channel = reader.readString();\n            break;\n          case 4:\n            message.Metadata = reader.readString();\n            break;\n          case 5:\n            message.Body = reader.readBytes();\n            break;\n          case 6:\n            reader.readMessage(message, () =>\n              pb_1.Map.deserializeBinary(\n                message.Tags as any,\n                reader,\n                reader.readString,\n                reader.readString,\n              ),\n            );\n            break;\n          case 7:\n            reader.readMessage(\n              message.Attributes,\n              () => (message.Attributes = QueueMessageAttributes.deserialize(reader)),\n            );\n            break;\n          case 8:\n            reader.readMessage(\n              message.Policy,\n              () => (message.Policy = QueueMessagePolicy.deserialize(reader)),\n            );\n            break;\n          default:\n            reader.skipField();\n        }\n      }\n      return message;\n    }\n    serializeBinary(): Uint8Array {\n      return this.serialize();\n    }\n    static deserializeBinary(bytes: Uint8Array): QueueMessage {\n      return QueueMessage.deserialize(bytes);\n    }\n  }\n  export class QueueMessagesBatchRequest extends pb_1.Message {\n    #one_of_decls: number[][] = [];\n    constructor(\n      data?:\n        | any[]\n        | {\n            BatchID?: string;\n            Messages?: QueueMessage[];\n          },\n    ) {\n      super();\n      pb_1.Message.initialize(\n        this,\n        Array.isArray(data) ? data : [],\n        0,\n        -1,\n        [2],\n        this.#one_of_decls,\n      );\n      if (!Array.isArray(data) && typeof data == 'object') {\n        if ('BatchID' in data && data.BatchID != undefined) {\n          this.BatchID = data.BatchID;\n        }\n        if ('Messages' in data && data.Messages != undefined) {\n          this.Messages = data.Messages;\n        }\n      }\n    }\n    get BatchID() {\n      return pb_1.Message.getFieldWithDefault(this, 1, '') as string;\n    }\n    set BatchID(value: string) {\n      pb_1.Message.setField(this, 1, value);\n    }\n    get Messages() {\n      return pb_1.Message.getRepeatedWrapperField(this, QueueMessage, 2) as QueueMessage[];\n    }\n    set Messages(value: QueueMessage[]) {\n      pb_1.Message.setRepeatedWrapperField(this, 2, value);\n    }\n    static fromObject(data: {\n      BatchID?: string;\n      Messages?: ReturnType<typeof QueueMessage.prototype.toObject>[];\n    }): QueueMessagesBatchRequest {\n      const message = new QueueMessagesBatchRequest({});\n      if (data.BatchID != null) {\n        message.BatchID = data.BatchID;\n      }\n      if (data.Messages != null) {\n        message.Messages = data.Messages.map((item) => QueueMessage.fromObject(item));\n      }\n      return message;\n    }\n    toObject() {\n      const data: {\n        BatchID?: string;\n        Messages?: ReturnType<typeof QueueMessage.prototype.toObject>[];\n      } = {};\n      if (this.BatchID != null) {\n        data.BatchID = this.BatchID;\n      }\n      if (this.Messages != null) {\n        data.Messages = this.Messages.map((item: QueueMessage) => item.toObject());\n      }\n      return data;\n    }\n    serialize(): Uint8Array;\n    serialize(w: pb_1.BinaryWriter): void;\n    serialize(w?: pb_1.BinaryWriter): Uint8Array | void {\n      const writer = w || new pb_1.BinaryWriter();\n      if (this.BatchID.length) writer.writeString(1, this.BatchID);\n      if (this.Messages.length)\n        writer.writeRepeatedMessage(2, this.Messages, (item: QueueMessage) =>\n          item.serialize(writer),\n        );\n      if (!w) return writer.getResultBuffer();\n    }\n    static deserialize(bytes: Uint8Array | pb_1.BinaryReader): QueueMessagesBatchRequest {\n      const reader = bytes instanceof pb_1.BinaryReader ? bytes : new pb_1.BinaryReader(bytes),\n        message = new QueueMessagesBatchRequest();\n      while (reader.nextField()) {\n        if (reader.isEndGroup()) break;\n        switch (reader.getFieldNumber()) {\n          case 1:\n            message.BatchID = reader.readString();\n            break;\n          case 2:\n            reader.readMessage(message.Messages, () =>\n              pb_1.Message.addToRepeatedWrapperField(\n                message,\n                2,\n                QueueMessage.deserialize(reader),\n                QueueMessage,\n              ),\n            );\n            break;\n          default:\n            reader.skipField();\n        }\n      }\n      return message;\n    }\n    serializeBinary(): Uint8Array {\n      return this.serialize();\n    }\n    static deserializeBinary(bytes: Uint8Array): QueueMessagesBatchRequest {\n      return QueueMessagesBatchRequest.deserialize(bytes);\n    }\n  }\n  export class QueueMessagesBatchResponse extends pb_1.Message {\n    #one_of_decls: number[][] = [];\n    constructor(\n      data?:\n        | any[]\n        | {\n            BatchID?: string;\n            Results?: SendQueueMessageResult[];\n            HaveErrors?: boolean;\n          },\n    ) {\n      super();\n      pb_1.Message.initialize(\n        this,\n        Array.isArray(data) ? data : [],\n        0,\n        -1,\n        [2],\n        this.#one_of_decls,\n      );\n      if (!Array.isArray(data) && typeof data == 'object') {\n        if ('BatchID' in data && data.BatchID != undefined) {\n          this.BatchID = data.BatchID;\n        }\n        if ('Results' in data && data.Results != undefined) {\n          this.Results = data.Results;\n        }\n        if ('HaveErrors' in data && data.HaveErrors != undefined) {\n          this.HaveErrors = data.HaveErrors;\n        }\n      }\n    }\n    get BatchID() {\n      return pb_1.Message.getFieldWithDefault(this, 1, '') as string;\n    }\n    set BatchID(value: string) {\n      pb_1.Message.setField(this, 1, value);\n    }\n    get Results() {\n      return pb_1.Message.getRepeatedWrapperField(\n        this,\n        SendQueueMessageResult,\n        2,\n      ) as SendQueueMessageResult[];\n    }\n    set Results(value: SendQueueMessageResult[]) {\n      pb_1.Message.setRepeatedWrapperField(this, 2, value);\n    }\n    get HaveErrors() {\n      return pb_1.Message.getFieldWithDefault(this, 3, false) as boolean;\n    }\n    set HaveErrors(value: boolean) {\n      pb_1.Message.setField(this, 3, value);\n    }\n    static fromObject(data: {\n      BatchID?: string;\n      Results?: ReturnType<typeof SendQueueMessageResult.prototype.toObject>[];\n      HaveErrors?: boolean;\n    }): QueueMessagesBatchResponse {\n      const message = new QueueMessagesBatchResponse({});\n      if (data.BatchID != null) {\n        message.BatchID = data.BatchID;\n      }\n      if (data.Results != null) {\n        message.Results = data.Results.map((item) => SendQueueMessageResult.fromObject(item));\n      }\n      if (data.HaveErrors != null) {\n        message.HaveErrors = data.HaveErrors;\n      }\n      return message;\n    }\n    toObject() {\n      const data: {\n        BatchID?: string;\n        Results?: ReturnType<typeof SendQueueMessageResult.prototype.toObject>[];\n        HaveErrors?: boolean;\n      } = {};\n      if (this.BatchID != null) {\n        data.BatchID = this.BatchID;\n      }\n      if (this.Results != null) {\n        data.Results = this.Results.map((item: SendQueueMessageResult) => item.toObject());\n      }\n      if (this.HaveErrors != null) {\n        data.HaveErrors = this.HaveErrors;\n      }\n      return data;\n    }\n    serialize(): Uint8Array;\n    serialize(w: pb_1.BinaryWriter): void;\n    serialize(w?: pb_1.BinaryWriter): Uint8Array | void {\n      const writer = w || new pb_1.BinaryWriter();\n      if (this.BatchID.length) writer.writeString(1, this.BatchID);\n      if (this.Results.length)\n        writer.writeRepeatedMessage(2, this.Results, (item: SendQueueMessageResult) =>\n          item.serialize(writer),\n        );\n      if (this.HaveErrors != false) writer.writeBool(3, this.HaveErrors);\n      if (!w) return writer.getResultBuffer();\n    }\n    static deserialize(bytes: Uint8Array | pb_1.BinaryReader): QueueMessagesBatchResponse {\n      const reader = bytes instanceof pb_1.BinaryReader ? bytes : new pb_1.BinaryReader(bytes),\n        message = new QueueMessagesBatchResponse();\n      while (reader.nextField()) {\n        if (reader.isEndGroup()) break;\n        switch (reader.getFieldNumber()) {\n          case 1:\n            message.BatchID = reader.readString();\n            break;\n          case 2:\n            reader.readMessage(message.Results, () =>\n              pb_1.Message.addToRepeatedWrapperField(\n                message,\n                2,\n                SendQueueMessageResult.deserialize(reader),\n                SendQueueMessageResult,\n              ),\n            );\n            break;\n          case 3:\n            message.HaveErrors = reader.readBool();\n            break;\n          default:\n            reader.skipField();\n        }\n      }\n      return message;\n    }\n    serializeBinary(): Uint8Array {\n      return this.serialize();\n    }\n    static deserializeBinary(bytes: Uint8Array): QueueMessagesBatchResponse {\n      return QueueMessagesBatchResponse.deserialize(bytes);\n    }\n  }\n  export class QueueMessageAttributes extends pb_1.Message {\n    #one_of_decls: number[][] = [];\n    constructor(\n      data?:\n        | any[]\n        | {\n            Timestamp?: number;\n            Sequence?: number;\n            MD5OfBody?: string;\n            ReceiveCount?: number;\n            ReRouted?: boolean;\n            ReRoutedFromQueue?: string;\n            ExpirationAt?: number;\n            DelayedTo?: number;\n          },\n    ) {\n      super();\n      pb_1.Message.initialize(this, Array.isArray(data) ? data : [], 0, -1, [], this.#one_of_decls);\n      if (!Array.isArray(data) && typeof data == 'object') {\n        if ('Timestamp' in data && data.Timestamp != undefined) {\n          this.Timestamp = data.Timestamp;\n        }\n        if ('Sequence' in data && data.Sequence != undefined) {\n          this.Sequence = data.Sequence;\n        }\n        if ('MD5OfBody' in data && data.MD5OfBody != undefined) {\n          this.MD5OfBody = data.MD5OfBody;\n        }\n        if ('ReceiveCount' in data && data.ReceiveCount != undefined) {\n          this.ReceiveCount = data.ReceiveCount;\n        }\n        if ('ReRouted' in data && data.ReRouted != undefined) {\n          this.ReRouted = data.ReRouted;\n        }\n        if ('ReRoutedFromQueue' in data && data.ReRoutedFromQueue != undefined) {\n          this.ReRoutedFromQueue = data.ReRoutedFromQueue;\n        }\n        if ('ExpirationAt' in data && data.ExpirationAt != undefined) {\n          this.ExpirationAt = data.ExpirationAt;\n        }\n        if ('DelayedTo' in data && data.DelayedTo != undefined) {\n          this.DelayedTo = data.DelayedTo;\n        }\n      }\n    }\n    get Timestamp() {\n      return pb_1.Message.getFieldWithDefault(this, 1, 0) as number;\n    }\n    set Timestamp(value: number) {\n      pb_1.Message.setField(this, 1, value);\n    }\n    get Sequence() {\n      return pb_1.Message.getFieldWithDefault(this, 2, 0) as number;\n    }\n    set Sequence(value: number) {\n      pb_1.Message.setField(this, 2, value);\n    }\n    get MD5OfBody() {\n      return pb_1.Message.getFieldWithDefault(this, 3, '') as string;\n    }\n    set MD5OfBody(value: string) {\n      pb_1.Message.setField(this, 3, value);\n    }\n    get ReceiveCount() {\n      return pb_1.Message.getFieldWithDefault(this, 4, 0) as number;\n    }\n    set ReceiveCount(value: number) {\n      pb_1.Message.setField(this, 4, value);\n    }\n    get ReRouted() {\n      return pb_1.Message.getFieldWithDefault(this, 5, false) as boolean;\n    }\n    set ReRouted(value: boolean) {\n      pb_1.Message.setField(this, 5, value);\n    }\n    get ReRoutedFromQueue() {\n      return pb_1.Message.getFieldWithDefault(this, 6, '') as string;\n    }\n    set ReRoutedFromQueue(value: string) {\n      pb_1.Message.setField(this, 6, value);\n    }\n    get ExpirationAt() {\n      return pb_1.Message.getFieldWithDefault(this, 7, 0) as number;\n    }\n    set ExpirationAt(value: number) {\n      pb_1.Message.setField(this, 7, value);\n    }\n    get DelayedTo() {\n      return pb_1.Message.getFieldWithDefault(this, 8, 0) as number;\n    }\n    set DelayedTo(value: number) {\n      pb_1.Message.setField(this, 8, value);\n    }\n    static fromObject(data: {\n      Timestamp?: number;\n      Sequence?: number;\n      MD5OfBody?: string;\n      ReceiveCount?: number;\n      ReRouted?: boolean;\n      ReRoutedFromQueue?: string;\n      ExpirationAt?: number;\n      DelayedTo?: number;\n    }): QueueMessageAttributes {\n      const message = new QueueMessageAttributes({});\n      if (data.Timestamp != null) {\n        message.Timestamp = data.Timestamp;\n      }\n      if (data.Sequence != null) {\n        message.Sequence = data.Sequence;\n      }\n      if (data.MD5OfBody != null) {\n        message.MD5OfBody = data.MD5OfBody;\n      }\n      if (data.ReceiveCount != null) {\n        message.ReceiveCount = data.ReceiveCount;\n      }\n      if (data.ReRouted != null) {\n        message.ReRouted = data.ReRouted;\n      }\n      if (data.ReRoutedFromQueue != null) {\n        message.ReRoutedFromQueue = data.ReRoutedFromQueue;\n      }\n      if (data.ExpirationAt != null) {\n        message.ExpirationAt = data.ExpirationAt;\n      }\n      if (data.DelayedTo != null) {\n        message.DelayedTo = data.DelayedTo;\n      }\n      return message;\n    }\n    toObject() {\n      const data: {\n        Timestamp?: number;\n        Sequence?: number;\n        MD5OfBody?: string;\n        ReceiveCount?: number;\n        ReRouted?: boolean;\n        ReRoutedFromQueue?: string;\n        ExpirationAt?: number;\n        DelayedTo?: number;\n      } = {};\n      if (this.Timestamp != null) {\n        data.Timestamp = this.Timestamp;\n      }\n      if (this.Sequence != null) {\n        data.Sequence = this.Sequence;\n      }\n      if (this.MD5OfBody != null) {\n        data.MD5OfBody = this.MD5OfBody;\n      }\n      if (this.ReceiveCount != null) {\n        data.ReceiveCount = this.ReceiveCount;\n      }\n      if (this.ReRouted != null) {\n        data.ReRouted = this.ReRouted;\n      }\n      if (this.ReRoutedFromQueue != null) {\n        data.ReRoutedFromQueue = this.ReRoutedFromQueue;\n      }\n      if (this.ExpirationAt != null) {\n        data.ExpirationAt = this.ExpirationAt;\n      }\n      if (this.DelayedTo != null) {\n        data.DelayedTo = this.DelayedTo;\n      }\n      return data;\n    }\n    serialize(): Uint8Array;\n    serialize(w: pb_1.BinaryWriter): void;\n    serialize(w?: pb_1.BinaryWriter): Uint8Array | void {\n      const writer = w || new pb_1.BinaryWriter();\n      if (this.Timestamp != 0) writer.writeInt64(1, this.Timestamp);\n      if (this.Sequence != 0) writer.writeUint64(2, this.Sequence);\n      if (this.MD5OfBody.length) writer.writeString(3, this.MD5OfBody);\n      if (this.ReceiveCount != 0) writer.writeInt32(4, this.ReceiveCount);\n      if (this.ReRouted != false) writer.writeBool(5, this.ReRouted);\n      if (this.ReRoutedFromQueue.length) writer.writeString(6, this.ReRoutedFromQueue);\n      if (this.ExpirationAt != 0) writer.writeInt64(7, this.ExpirationAt);\n      if (this.DelayedTo != 0) writer.writeInt64(8, this.DelayedTo);\n      if (!w) return writer.getResultBuffer();\n    }\n    static deserialize(bytes: Uint8Array | pb_1.BinaryReader): QueueMessageAttributes {\n      const reader = bytes instanceof pb_1.BinaryReader ? bytes : new pb_1.BinaryReader(bytes),\n        message = new QueueMessageAttributes();\n      while (reader.nextField()) {\n        if (reader.isEndGroup()) break;\n        switch (reader.getFieldNumber()) {\n          case 1:\n            message.Timestamp = reader.readInt64();\n            break;\n          case 2:\n            message.Sequence = reader.readUint64();\n            break;\n          case 3:\n            message.MD5OfBody = reader.readString();\n            break;\n          case 4:\n            message.ReceiveCount = reader.readInt32();\n            break;\n          case 5:\n            message.ReRouted = reader.readBool();\n            break;\n          case 6:\n            message.ReRoutedFromQueue = reader.readString();\n            break;\n          case 7:\n            message.ExpirationAt = reader.readInt64();\n            break;\n          case 8:\n            message.DelayedTo = reader.readInt64();\n            break;\n          default:\n            reader.skipField();\n        }\n      }\n      return message;\n    }\n    serializeBinary(): Uint8Array {\n      return this.serialize();\n    }\n    static deserializeBinary(bytes: Uint8Array): QueueMessageAttributes {\n      return QueueMessageAttributes.deserialize(bytes);\n    }\n  }\n  export class QueueMessagePolicy extends pb_1.Message {\n    #one_of_decls: number[][] = [];\n    constructor(\n      data?:\n        | any[]\n        | {\n            ExpirationSeconds?: number;\n            DelaySeconds?: number;\n            MaxReceiveCount?: number;\n            MaxReceiveQueue?: string;\n          },\n    ) {\n      super();\n      pb_1.Message.initialize(this, Array.isArray(data) ? data : [], 0, -1, [], this.#one_of_decls);\n      if (!Array.isArray(data) && typeof data == 'object') {\n        if ('ExpirationSeconds' in data && data.ExpirationSeconds != undefined) {\n          this.ExpirationSeconds = data.ExpirationSeconds;\n        }\n        if ('DelaySeconds' in data && data.DelaySeconds != undefined) {\n          this.DelaySeconds = data.DelaySeconds;\n        }\n        if ('MaxReceiveCount' in data && data.MaxReceiveCount != undefined) {\n          this.MaxReceiveCount = data.MaxReceiveCount;\n        }\n        if ('MaxReceiveQueue' in data && data.MaxReceiveQueue != undefined) {\n          this.MaxReceiveQueue = data.MaxReceiveQueue;\n        }\n      }\n    }\n    get ExpirationSeconds() {\n      return pb_1.Message.getFieldWithDefault(this, 1, 0) as number;\n    }\n    set ExpirationSeconds(value: number) {\n      pb_1.Message.setField(this, 1, value);\n    }\n    get DelaySeconds() {\n      return pb_1.Message.getFieldWithDefault(this, 2, 0) as number;\n    }\n    set DelaySeconds(value: number) {\n      pb_1.Message.setField(this, 2, value);\n    }\n    get MaxReceiveCount() {\n      return pb_1.Message.getFieldWithDefault(this, 3, 0) as number;\n    }\n    set MaxReceiveCount(value: number) {\n      pb_1.Message.setField(this, 3, value);\n    }\n    get MaxReceiveQueue() {\n      return pb_1.Message.getFieldWithDefault(this, 4, '') as string;\n    }\n    set MaxReceiveQueue(value: string) {\n      pb_1.Message.setField(this, 4, value);\n    }\n    static fromObject(data: {\n      ExpirationSeconds?: number;\n      DelaySeconds?: number;\n      MaxReceiveCount?: number;\n      MaxReceiveQueue?: string;\n    }): QueueMessagePolicy {\n      const message = new QueueMessagePolicy({});\n      if (data.ExpirationSeconds != null) {\n        message.ExpirationSeconds = data.ExpirationSeconds;\n      }\n      if (data.DelaySeconds != null) {\n        message.DelaySeconds = data.DelaySeconds;\n      }\n      if (data.MaxReceiveCount != null) {\n        message.MaxReceiveCount = data.MaxReceiveCount;\n      }\n      if (data.MaxReceiveQueue != null) {\n        message.MaxReceiveQueue = data.MaxReceiveQueue;\n      }\n      return message;\n    }\n    toObject() {\n      const data: {\n        ExpirationSeconds?: number;\n        DelaySeconds?: number;\n        MaxReceiveCount?: number;\n        MaxReceiveQueue?: string;\n      } = {};\n      if (this.ExpirationSeconds != null) {\n        data.ExpirationSeconds = this.ExpirationSeconds;\n      }\n      if (this.DelaySeconds != null) {\n        data.DelaySeconds = this.DelaySeconds;\n      }\n      if (this.MaxReceiveCount != null) {\n        data.MaxReceiveCount = this.MaxReceiveCount;\n      }\n      if (this.MaxReceiveQueue != null) {\n        data.MaxReceiveQueue = this.MaxReceiveQueue;\n      }\n      return data;\n    }\n    serialize(): Uint8Array;\n    serialize(w: pb_1.BinaryWriter): void;\n    serialize(w?: pb_1.BinaryWriter): Uint8Array | void {\n      const writer = w || new pb_1.BinaryWriter();\n      if (this.ExpirationSeconds != 0) writer.writeInt32(1, this.ExpirationSeconds);\n      if (this.DelaySeconds != 0) writer.writeInt32(2, this.DelaySeconds);\n      if (this.MaxReceiveCount != 0) writer.writeInt32(3, this.MaxReceiveCount);\n      if (this.MaxReceiveQueue.length) writer.writeString(4, this.MaxReceiveQueue);\n      if (!w) return writer.getResultBuffer();\n    }\n    static deserialize(bytes: Uint8Array | pb_1.BinaryReader): QueueMessagePolicy {\n      const reader = bytes instanceof pb_1.BinaryReader ? bytes : new pb_1.BinaryReader(bytes),\n        message = new QueueMessagePolicy();\n      while (reader.nextField()) {\n        if (reader.isEndGroup()) break;\n        switch (reader.getFieldNumber()) {\n          case 1:\n            message.ExpirationSeconds = reader.readInt32();\n            break;\n          case 2:\n            message.DelaySeconds = reader.readInt32();\n            break;\n          case 3:\n            message.MaxReceiveCount = reader.readInt32();\n            break;\n          case 4:\n            message.MaxReceiveQueue = reader.readString();\n            break;\n          default:\n            reader.skipField();\n        }\n      }\n      return message;\n    }\n    serializeBinary(): Uint8Array {\n      return this.serialize();\n    }\n    static deserializeBinary(bytes: Uint8Array): QueueMessagePolicy {\n      return QueueMessagePolicy.deserialize(bytes);\n    }\n  }\n  export class SendQueueMessageResult extends pb_1.Message {\n    #one_of_decls: number[][] = [];\n    constructor(\n      data?:\n        | any[]\n        | {\n            MessageID?: string;\n            SentAt?: number;\n            ExpirationAt?: number;\n            DelayedTo?: number;\n            IsError?: boolean;\n            Error?: string;\n          },\n    ) {\n      super();\n      pb_1.Message.initialize(this, Array.isArray(data) ? data : [], 0, -1, [], this.#one_of_decls);\n      if (!Array.isArray(data) && typeof data == 'object') {\n        if ('MessageID' in data && data.MessageID != undefined) {\n          this.MessageID = data.MessageID;\n        }\n        if ('SentAt' in data && data.SentAt != undefined) {\n          this.SentAt = data.SentAt;\n        }\n        if ('ExpirationAt' in data && data.ExpirationAt != undefined) {\n          this.ExpirationAt = data.ExpirationAt;\n        }\n        if ('DelayedTo' in data && data.DelayedTo != undefined) {\n          this.DelayedTo = data.DelayedTo;\n        }\n        if ('IsError' in data && data.IsError != undefined) {\n          this.IsError = data.IsError;\n        }\n        if ('Error' in data && data.Error != undefined) {\n          this.Error = data.Error;\n        }\n      }\n    }\n    get MessageID() {\n      return pb_1.Message.getFieldWithDefault(this, 1, '') as string;\n    }\n    set MessageID(value: string) {\n      pb_1.Message.setField(this, 1, value);\n    }\n    get SentAt() {\n      return pb_1.Message.getFieldWithDefault(this, 2, 0) as number;\n    }\n    set SentAt(value: number) {\n      pb_1.Message.setField(this, 2, value);\n    }\n    get ExpirationAt() {\n      return pb_1.Message.getFieldWithDefault(this, 3, 0) as number;\n    }\n    set ExpirationAt(value: number) {\n      pb_1.Message.setField(this, 3, value);\n    }\n    get DelayedTo() {\n      return pb_1.Message.getFieldWithDefault(this, 4, 0) as number;\n    }\n    set DelayedTo(value: number) {\n      pb_1.Message.setField(this, 4, value);\n    }\n    get IsError() {\n      return pb_1.Message.getFieldWithDefault(this, 5, false) as boolean;\n    }\n    set IsError(value: boolean) {\n      pb_1.Message.setField(this, 5, value);\n    }\n    get Error() {\n      return pb_1.Message.getFieldWithDefault(this, 6, '') as string;\n    }\n    set Error(value: string) {\n      pb_1.Message.setField(this, 6, value);\n    }\n    static fromObject(data: {\n      MessageID?: string;\n      SentAt?: number;\n      ExpirationAt?: number;\n      DelayedTo?: number;\n      IsError?: boolean;\n      Error?: string;\n    }): SendQueueMessageResult {\n      const message = new SendQueueMessageResult({});\n      if (data.MessageID != null) {\n        message.MessageID = data.MessageID;\n      }\n      if (data.SentAt != null) {\n        message.SentAt = data.SentAt;\n      }\n      if (data.ExpirationAt != null) {\n        message.ExpirationAt = data.ExpirationAt;\n      }\n      if (data.DelayedTo != null) {\n        message.DelayedTo = data.DelayedTo;\n      }\n      if (data.IsError != null) {\n        message.IsError = data.IsError;\n      }\n      if (data.Error != null) {\n        message.Error = data.Error;\n      }\n      return message;\n    }\n    toObject() {\n      const data: {\n        MessageID?: string;\n        SentAt?: number;\n        ExpirationAt?: number;\n        DelayedTo?: number;\n        IsError?: boolean;\n        Error?: string;\n      } = {};\n      if (this.MessageID != null) {\n        data.MessageID = this.MessageID;\n      }\n      if (this.SentAt != null) {\n        data.SentAt = this.SentAt;\n      }\n      if (this.ExpirationAt != null) {\n        data.ExpirationAt = this.ExpirationAt;\n      }\n      if (this.DelayedTo != null) {\n        data.DelayedTo = this.DelayedTo;\n      }\n      if (this.IsError != null) {\n        data.IsError = this.IsError;\n      }\n      if (this.Error != null) {\n        data.Error = this.Error;\n      }\n      return data;\n    }\n    serialize(): Uint8Array;\n    serialize(w: pb_1.BinaryWriter): void;\n    serialize(w?: pb_1.BinaryWriter): Uint8Array | void {\n      const writer = w || new pb_1.BinaryWriter();\n      if (this.MessageID.length) writer.writeString(1, this.MessageID);\n      if (this.SentAt != 0) writer.writeInt64(2, this.SentAt);\n      if (this.ExpirationAt != 0) writer.writeInt64(3, this.ExpirationAt);\n      if (this.DelayedTo != 0) writer.writeInt64(4, this.DelayedTo);\n      if (this.IsError != false) writer.writeBool(5, this.IsError);\n      if (this.Error.length) writer.writeString(6, this.Error);\n      if (!w) return writer.getResultBuffer();\n    }\n    static deserialize(bytes: Uint8Array | pb_1.BinaryReader): SendQueueMessageResult {\n      const reader = bytes instanceof pb_1.BinaryReader ? bytes : new pb_1.BinaryReader(bytes),\n        message = new SendQueueMessageResult();\n      while (reader.nextField()) {\n        if (reader.isEndGroup()) break;\n        switch (reader.getFieldNumber()) {\n          case 1:\n            message.MessageID = reader.readString();\n            break;\n          case 2:\n            message.SentAt = reader.readInt64();\n            break;\n          case 3:\n            message.ExpirationAt = reader.readInt64();\n            break;\n          case 4:\n            message.DelayedTo = reader.readInt64();\n            break;\n          case 5:\n            message.IsError = reader.readBool();\n            break;\n          case 6:\n            message.Error = reader.readString();\n            break;\n          default:\n            reader.skipField();\n        }\n      }\n      return message;\n    }\n    serializeBinary(): Uint8Array {\n      return this.serialize();\n    }\n    static deserializeBinary(bytes: Uint8Array): SendQueueMessageResult {\n      return SendQueueMessageResult.deserialize(bytes);\n    }\n  }\n  export class ReceiveQueueMessagesRequest extends pb_1.Message {\n    #one_of_decls: number[][] = [];\n    constructor(\n      data?:\n        | any[]\n        | {\n            RequestID?: string;\n            ClientID?: string;\n            Channel?: string;\n            MaxNumberOfMessages?: number;\n            WaitTimeSeconds?: number;\n            IsPeak?: boolean;\n          },\n    ) {\n      super();\n      pb_1.Message.initialize(this, Array.isArray(data) ? data : [], 0, -1, [], this.#one_of_decls);\n      if (!Array.isArray(data) && typeof data == 'object') {\n        if ('RequestID' in data && data.RequestID != undefined) {\n          this.RequestID = data.RequestID;\n        }\n        if ('ClientID' in data && data.ClientID != undefined) {\n          this.ClientID = data.ClientID;\n        }\n        if ('Channel' in data && data.Channel != undefined) {\n          this.Channel = data.Channel;\n        }\n        if ('MaxNumberOfMessages' in data && data.MaxNumberOfMessages != undefined) {\n          this.MaxNumberOfMessages = data.MaxNumberOfMessages;\n        }\n        if ('WaitTimeSeconds' in data && data.WaitTimeSeconds != undefined) {\n          this.WaitTimeSeconds = data.WaitTimeSeconds;\n        }\n        if ('IsPeak' in data && data.IsPeak != undefined) {\n          this.IsPeak = data.IsPeak;\n        }\n      }\n    }\n    get RequestID() {\n      return pb_1.Message.getFieldWithDefault(this, 1, '') as string;\n    }\n    set RequestID(value: string) {\n      pb_1.Message.setField(this, 1, value);\n    }\n    get ClientID() {\n      return pb_1.Message.getFieldWithDefault(this, 2, '') as string;\n    }\n    set ClientID(value: string) {\n      pb_1.Message.setField(this, 2, value);\n    }\n    get Channel() {\n      return pb_1.Message.getFieldWithDefault(this, 3, '') as string;\n    }\n    set Channel(value: string) {\n      pb_1.Message.setField(this, 3, value);\n    }\n    get MaxNumberOfMessages() {\n      return pb_1.Message.getFieldWithDefault(this, 4, 0) as number;\n    }\n    set MaxNumberOfMessages(value: number) {\n      pb_1.Message.setField(this, 4, value);\n    }\n    get WaitTimeSeconds() {\n      return pb_1.Message.getFieldWithDefault(this, 5, 0) as number;\n    }\n    set WaitTimeSeconds(value: number) {\n      pb_1.Message.setField(this, 5, value);\n    }\n    get IsPeak() {\n      return pb_1.Message.getFieldWithDefault(this, 6, false) as boolean;\n    }\n    set IsPeak(value: boolean) {\n      pb_1.Message.setField(this, 6, value);\n    }\n    static fromObject(data: {\n      RequestID?: string;\n      ClientID?: string;\n      Channel?: string;\n      MaxNumberOfMessages?: number;\n      WaitTimeSeconds?: number;\n      IsPeak?: boolean;\n    }): ReceiveQueueMessagesRequest {\n      const message = new ReceiveQueueMessagesRequest({});\n      if (data.RequestID != null) {\n        message.RequestID = data.RequestID;\n      }\n      if (data.ClientID != null) {\n        message.ClientID = data.ClientID;\n      }\n      if (data.Channel != null) {\n        message.Channel = data.Channel;\n      }\n      if (data.MaxNumberOfMessages != null) {\n        message.MaxNumberOfMessages = data.MaxNumberOfMessages;\n      }\n      if (data.WaitTimeSeconds != null) {\n        message.WaitTimeSeconds = data.WaitTimeSeconds;\n      }\n      if (data.IsPeak != null) {\n        message.IsPeak = data.IsPeak;\n      }\n      return message;\n    }\n    toObject() {\n      const data: {\n        RequestID?: string;\n        ClientID?: string;\n        Channel?: string;\n        MaxNumberOfMessages?: number;\n        WaitTimeSeconds?: number;\n        IsPeak?: boolean;\n      } = {};\n      if (this.RequestID != null) {\n        data.RequestID = this.RequestID;\n      }\n      if (this.ClientID != null) {\n        data.ClientID = this.ClientID;\n      }\n      if (this.Channel != null) {\n        data.Channel = this.Channel;\n      }\n      if (this.MaxNumberOfMessages != null) {\n        data.MaxNumberOfMessages = this.MaxNumberOfMessages;\n      }\n      if (this.WaitTimeSeconds != null) {\n        data.WaitTimeSeconds = this.WaitTimeSeconds;\n      }\n      if (this.IsPeak != null) {\n        data.IsPeak = this.IsPeak;\n      }\n      return data;\n    }\n    serialize(): Uint8Array;\n    serialize(w: pb_1.BinaryWriter): void;\n    serialize(w?: pb_1.BinaryWriter): Uint8Array | void {\n      const writer = w || new pb_1.BinaryWriter();\n      if (this.RequestID.length) writer.writeString(1, this.RequestID);\n      if (this.ClientID.length) writer.writeString(2, this.ClientID);\n      if (this.Channel.length) writer.writeString(3, this.Channel);\n      if (this.MaxNumberOfMessages != 0) writer.writeInt32(4, this.MaxNumberOfMessages);\n      if (this.WaitTimeSeconds != 0) writer.writeInt32(5, this.WaitTimeSeconds);\n      if (this.IsPeak != false) writer.writeBool(6, this.IsPeak);\n      if (!w) return writer.getResultBuffer();\n    }\n    static deserialize(bytes: Uint8Array | pb_1.BinaryReader): ReceiveQueueMessagesRequest {\n      const reader = bytes instanceof pb_1.BinaryReader ? bytes : new pb_1.BinaryReader(bytes),\n        message = new ReceiveQueueMessagesRequest();\n      while (reader.nextField()) {\n        if (reader.isEndGroup()) break;\n        switch (reader.getFieldNumber()) {\n          case 1:\n            message.RequestID = reader.readString();\n            break;\n          case 2:\n            message.ClientID = reader.readString();\n            break;\n          case 3:\n            message.Channel = reader.readString();\n            break;\n          case 4:\n            message.MaxNumberOfMessages = reader.readInt32();\n            break;\n          case 5:\n            message.WaitTimeSeconds = reader.readInt32();\n            break;\n          case 6:\n            message.IsPeak = reader.readBool();\n            break;\n          default:\n            reader.skipField();\n        }\n      }\n      return message;\n    }\n    serializeBinary(): Uint8Array {\n      return this.serialize();\n    }\n    static deserializeBinary(bytes: Uint8Array): ReceiveQueueMessagesRequest {\n      return ReceiveQueueMessagesRequest.deserialize(bytes);\n    }\n  }\n  export class ReceiveQueueMessagesResponse extends pb_1.Message {\n    #one_of_decls: number[][] = [];\n    constructor(\n      data?:\n        | any[]\n        | {\n            RequestID?: string;\n            Messages?: QueueMessage[];\n            MessagesReceived?: number;\n            MessagesExpired?: number;\n            IsPeak?: boolean;\n            IsError?: boolean;\n            Error?: string;\n          },\n    ) {\n      super();\n      pb_1.Message.initialize(\n        this,\n        Array.isArray(data) ? data : [],\n        0,\n        -1,\n        [2],\n        this.#one_of_decls,\n      );\n      if (!Array.isArray(data) && typeof data == 'object') {\n        if ('RequestID' in data && data.RequestID != undefined) {\n          this.RequestID = data.RequestID;\n        }\n        if ('Messages' in data && data.Messages != undefined) {\n          this.Messages = data.Messages;\n        }\n        if ('MessagesReceived' in data && data.MessagesReceived != undefined) {\n          this.MessagesReceived = data.MessagesReceived;\n        }\n        if ('MessagesExpired' in data && data.MessagesExpired != undefined) {\n          this.MessagesExpired = data.MessagesExpired;\n        }\n        if ('IsPeak' in data && data.IsPeak != undefined) {\n          this.IsPeak = data.IsPeak;\n        }\n        if ('IsError' in data && data.IsError != undefined) {\n          this.IsError = data.IsError;\n        }\n        if ('Error' in data && data.Error != undefined) {\n          this.Error = data.Error;\n        }\n      }\n    }\n    get RequestID() {\n      return pb_1.Message.getFieldWithDefault(this, 1, '') as string;\n    }\n    set RequestID(value: string) {\n      pb_1.Message.setField(this, 1, value);\n    }\n    get Messages() {\n      return pb_1.Message.getRepeatedWrapperField(this, QueueMessage, 2) as QueueMessage[];\n    }\n    set Messages(value: QueueMessage[]) {\n      pb_1.Message.setRepeatedWrapperField(this, 2, value);\n    }\n    get MessagesReceived() {\n      return pb_1.Message.getFieldWithDefault(this, 3, 0) as number;\n    }\n    set MessagesReceived(value: number) {\n      pb_1.Message.setField(this, 3, value);\n    }\n    get MessagesExpired() {\n      return pb_1.Message.getFieldWithDefault(this, 4, 0) as number;\n    }\n    set MessagesExpired(value: number) {\n      pb_1.Message.setField(this, 4, value);\n    }\n    get IsPeak() {\n      return pb_1.Message.getFieldWithDefault(this, 5, false) as boolean;\n    }\n    set IsPeak(value: boolean) {\n      pb_1.Message.setField(this, 5, value);\n    }\n    get IsError() {\n      return pb_1.Message.getFieldWithDefault(this, 6, false) as boolean;\n    }\n    set IsError(value: boolean) {\n      pb_1.Message.setField(this, 6, value);\n    }\n    get Error() {\n      return pb_1.Message.getFieldWithDefault(this, 7, '') as string;\n    }\n    set Error(value: string) {\n      pb_1.Message.setField(this, 7, value);\n    }\n    static fromObject(data: {\n      RequestID?: string;\n      Messages?: ReturnType<typeof QueueMessage.prototype.toObject>[];\n      MessagesReceived?: number;\n      MessagesExpired?: number;\n      IsPeak?: boolean;\n      IsError?: boolean;\n      Error?: string;\n    }): ReceiveQueueMessagesResponse {\n      const message = new ReceiveQueueMessagesResponse({});\n      if (data.RequestID != null) {\n        message.RequestID = data.RequestID;\n      }\n      if (data.Messages != null) {\n        message.Messages = data.Messages.map((item) => QueueMessage.fromObject(item));\n      }\n      if (data.MessagesReceived != null) {\n        message.MessagesReceived = data.MessagesReceived;\n      }\n      if (data.MessagesExpired != null) {\n        message.MessagesExpired = data.MessagesExpired;\n      }\n      if (data.IsPeak != null) {\n        message.IsPeak = data.IsPeak;\n      }\n      if (data.IsError != null) {\n        message.IsError = data.IsError;\n      }\n      if (data.Error != null) {\n        message.Error = data.Error;\n      }\n      return message;\n    }\n    toObject() {\n      const data: {\n        RequestID?: string;\n        Messages?: ReturnType<typeof QueueMessage.prototype.toObject>[];\n        MessagesReceived?: number;\n        MessagesExpired?: number;\n        IsPeak?: boolean;\n        IsError?: boolean;\n        Error?: string;\n      } = {};\n      if (this.RequestID != null) {\n        data.RequestID = this.RequestID;\n      }\n      if (this.Messages != null) {\n        data.Messages = this.Messages.map((item: QueueMessage) => item.toObject());\n      }\n      if (this.MessagesReceived != null) {\n        data.MessagesReceived = this.MessagesReceived;\n      }\n      if (this.MessagesExpired != null) {\n        data.MessagesExpired = this.MessagesExpired;\n      }\n      if (this.IsPeak != null) {\n        data.IsPeak = this.IsPeak;\n      }\n      if (this.IsError != null) {\n        data.IsError = this.IsError;\n      }\n      if (this.Error != null) {\n        data.Error = this.Error;\n      }\n      return data;\n    }\n    serialize(): Uint8Array;\n    serialize(w: pb_1.BinaryWriter): void;\n    serialize(w?: pb_1.BinaryWriter): Uint8Array | void {\n      const writer = w || new pb_1.BinaryWriter();\n      if (this.RequestID.length) writer.writeString(1, this.RequestID);\n      if (this.Messages.length)\n        writer.writeRepeatedMessage(2, this.Messages, (item: QueueMessage) =>\n          item.serialize(writer),\n        );\n      if (this.MessagesReceived != 0) writer.writeInt32(3, this.MessagesReceived);\n      if (this.MessagesExpired != 0) writer.writeInt32(4, this.MessagesExpired);\n      if (this.IsPeak != false) writer.writeBool(5, this.IsPeak);\n      if (this.IsError != false) writer.writeBool(6, this.IsError);\n      if (this.Error.length) writer.writeString(7, this.Error);\n      if (!w) return writer.getResultBuffer();\n    }\n    static deserialize(bytes: Uint8Array | pb_1.BinaryReader): ReceiveQueueMessagesResponse {\n      const reader = bytes instanceof pb_1.BinaryReader ? bytes : new pb_1.BinaryReader(bytes),\n        message = new ReceiveQueueMessagesResponse();\n      while (reader.nextField()) {\n        if (reader.isEndGroup()) break;\n        switch (reader.getFieldNumber()) {\n          case 1:\n            message.RequestID = reader.readString();\n            break;\n          case 2:\n            reader.readMessage(message.Messages, () =>\n              pb_1.Message.addToRepeatedWrapperField(\n                message,\n                2,\n                QueueMessage.deserialize(reader),\n                QueueMessage,\n              ),\n            );\n            break;\n          case 3:\n            message.MessagesReceived = reader.readInt32();\n            break;\n          case 4:\n            message.MessagesExpired = reader.readInt32();\n            break;\n          case 5:\n            message.IsPeak = reader.readBool();\n            break;\n          case 6:\n            message.IsError = reader.readBool();\n            break;\n          case 7:\n            message.Error = reader.readString();\n            break;\n          default:\n            reader.skipField();\n        }\n      }\n      return message;\n    }\n    serializeBinary(): Uint8Array {\n      return this.serialize();\n    }\n    static deserializeBinary(bytes: Uint8Array): ReceiveQueueMessagesResponse {\n      return ReceiveQueueMessagesResponse.deserialize(bytes);\n    }\n  }\n  export class AckAllQueueMessagesRequest extends pb_1.Message {\n    #one_of_decls: number[][] = [];\n    constructor(\n      data?:\n        | any[]\n        | {\n            RequestID?: string;\n            ClientID?: string;\n            Channel?: string;\n            WaitTimeSeconds?: number;\n          },\n    ) {\n      super();\n      pb_1.Message.initialize(this, Array.isArray(data) ? data : [], 0, -1, [], this.#one_of_decls);\n      if (!Array.isArray(data) && typeof data == 'object') {\n        if ('RequestID' in data && data.RequestID != undefined) {\n          this.RequestID = data.RequestID;\n        }\n        if ('ClientID' in data && data.ClientID != undefined) {\n          this.ClientID = data.ClientID;\n        }\n        if ('Channel' in data && data.Channel != undefined) {\n          this.Channel = data.Channel;\n        }\n        if ('WaitTimeSeconds' in data && data.WaitTimeSeconds != undefined) {\n          this.WaitTimeSeconds = data.WaitTimeSeconds;\n        }\n      }\n    }\n    get RequestID() {\n      return pb_1.Message.getFieldWithDefault(this, 1, '') as string;\n    }\n    set RequestID(value: string) {\n      pb_1.Message.setField(this, 1, value);\n    }\n    get ClientID() {\n      return pb_1.Message.getFieldWithDefault(this, 2, '') as string;\n    }\n    set ClientID(value: string) {\n      pb_1.Message.setField(this, 2, value);\n    }\n    get Channel() {\n      return pb_1.Message.getFieldWithDefault(this, 3, '') as string;\n    }\n    set Channel(value: string) {\n      pb_1.Message.setField(this, 3, value);\n    }\n    get WaitTimeSeconds() {\n      return pb_1.Message.getFieldWithDefault(this, 4, 0) as number;\n    }\n    set WaitTimeSeconds(value: number) {\n      pb_1.Message.setField(this, 4, value);\n    }\n    static fromObject(data: {\n      RequestID?: string;\n      ClientID?: string;\n      Channel?: string;\n      WaitTimeSeconds?: number;\n    }): AckAllQueueMessagesRequest {\n      const message = new AckAllQueueMessagesRequest({});\n      if (data.RequestID != null) {\n        message.RequestID = data.RequestID;\n      }\n      if (data.ClientID != null) {\n        message.ClientID = data.ClientID;\n      }\n      if (data.Channel != null) {\n        message.Channel = data.Channel;\n      }\n      if (data.WaitTimeSeconds != null) {\n        message.WaitTimeSeconds = data.WaitTimeSeconds;\n      }\n      return message;\n    }\n    toObject() {\n      const data: {\n        RequestID?: string;\n        ClientID?: string;\n        Channel?: string;\n        WaitTimeSeconds?: number;\n      } = {};\n      if (this.RequestID != null) {\n        data.RequestID = this.RequestID;\n      }\n      if (this.ClientID != null) {\n        data.ClientID = this.ClientID;\n      }\n      if (this.Channel != null) {\n        data.Channel = this.Channel;\n      }\n      if (this.WaitTimeSeconds != null) {\n        data.WaitTimeSeconds = this.WaitTimeSeconds;\n      }\n      return data;\n    }\n    serialize(): Uint8Array;\n    serialize(w: pb_1.BinaryWriter): void;\n    serialize(w?: pb_1.BinaryWriter): Uint8Array | void {\n      const writer = w || new pb_1.BinaryWriter();\n      if (this.RequestID.length) writer.writeString(1, this.RequestID);\n      if (this.ClientID.length) writer.writeString(2, this.ClientID);\n      if (this.Channel.length) writer.writeString(3, this.Channel);\n      if (this.WaitTimeSeconds != 0) writer.writeInt32(4, this.WaitTimeSeconds);\n      if (!w) return writer.getResultBuffer();\n    }\n    static deserialize(bytes: Uint8Array | pb_1.BinaryReader): AckAllQueueMessagesRequest {\n      const reader = bytes instanceof pb_1.BinaryReader ? bytes : new pb_1.BinaryReader(bytes),\n        message = new AckAllQueueMessagesRequest();\n      while (reader.nextField()) {\n        if (reader.isEndGroup()) break;\n        switch (reader.getFieldNumber()) {\n          case 1:\n            message.RequestID = reader.readString();\n            break;\n          case 2:\n            message.ClientID = reader.readString();\n            break;\n          case 3:\n            message.Channel = reader.readString();\n            break;\n          case 4:\n            message.WaitTimeSeconds = reader.readInt32();\n            break;\n          default:\n            reader.skipField();\n        }\n      }\n      return message;\n    }\n    serializeBinary(): Uint8Array {\n      return this.serialize();\n    }\n    static deserializeBinary(bytes: Uint8Array): AckAllQueueMessagesRequest {\n      return AckAllQueueMessagesRequest.deserialize(bytes);\n    }\n  }\n  export class AckAllQueueMessagesResponse extends pb_1.Message {\n    #one_of_decls: number[][] = [];\n    constructor(\n      data?:\n        | any[]\n        | {\n            RequestID?: string;\n            AffectedMessages?: number;\n            IsError?: boolean;\n            Error?: string;\n          },\n    ) {\n      super();\n      pb_1.Message.initialize(this, Array.isArray(data) ? data : [], 0, -1, [], this.#one_of_decls);\n      if (!Array.isArray(data) && typeof data == 'object') {\n        if ('RequestID' in data && data.RequestID != undefined) {\n          this.RequestID = data.RequestID;\n        }\n        if ('AffectedMessages' in data && data.AffectedMessages != undefined) {\n          this.AffectedMessages = data.AffectedMessages;\n        }\n        if ('IsError' in data && data.IsError != undefined) {\n          this.IsError = data.IsError;\n        }\n        if ('Error' in data && data.Error != undefined) {\n          this.Error = data.Error;\n        }\n      }\n    }\n    get RequestID() {\n      return pb_1.Message.getFieldWithDefault(this, 1, '') as string;\n    }\n    set RequestID(value: string) {\n      pb_1.Message.setField(this, 1, value);\n    }\n    get AffectedMessages() {\n      return pb_1.Message.getFieldWithDefault(this, 2, 0) as number;\n    }\n    set AffectedMessages(value: number) {\n      pb_1.Message.setField(this, 2, value);\n    }\n    get IsError() {\n      return pb_1.Message.getFieldWithDefault(this, 3, false) as boolean;\n    }\n    set IsError(value: boolean) {\n      pb_1.Message.setField(this, 3, value);\n    }\n    get Error() {\n      return pb_1.Message.getFieldWithDefault(this, 4, '') as string;\n    }\n    set Error(value: string) {\n      pb_1.Message.setField(this, 4, value);\n    }\n    static fromObject(data: {\n      RequestID?: string;\n      AffectedMessages?: number;\n      IsError?: boolean;\n      Error?: string;\n    }): AckAllQueueMessagesResponse {\n      const message = new AckAllQueueMessagesResponse({});\n      if (data.RequestID != null) {\n        message.RequestID = data.RequestID;\n      }\n      if (data.AffectedMessages != null) {\n        message.AffectedMessages = data.AffectedMessages;\n      }\n      if (data.IsError != null) {\n        message.IsError = data.IsError;\n      }\n      if (data.Error != null) {\n        message.Error = data.Error;\n      }\n      return message;\n    }\n    toObject() {\n      const data: {\n        RequestID?: string;\n        AffectedMessages?: number;\n        IsError?: boolean;\n        Error?: string;\n      } = {};\n      if (this.RequestID != null) {\n        data.RequestID = this.RequestID;\n      }\n      if (this.AffectedMessages != null) {\n        data.AffectedMessages = this.AffectedMessages;\n      }\n      if (this.IsError != null) {\n        data.IsError = this.IsError;\n      }\n      if (this.Error != null) {\n        data.Error = this.Error;\n      }\n      return data;\n    }\n    serialize(): Uint8Array;\n    serialize(w: pb_1.BinaryWriter): void;\n    serialize(w?: pb_1.BinaryWriter): Uint8Array | void {\n      const writer = w || new pb_1.BinaryWriter();\n      if (this.RequestID.length) writer.writeString(1, this.RequestID);\n      if (this.AffectedMessages != 0) writer.writeUint64(2, this.AffectedMessages);\n      if (this.IsError != false) writer.writeBool(3, this.IsError);\n      if (this.Error.length) writer.writeString(4, this.Error);\n      if (!w) return writer.getResultBuffer();\n    }\n    static deserialize(bytes: Uint8Array | pb_1.BinaryReader): AckAllQueueMessagesResponse {\n      const reader = bytes instanceof pb_1.BinaryReader ? bytes : new pb_1.BinaryReader(bytes),\n        message = new AckAllQueueMessagesResponse();\n      while (reader.nextField()) {\n        if (reader.isEndGroup()) break;\n        switch (reader.getFieldNumber()) {\n          case 1:\n            message.RequestID = reader.readString();\n            break;\n          case 2:\n            message.AffectedMessages = reader.readUint64();\n            break;\n          case 3:\n            message.IsError = reader.readBool();\n            break;\n          case 4:\n            message.Error = reader.readString();\n            break;\n          default:\n            reader.skipField();\n        }\n      }\n      return message;\n    }\n    serializeBinary(): Uint8Array {\n      return this.serialize();\n    }\n    static deserializeBinary(bytes: Uint8Array): AckAllQueueMessagesResponse {\n      return AckAllQueueMessagesResponse.deserialize(bytes);\n    }\n  }\n  export class StreamQueueMessagesRequest extends pb_1.Message {\n    #one_of_decls: number[][] = [];\n    constructor(\n      data?:\n        | any[]\n        | {\n            RequestID?: string;\n            ClientID?: string;\n            StreamRequestTypeData?: StreamRequestType;\n            Channel?: string;\n            VisibilitySeconds?: number;\n            WaitTimeSeconds?: number;\n            RefSequence?: number;\n            ModifiedMessage?: QueueMessage;\n          },\n    ) {\n      super();\n      pb_1.Message.initialize(this, Array.isArray(data) ? data : [], 0, -1, [], this.#one_of_decls);\n      if (!Array.isArray(data) && typeof data == 'object') {\n        if ('RequestID' in data && data.RequestID != undefined) {\n          this.RequestID = data.RequestID;\n        }\n        if ('ClientID' in data && data.ClientID != undefined) {\n          this.ClientID = data.ClientID;\n        }\n        if ('StreamRequestTypeData' in data && data.StreamRequestTypeData != undefined) {\n          this.StreamRequestTypeData = data.StreamRequestTypeData;\n        }\n        if ('Channel' in data && data.Channel != undefined) {\n          this.Channel = data.Channel;\n        }\n        if ('VisibilitySeconds' in data && data.VisibilitySeconds != undefined) {\n          this.VisibilitySeconds = data.VisibilitySeconds;\n        }\n        if ('WaitTimeSeconds' in data && data.WaitTimeSeconds != undefined) {\n          this.WaitTimeSeconds = data.WaitTimeSeconds;\n        }\n        if ('RefSequence' in data && data.RefSequence != undefined) {\n          this.RefSequence = data.RefSequence;\n        }\n        if ('ModifiedMessage' in data && data.ModifiedMessage != undefined) {\n          this.ModifiedMessage = data.ModifiedMessage;\n        }\n      }\n    }\n    get RequestID() {\n      return pb_1.Message.getFieldWithDefault(this, 1, '') as string;\n    }\n    set RequestID(value: string) {\n      pb_1.Message.setField(this, 1, value);\n    }\n    get ClientID() {\n      return pb_1.Message.getFieldWithDefault(this, 2, '') as string;\n    }\n    set ClientID(value: string) {\n      pb_1.Message.setField(this, 2, value);\n    }\n    get StreamRequestTypeData() {\n      return pb_1.Message.getFieldWithDefault(\n        this,\n        3,\n        StreamRequestType.StreamRequestTypeUnknown,\n      ) as StreamRequestType;\n    }\n    set StreamRequestTypeData(value: StreamRequestType) {\n      pb_1.Message.setField(this, 3, value);\n    }\n    get Channel() {\n      return pb_1.Message.getFieldWithDefault(this, 4, '') as string;\n    }\n    set Channel(value: string) {\n      pb_1.Message.setField(this, 4, value);\n    }\n    get VisibilitySeconds() {\n      return pb_1.Message.getFieldWithDefault(this, 5, 0) as number;\n    }\n    set VisibilitySeconds(value: number) {\n      pb_1.Message.setField(this, 5, value);\n    }\n    get WaitTimeSeconds() {\n      return pb_1.Message.getFieldWithDefault(this, 6, 0) as number;\n    }\n    set WaitTimeSeconds(value: number) {\n      pb_1.Message.setField(this, 6, value);\n    }\n    get RefSequence() {\n      return pb_1.Message.getFieldWithDefault(this, 7, 0) as number;\n    }\n    set RefSequence(value: number) {\n      pb_1.Message.setField(this, 7, value);\n    }\n    get ModifiedMessage() {\n      return pb_1.Message.getWrapperField(this, QueueMessage, 8) as QueueMessage;\n    }\n    set ModifiedMessage(value: QueueMessage) {\n      pb_1.Message.setWrapperField(this, 8, value);\n    }\n    get has_ModifiedMessage() {\n      return pb_1.Message.getField(this, 8) != null;\n    }\n    static fromObject(data: {\n      RequestID?: string;\n      ClientID?: string;\n      StreamRequestTypeData?: StreamRequestType;\n      Channel?: string;\n      VisibilitySeconds?: number;\n      WaitTimeSeconds?: number;\n      RefSequence?: number;\n      ModifiedMessage?: ReturnType<typeof QueueMessage.prototype.toObject>;\n    }): StreamQueueMessagesRequest {\n      const message = new StreamQueueMessagesRequest({});\n      if (data.RequestID != null) {\n        message.RequestID = data.RequestID;\n      }\n      if (data.ClientID != null) {\n        message.ClientID = data.ClientID;\n      }\n      if (data.StreamRequestTypeData != null) {\n        message.StreamRequestTypeData = data.StreamRequestTypeData;\n      }\n      if (data.Channel != null) {\n        message.Channel = data.Channel;\n      }\n      if (data.VisibilitySeconds != null) {\n        message.VisibilitySeconds = data.VisibilitySeconds;\n      }\n      if (data.WaitTimeSeconds != null) {\n        message.WaitTimeSeconds = data.WaitTimeSeconds;\n      }\n      if (data.RefSequence != null) {\n        message.RefSequence = data.RefSequence;\n      }\n      if (data.ModifiedMessage != null) {\n        message.ModifiedMessage = QueueMessage.fromObject(data.ModifiedMessage);\n      }\n      return message;\n    }\n    toObject() {\n      const data: {\n        RequestID?: string;\n        ClientID?: string;\n        StreamRequestTypeData?: StreamRequestType;\n        Channel?: string;\n        VisibilitySeconds?: number;\n        WaitTimeSeconds?: number;\n        RefSequence?: number;\n        ModifiedMessage?: ReturnType<typeof QueueMessage.prototype.toObject>;\n      } = {};\n      if (this.RequestID != null) {\n        data.RequestID = this.RequestID;\n      }\n      if (this.ClientID != null) {\n        data.ClientID = this.ClientID;\n      }\n      if (this.StreamRequestTypeData != null) {\n        data.StreamRequestTypeData = this.StreamRequestTypeData;\n      }\n      if (this.Channel != null) {\n        data.Channel = this.Channel;\n      }\n      if (this.VisibilitySeconds != null) {\n        data.VisibilitySeconds = this.VisibilitySeconds;\n      }\n      if (this.WaitTimeSeconds != null) {\n        data.WaitTimeSeconds = this.WaitTimeSeconds;\n      }\n      if (this.RefSequence != null) {\n        data.RefSequence = this.RefSequence;\n      }\n      if (this.ModifiedMessage != null) {\n        data.ModifiedMessage = this.ModifiedMessage.toObject();\n      }\n      return data;\n    }\n    serialize(): Uint8Array;\n    serialize(w: pb_1.BinaryWriter): void;\n    serialize(w?: pb_1.BinaryWriter): Uint8Array | void {\n      const writer = w || new pb_1.BinaryWriter();\n      if (this.RequestID.length) writer.writeString(1, this.RequestID);\n      if (this.ClientID.length) writer.writeString(2, this.ClientID);\n      if (this.StreamRequestTypeData != StreamRequestType.StreamRequestTypeUnknown)\n        writer.writeEnum(3, this.StreamRequestTypeData);\n      if (this.Channel.length) writer.writeString(4, this.Channel);\n      if (this.VisibilitySeconds != 0) writer.writeInt32(5, this.VisibilitySeconds);\n      if (this.WaitTimeSeconds != 0) writer.writeInt32(6, this.WaitTimeSeconds);\n      if (this.RefSequence != 0) writer.writeUint64(7, this.RefSequence);\n      if (this.has_ModifiedMessage)\n        writer.writeMessage(8, this.ModifiedMessage, () => this.ModifiedMessage.serialize(writer));\n      if (!w) return writer.getResultBuffer();\n    }\n    static deserialize(bytes: Uint8Array | pb_1.BinaryReader): StreamQueueMessagesRequest {\n      const reader = bytes instanceof pb_1.BinaryReader ? bytes : new pb_1.BinaryReader(bytes),\n        message = new StreamQueueMessagesRequest();\n      while (reader.nextField()) {\n        if (reader.isEndGroup()) break;\n        switch (reader.getFieldNumber()) {\n          case 1:\n            message.RequestID = reader.readString();\n            break;\n          case 2:\n            message.ClientID = reader.readString();\n            break;\n          case 3:\n            message.StreamRequestTypeData = reader.readEnum();\n            break;\n          case 4:\n            message.Channel = reader.readString();\n            break;\n          case 5:\n            message.VisibilitySeconds = reader.readInt32();\n            break;\n          case 6:\n            message.WaitTimeSeconds = reader.readInt32();\n            break;\n          case 7:\n            message.RefSequence = reader.readUint64();\n            break;\n          case 8:\n            reader.readMessage(\n              message.ModifiedMessage,\n              () => (message.ModifiedMessage = QueueMessage.deserialize(reader)),\n            );\n            break;\n          default:\n            reader.skipField();\n        }\n      }\n      return message;\n    }\n    serializeBinary(): Uint8Array {\n      return this.serialize();\n    }\n    static deserializeBinary(bytes: Uint8Array): StreamQueueMessagesRequest {\n      return StreamQueueMessagesRequest.deserialize(bytes);\n    }\n  }\n  export class StreamQueueMessagesResponse extends pb_1.Message {\n    #one_of_decls: number[][] = [];\n    constructor(\n      data?:\n        | any[]\n        | {\n            RequestID?: string;\n            StreamRequestTypeData?: StreamRequestType;\n            Message?: QueueMessage;\n            IsError?: boolean;\n            Error?: string;\n          },\n    ) {\n      super();\n      pb_1.Message.initialize(this, Array.isArray(data) ? data : [], 0, -1, [], this.#one_of_decls);\n      if (!Array.isArray(data) && typeof data == 'object') {\n        if ('RequestID' in data && data.RequestID != undefined) {\n          this.RequestID = data.RequestID;\n        }\n        if ('StreamRequestTypeData' in data && data.StreamRequestTypeData != undefined) {\n          this.StreamRequestTypeData = data.StreamRequestTypeData;\n        }\n        if ('Message' in data && data.Message != undefined) {\n          this.Message = data.Message;\n        }\n        if ('IsError' in data && data.IsError != undefined) {\n          this.IsError = data.IsError;\n        }\n        if ('Error' in data && data.Error != undefined) {\n          this.Error = data.Error;\n        }\n      }\n    }\n    get RequestID() {\n      return pb_1.Message.getFieldWithDefault(this, 1, '') as string;\n    }\n    set RequestID(value: string) {\n      pb_1.Message.setField(this, 1, value);\n    }\n    get StreamRequestTypeData() {\n      return pb_1.Message.getFieldWithDefault(\n        this,\n        2,\n        StreamRequestType.StreamRequestTypeUnknown,\n      ) as StreamRequestType;\n    }\n    set StreamRequestTypeData(value: StreamRequestType) {\n      pb_1.Message.setField(this, 2, value);\n    }\n    get Message() {\n      return pb_1.Message.getWrapperField(this, QueueMessage, 3) as QueueMessage;\n    }\n    set Message(value: QueueMessage) {\n      pb_1.Message.setWrapperField(this, 3, value);\n    }\n    get has_Message() {\n      return pb_1.Message.getField(this, 3) != null;\n    }\n    get IsError() {\n      return pb_1.Message.getFieldWithDefault(this, 4, false) as boolean;\n    }\n    set IsError(value: boolean) {\n      pb_1.Message.setField(this, 4, value);\n    }\n    get Error() {\n      return pb_1.Message.getFieldWithDefault(this, 5, '') as string;\n    }\n    set Error(value: string) {\n      pb_1.Message.setField(this, 5, value);\n    }\n    static fromObject(data: {\n      RequestID?: string;\n      StreamRequestTypeData?: StreamRequestType;\n      Message?: ReturnType<typeof QueueMessage.prototype.toObject>;\n      IsError?: boolean;\n      Error?: string;\n    }): StreamQueueMessagesResponse {\n      const message = new StreamQueueMessagesResponse({});\n      if (data.RequestID != null) {\n        message.RequestID = data.RequestID;\n      }\n      if (data.StreamRequestTypeData != null) {\n        message.StreamRequestTypeData = data.StreamRequestTypeData;\n      }\n      if (data.Message != null) {\n        message.Message = QueueMessage.fromObject(data.Message);\n      }\n      if (data.IsError != null) {\n        message.IsError = data.IsError;\n      }\n      if (data.Error != null) {\n        message.Error = data.Error;\n      }\n      return message;\n    }\n    toObject() {\n      const data: {\n        RequestID?: string;\n        StreamRequestTypeData?: StreamRequestType;\n        Message?: ReturnType<typeof QueueMessage.prototype.toObject>;\n        IsError?: boolean;\n        Error?: string;\n      } = {};\n      if (this.RequestID != null) {\n        data.RequestID = this.RequestID;\n      }\n      if (this.StreamRequestTypeData != null) {\n        data.StreamRequestTypeData = this.StreamRequestTypeData;\n      }\n      if (this.Message != null) {\n        data.Message = this.Message.toObject();\n      }\n      if (this.IsError != null) {\n        data.IsError = this.IsError;\n      }\n      if (this.Error != null) {\n        data.Error = this.Error;\n      }\n      return data;\n    }\n    serialize(): Uint8Array;\n    serialize(w: pb_1.BinaryWriter): void;\n    serialize(w?: pb_1.BinaryWriter): Uint8Array | void {\n      const writer = w || new pb_1.BinaryWriter();\n      if (this.RequestID.length) writer.writeString(1, this.RequestID);\n      if (this.StreamRequestTypeData != StreamRequestType.StreamRequestTypeUnknown)\n        writer.writeEnum(2, this.StreamRequestTypeData);\n      if (this.has_Message)\n        writer.writeMessage(3, this.Message, () => this.Message.serialize(writer));\n      if (this.IsError != false) writer.writeBool(4, this.IsError);\n      if (this.Error.length) writer.writeString(5, this.Error);\n      if (!w) return writer.getResultBuffer();\n    }\n    static deserialize(bytes: Uint8Array | pb_1.BinaryReader): StreamQueueMessagesResponse {\n      const reader = bytes instanceof pb_1.BinaryReader ? bytes : new pb_1.BinaryReader(bytes),\n        message = new StreamQueueMessagesResponse();\n      while (reader.nextField()) {\n        if (reader.isEndGroup()) break;\n        switch (reader.getFieldNumber()) {\n          case 1:\n            message.RequestID = reader.readString();\n            break;\n          case 2:\n            message.StreamRequestTypeData = reader.readEnum();\n            break;\n          case 3:\n            reader.readMessage(\n              message.Message,\n              () => (message.Message = QueueMessage.deserialize(reader)),\n            );\n            break;\n          case 4:\n            message.IsError = reader.readBool();\n            break;\n          case 5:\n            message.Error = reader.readString();\n            break;\n          default:\n            reader.skipField();\n        }\n      }\n      return message;\n    }\n    serializeBinary(): Uint8Array {\n      return this.serialize();\n    }\n    static deserializeBinary(bytes: Uint8Array): StreamQueueMessagesResponse {\n      return StreamQueueMessagesResponse.deserialize(bytes);\n    }\n  }\n  export class QueuesUpstreamRequest extends pb_1.Message {\n    #one_of_decls: number[][] = [];\n    constructor(\n      data?:\n        | any[]\n        | {\n            RequestID?: string;\n            Messages?: QueueMessage[];\n          },\n    ) {\n      super();\n      pb_1.Message.initialize(\n        this,\n        Array.isArray(data) ? data : [],\n        0,\n        -1,\n        [2],\n        this.#one_of_decls,\n      );\n      if (!Array.isArray(data) && typeof data == 'object') {\n        if ('RequestID' in data && data.RequestID != undefined) {\n          this.RequestID = data.RequestID;\n        }\n        if ('Messages' in data && data.Messages != undefined) {\n          this.Messages = data.Messages;\n        }\n      }\n    }\n    get RequestID() {\n      return pb_1.Message.getFieldWithDefault(this, 1, '') as string;\n    }\n    set RequestID(value: string) {\n      pb_1.Message.setField(this, 1, value);\n    }\n    get Messages() {\n      return pb_1.Message.getRepeatedWrapperField(this, QueueMessage, 2) as QueueMessage[];\n    }\n    set Messages(value: QueueMessage[]) {\n      pb_1.Message.setRepeatedWrapperField(this, 2, value);\n    }\n    static fromObject(data: {\n      RequestID?: string;\n      Messages?: ReturnType<typeof QueueMessage.prototype.toObject>[];\n    }): QueuesUpstreamRequest {\n      const message = new QueuesUpstreamRequest({});\n      if (data.RequestID != null) {\n        message.RequestID = data.RequestID;\n      }\n      if (data.Messages != null) {\n        message.Messages = data.Messages.map((item) => QueueMessage.fromObject(item));\n      }\n      return message;\n    }\n    toObject() {\n      const data: {\n        RequestID?: string;\n        Messages?: ReturnType<typeof QueueMessage.prototype.toObject>[];\n      } = {};\n      if (this.RequestID != null) {\n        data.RequestID = this.RequestID;\n      }\n      if (this.Messages != null) {\n        data.Messages = this.Messages.map((item: QueueMessage) => item.toObject());\n      }\n      return data;\n    }\n    serialize(): Uint8Array;\n    serialize(w: pb_1.BinaryWriter): void;\n    serialize(w?: pb_1.BinaryWriter): Uint8Array | void {\n      const writer = w || new pb_1.BinaryWriter();\n      if (this.RequestID.length) writer.writeString(1, this.RequestID);\n      if (this.Messages.length)\n        writer.writeRepeatedMessage(2, this.Messages, (item: QueueMessage) =>\n          item.serialize(writer),\n        );\n      if (!w) return writer.getResultBuffer();\n    }\n    static deserialize(bytes: Uint8Array | pb_1.BinaryReader): QueuesUpstreamRequest {\n      const reader = bytes instanceof pb_1.BinaryReader ? bytes : new pb_1.BinaryReader(bytes),\n        message = new QueuesUpstreamRequest();\n      while (reader.nextField()) {\n        if (reader.isEndGroup()) break;\n        switch (reader.getFieldNumber()) {\n          case 1:\n            message.RequestID = reader.readString();\n            break;\n          case 2:\n            reader.readMessage(message.Messages, () =>\n              pb_1.Message.addToRepeatedWrapperField(\n                message,\n                2,\n                QueueMessage.deserialize(reader),\n                QueueMessage,\n              ),\n            );\n            break;\n          default:\n            reader.skipField();\n        }\n      }\n      return message;\n    }\n    serializeBinary(): Uint8Array {\n      return this.serialize();\n    }\n    static deserializeBinary(bytes: Uint8Array): QueuesUpstreamRequest {\n      return QueuesUpstreamRequest.deserialize(bytes);\n    }\n  }\n  export class QueuesUpstreamResponse extends pb_1.Message {\n    #one_of_decls: number[][] = [];\n    constructor(\n      data?:\n        | any[]\n        | {\n            RefRequestID?: string;\n            Results?: SendQueueMessageResult[];\n            IsError?: boolean;\n            Error?: string;\n          },\n    ) {\n      super();\n      pb_1.Message.initialize(\n        this,\n        Array.isArray(data) ? data : [],\n        0,\n        -1,\n        [2],\n        this.#one_of_decls,\n      );\n      if (!Array.isArray(data) && typeof data == 'object') {\n        if ('RefRequestID' in data && data.RefRequestID != undefined) {\n          this.RefRequestID = data.RefRequestID;\n        }\n        if ('Results' in data && data.Results != undefined) {\n          this.Results = data.Results;\n        }\n        if ('IsError' in data && data.IsError != undefined) {\n          this.IsError = data.IsError;\n        }\n        if ('Error' in data && data.Error != undefined) {\n          this.Error = data.Error;\n        }\n      }\n    }\n    get RefRequestID() {\n      return pb_1.Message.getFieldWithDefault(this, 1, '') as string;\n    }\n    set RefRequestID(value: string) {\n      pb_1.Message.setField(this, 1, value);\n    }\n    get Results() {\n      return pb_1.Message.getRepeatedWrapperField(\n        this,\n        SendQueueMessageResult,\n        2,\n      ) as SendQueueMessageResult[];\n    }\n    set Results(value: SendQueueMessageResult[]) {\n      pb_1.Message.setRepeatedWrapperField(this, 2, value);\n    }\n    get IsError() {\n      return pb_1.Message.getFieldWithDefault(this, 3, false) as boolean;\n    }\n    set IsError(value: boolean) {\n      pb_1.Message.setField(this, 3, value);\n    }\n    get Error() {\n      return pb_1.Message.getFieldWithDefault(this, 4, '') as string;\n    }\n    set Error(value: string) {\n      pb_1.Message.setField(this, 4, value);\n    }\n    static fromObject(data: {\n      RefRequestID?: string;\n      Results?: ReturnType<typeof SendQueueMessageResult.prototype.toObject>[];\n      IsError?: boolean;\n      Error?: string;\n    }): QueuesUpstreamResponse {\n      const message = new QueuesUpstreamResponse({});\n      if (data.RefRequestID != null) {\n        message.RefRequestID = data.RefRequestID;\n      }\n      if (data.Results != null) {\n        message.Results = data.Results.map((item) => SendQueueMessageResult.fromObject(item));\n      }\n      if (data.IsError != null) {\n        message.IsError = data.IsError;\n      }\n      if (data.Error != null) {\n        message.Error = data.Error;\n      }\n      return message;\n    }\n    toObject() {\n      const data: {\n        RefRequestID?: string;\n        Results?: ReturnType<typeof SendQueueMessageResult.prototype.toObject>[];\n        IsError?: boolean;\n        Error?: string;\n      } = {};\n      if (this.RefRequestID != null) {\n        data.RefRequestID = this.RefRequestID;\n      }\n      if (this.Results != null) {\n        data.Results = this.Results.map((item: SendQueueMessageResult) => item.toObject());\n      }\n      if (this.IsError != null) {\n        data.IsError = this.IsError;\n      }\n      if (this.Error != null) {\n        data.Error = this.Error;\n      }\n      return data;\n    }\n    serialize(): Uint8Array;\n    serialize(w: pb_1.BinaryWriter): void;\n    serialize(w?: pb_1.BinaryWriter): Uint8Array | void {\n      const writer = w || new pb_1.BinaryWriter();\n      if (this.RefRequestID.length) writer.writeString(1, this.RefRequestID);\n      if (this.Results.length)\n        writer.writeRepeatedMessage(2, this.Results, (item: SendQueueMessageResult) =>\n          item.serialize(writer),\n        );\n      if (this.IsError != false) writer.writeBool(3, this.IsError);\n      if (this.Error.length) writer.writeString(4, this.Error);\n      if (!w) return writer.getResultBuffer();\n    }\n    static deserialize(bytes: Uint8Array | pb_1.BinaryReader): QueuesUpstreamResponse {\n      const reader = bytes instanceof pb_1.BinaryReader ? bytes : new pb_1.BinaryReader(bytes),\n        message = new QueuesUpstreamResponse();\n      while (reader.nextField()) {\n        if (reader.isEndGroup()) break;\n        switch (reader.getFieldNumber()) {\n          case 1:\n            message.RefRequestID = reader.readString();\n            break;\n          case 2:\n            reader.readMessage(message.Results, () =>\n              pb_1.Message.addToRepeatedWrapperField(\n                message,\n                2,\n                SendQueueMessageResult.deserialize(reader),\n                SendQueueMessageResult,\n              ),\n            );\n            break;\n          case 3:\n            message.IsError = reader.readBool();\n            break;\n          case 4:\n            message.Error = reader.readString();\n            break;\n          default:\n            reader.skipField();\n        }\n      }\n      return message;\n    }\n    serializeBinary(): Uint8Array {\n      return this.serialize();\n    }\n    static deserializeBinary(bytes: Uint8Array): QueuesUpstreamResponse {\n      return QueuesUpstreamResponse.deserialize(bytes);\n    }\n  }\n  export class QueuesDownstreamRequest extends pb_1.Message {\n    #one_of_decls: number[][] = [];\n    constructor(\n      data?:\n        | any[]\n        | {\n            RequestID?: string;\n            ClientID?: string;\n            RequestTypeData?: QueuesDownstreamRequestType;\n            Channel?: string;\n            MaxItems?: number;\n            WaitTimeout?: number;\n            AutoAck?: boolean;\n            ReQueueChannel?: string;\n            SequenceRange?: number[];\n            RefTransactionId?: string;\n            Metadata?: Map<string, string>;\n          },\n    ) {\n      super();\n      pb_1.Message.initialize(\n        this,\n        Array.isArray(data) ? data : [],\n        0,\n        -1,\n        [9],\n        this.#one_of_decls,\n      );\n      if (!Array.isArray(data) && typeof data == 'object') {\n        if ('RequestID' in data && data.RequestID != undefined) {\n          this.RequestID = data.RequestID;\n        }\n        if ('ClientID' in data && data.ClientID != undefined) {\n          this.ClientID = data.ClientID;\n        }\n        if ('RequestTypeData' in data && data.RequestTypeData != undefined) {\n          this.RequestTypeData = data.RequestTypeData;\n        }\n        if ('Channel' in data && data.Channel != undefined) {\n          this.Channel = data.Channel;\n        }\n        if ('MaxItems' in data && data.MaxItems != undefined) {\n          this.MaxItems = data.MaxItems;\n        }\n        if ('WaitTimeout' in data && data.WaitTimeout != undefined) {\n          this.WaitTimeout = data.WaitTimeout;\n        }\n        if ('AutoAck' in data && data.AutoAck != undefined) {\n          this.AutoAck = data.AutoAck;\n        }\n        if ('ReQueueChannel' in data && data.ReQueueChannel != undefined) {\n          this.ReQueueChannel = data.ReQueueChannel;\n        }\n        if ('SequenceRange' in data && data.SequenceRange != undefined) {\n          this.SequenceRange = data.SequenceRange;\n        }\n        if ('RefTransactionId' in data && data.RefTransactionId != undefined) {\n          this.RefTransactionId = data.RefTransactionId;\n        }\n        if ('Metadata' in data && data.Metadata != undefined) {\n          this.Metadata = data.Metadata;\n        }\n      }\n      if (!this.Metadata) this.Metadata = new Map();\n    }\n    get RequestID() {\n      return pb_1.Message.getFieldWithDefault(this, 1, '') as string;\n    }\n    set RequestID(value: string) {\n      pb_1.Message.setField(this, 1, value);\n    }\n    get ClientID() {\n      return pb_1.Message.getFieldWithDefault(this, 2, '') as string;\n    }\n    set ClientID(value: string) {\n      pb_1.Message.setField(this, 2, value);\n    }\n    get RequestTypeData() {\n      return pb_1.Message.getFieldWithDefault(\n        this,\n        3,\n        QueuesDownstreamRequestType.PollRequestTypeUnknown,\n      ) as QueuesDownstreamRequestType;\n    }\n    set RequestTypeData(value: QueuesDownstreamRequestType) {\n      pb_1.Message.setField(this, 3, value);\n    }\n    get Channel() {\n      return pb_1.Message.getFieldWithDefault(this, 4, '') as string;\n    }\n    set Channel(value: string) {\n      pb_1.Message.setField(this, 4, value);\n    }\n    get MaxItems() {\n      return pb_1.Message.getFieldWithDefault(this, 5, 0) as number;\n    }\n    set MaxItems(value: number) {\n      pb_1.Message.setField(this, 5, value);\n    }\n    get WaitTimeout() {\n      return pb_1.Message.getFieldWithDefault(this, 6, 0) as number;\n    }\n    set WaitTimeout(value: number) {\n      pb_1.Message.setField(this, 6, value);\n    }\n    get AutoAck() {\n      return pb_1.Message.getFieldWithDefault(this, 7, false) as boolean;\n    }\n    set AutoAck(value: boolean) {\n      pb_1.Message.setField(this, 7, value);\n    }\n    get ReQueueChannel() {\n      return pb_1.Message.getFieldWithDefault(this, 8, '') as string;\n    }\n    set ReQueueChannel(value: string) {\n      pb_1.Message.setField(this, 8, value);\n    }\n    get SequenceRange() {\n      return pb_1.Message.getFieldWithDefault(this, 9, []) as number[];\n    }\n    set SequenceRange(value: number[]) {\n      pb_1.Message.setField(this, 9, value);\n    }\n    get RefTransactionId() {\n      return pb_1.Message.getFieldWithDefault(this, 10, '') as string;\n    }\n    set RefTransactionId(value: string) {\n      pb_1.Message.setField(this, 10, value);\n    }\n    get Metadata() {\n      return pb_1.Message.getField(this, 12) as any as Map<string, string>;\n    }\n    set Metadata(value: Map<string, string>) {\n      pb_1.Message.setField(this, 12, value as any);\n    }\n    static fromObject(data: {\n      RequestID?: string;\n      ClientID?: string;\n      RequestTypeData?: QueuesDownstreamRequestType;\n      Channel?: string;\n      MaxItems?: number;\n      WaitTimeout?: number;\n      AutoAck?: boolean;\n      ReQueueChannel?: string;\n      SequenceRange?: number[];\n      RefTransactionId?: string;\n      Metadata?: {\n        [key: string]: string;\n      };\n    }): QueuesDownstreamRequest {\n      const message = new QueuesDownstreamRequest({});\n      if (data.RequestID != null) {\n        message.RequestID = data.RequestID;\n      }\n      if (data.ClientID != null) {\n        message.ClientID = data.ClientID;\n      }\n      if (data.RequestTypeData != null) {\n        message.RequestTypeData = data.RequestTypeData;\n      }\n      if (data.Channel != null) {\n        message.Channel = data.Channel;\n      }\n      if (data.MaxItems != null) {\n        message.MaxItems = data.MaxItems;\n      }\n      if (data.WaitTimeout != null) {\n        message.WaitTimeout = data.WaitTimeout;\n      }\n      if (data.AutoAck != null) {\n        message.AutoAck = data.AutoAck;\n      }\n      if (data.ReQueueChannel != null) {\n        message.ReQueueChannel = data.ReQueueChannel;\n      }\n      if (data.SequenceRange != null) {\n        message.SequenceRange = data.SequenceRange;\n      }\n      if (data.RefTransactionId != null) {\n        message.RefTransactionId = data.RefTransactionId;\n      }\n      if (typeof data.Metadata == 'object') {\n        message.Metadata = new Map(Object.entries(data.Metadata));\n      }\n      return message;\n    }\n    toObject() {\n      const data: {\n        RequestID?: string;\n        ClientID?: string;\n        RequestTypeData?: QueuesDownstreamRequestType;\n        Channel?: string;\n        MaxItems?: number;\n        WaitTimeout?: number;\n        AutoAck?: boolean;\n        ReQueueChannel?: string;\n        SequenceRange?: number[];\n        RefTransactionId?: string;\n        Metadata?: {\n          [key: string]: string;\n        };\n      } = {};\n      if (this.RequestID != null) {\n        data.RequestID = this.RequestID;\n      }\n      if (this.ClientID != null) {\n        data.ClientID = this.ClientID;\n      }\n      if (this.RequestTypeData != null) {\n        data.RequestTypeData = this.RequestTypeData;\n      }\n      if (this.Channel != null) {\n        data.Channel = this.Channel;\n      }\n      if (this.MaxItems != null) {\n        data.MaxItems = this.MaxItems;\n      }\n      if (this.WaitTimeout != null) {\n        data.WaitTimeout = this.WaitTimeout;\n      }\n      if (this.AutoAck != null) {\n        data.AutoAck = this.AutoAck;\n      }\n      if (this.ReQueueChannel != null) {\n        data.ReQueueChannel = this.ReQueueChannel;\n      }\n      if (this.SequenceRange != null) {\n        data.SequenceRange = this.SequenceRange;\n      }\n      if (this.RefTransactionId != null) {\n        data.RefTransactionId = this.RefTransactionId;\n      }\n      if (this.Metadata != null) {\n        data.Metadata = Object.fromEntries(this.Metadata);\n      }\n      return data;\n    }\n    serialize(): Uint8Array;\n    serialize(w: pb_1.BinaryWriter): void;\n    serialize(w?: pb_1.BinaryWriter): Uint8Array | void {\n      const writer = w || new pb_1.BinaryWriter();\n      if (this.RequestID.length) writer.writeString(1, this.RequestID);\n      if (this.ClientID.length) writer.writeString(2, this.ClientID);\n      if (this.RequestTypeData != QueuesDownstreamRequestType.PollRequestTypeUnknown)\n        writer.writeEnum(3, this.RequestTypeData);\n      if (this.Channel.length) writer.writeString(4, this.Channel);\n      if (this.MaxItems != 0) writer.writeInt32(5, this.MaxItems);\n      if (this.WaitTimeout != 0) writer.writeInt32(6, this.WaitTimeout);\n      if (this.AutoAck != false) writer.writeBool(7, this.AutoAck);\n      if (this.ReQueueChannel.length) writer.writeString(8, this.ReQueueChannel);\n      if (this.SequenceRange.length) writer.writePackedInt64(9, this.SequenceRange);\n      if (this.RefTransactionId.length) writer.writeString(10, this.RefTransactionId);\n      for (const [key, value] of this.Metadata) {\n        writer.writeMessage(12, this.Metadata, () => {\n          writer.writeString(1, key);\n          writer.writeString(2, value);\n        });\n      }\n      if (!w) return writer.getResultBuffer();\n    }\n    static deserialize(bytes: Uint8Array | pb_1.BinaryReader): QueuesDownstreamRequest {\n      const reader = bytes instanceof pb_1.BinaryReader ? bytes : new pb_1.BinaryReader(bytes),\n        message = new QueuesDownstreamRequest();\n      while (reader.nextField()) {\n        if (reader.isEndGroup()) break;\n        switch (reader.getFieldNumber()) {\n          case 1:\n            message.RequestID = reader.readString();\n            break;\n          case 2:\n            message.ClientID = reader.readString();\n            break;\n          case 3:\n            message.RequestTypeData = reader.readEnum();\n            break;\n          case 4:\n            message.Channel = reader.readString();\n            break;\n          case 5:\n            message.MaxItems = reader.readInt32();\n            break;\n          case 6:\n            message.WaitTimeout = reader.readInt32();\n            break;\n          case 7:\n            message.AutoAck = reader.readBool();\n            break;\n          case 8:\n            message.ReQueueChannel = reader.readString();\n            break;\n          case 9:\n            message.SequenceRange = reader.readPackedInt64();\n            break;\n          case 10:\n            message.RefTransactionId = reader.readString();\n            break;\n          case 12:\n            reader.readMessage(message, () =>\n              pb_1.Map.deserializeBinary(\n                message.Metadata as any,\n                reader,\n                reader.readString,\n                reader.readString,\n              ),\n            );\n            break;\n          default:\n            reader.skipField();\n        }\n      }\n      return message;\n    }\n    serializeBinary(): Uint8Array {\n      return this.serialize();\n    }\n    static deserializeBinary(bytes: Uint8Array): QueuesDownstreamRequest {\n      return QueuesDownstreamRequest.deserialize(bytes);\n    }\n  }\n  export class QueuesDownstreamResponse extends pb_1.Message {\n    #one_of_decls: number[][] = [];\n    constructor(\n      data?:\n        | any[]\n        | {\n            TransactionId?: string;\n            RefRequestId?: string;\n            RequestTypeData?: QueuesDownstreamRequestType;\n            Messages?: QueueMessage[];\n            ActiveOffsets?: number[];\n            IsError?: boolean;\n            Error?: string;\n            TransactionComplete?: boolean;\n            Metadata?: Map<string, string>;\n          },\n    ) {\n      super();\n      pb_1.Message.initialize(\n        this,\n        Array.isArray(data) ? data : [],\n        0,\n        -1,\n        [4, 5],\n        this.#one_of_decls,\n      );\n      if (!Array.isArray(data) && typeof data == 'object') {\n        if ('TransactionId' in data && data.TransactionId != undefined) {\n          this.TransactionId = data.TransactionId;\n        }\n        if ('RefRequestId' in data && data.RefRequestId != undefined) {\n          this.RefRequestId = data.RefRequestId;\n        }\n        if ('RequestTypeData' in data && data.RequestTypeData != undefined) {\n          this.RequestTypeData = data.RequestTypeData;\n        }\n        if ('Messages' in data && data.Messages != undefined) {\n          this.Messages = data.Messages;\n        }\n        if ('ActiveOffsets' in data && data.ActiveOffsets != undefined) {\n          this.ActiveOffsets = data.ActiveOffsets;\n        }\n        if ('IsError' in data && data.IsError != undefined) {\n          this.IsError = data.IsError;\n        }\n        if ('Error' in data && data.Error != undefined) {\n          this.Error = data.Error;\n        }\n        if ('TransactionComplete' in data && data.TransactionComplete != undefined) {\n          this.TransactionComplete = data.TransactionComplete;\n        }\n        if ('Metadata' in data && data.Metadata != undefined) {\n          this.Metadata = data.Metadata;\n        }\n      }\n      if (!this.Metadata) this.Metadata = new Map();\n    }\n    get TransactionId() {\n      return pb_1.Message.getFieldWithDefault(this, 1, '') as string;\n    }\n    set TransactionId(value: string) {\n      pb_1.Message.setField(this, 1, value);\n    }\n    get RefRequestId() {\n      return pb_1.Message.getFieldWithDefault(this, 2, '') as string;\n    }\n    set RefRequestId(value: string) {\n      pb_1.Message.setField(this, 2, value);\n    }\n    get RequestTypeData() {\n      return pb_1.Message.getFieldWithDefault(\n        this,\n        3,\n        QueuesDownstreamRequestType.PollRequestTypeUnknown,\n      ) as QueuesDownstreamRequestType;\n    }\n    set RequestTypeData(value: QueuesDownstreamRequestType) {\n      pb_1.Message.setField(this, 3, value);\n    }\n    get Messages() {\n      return pb_1.Message.getRepeatedWrapperField(this, QueueMessage, 4) as QueueMessage[];\n    }\n    set Messages(value: QueueMessage[]) {\n      pb_1.Message.setRepeatedWrapperField(this, 4, value);\n    }\n    get ActiveOffsets() {\n      return pb_1.Message.getFieldWithDefault(this, 5, []) as number[];\n    }\n    set ActiveOffsets(value: number[]) {\n      pb_1.Message.setField(this, 5, value);\n    }\n    get IsError() {\n      return pb_1.Message.getFieldWithDefault(this, 6, false) as boolean;\n    }\n    set IsError(value: boolean) {\n      pb_1.Message.setField(this, 6, value);\n    }\n    get Error() {\n      return pb_1.Message.getFieldWithDefault(this, 7, '') as string;\n    }\n    set Error(value: string) {\n      pb_1.Message.setField(this, 7, value);\n    }\n    get TransactionComplete() {\n      return pb_1.Message.getFieldWithDefault(this, 8, false) as boolean;\n    }\n    set TransactionComplete(value: boolean) {\n      pb_1.Message.setField(this, 8, value);\n    }\n    get Metadata() {\n      return pb_1.Message.getField(this, 9) as any as Map<string, string>;\n    }\n    set Metadata(value: Map<string, string>) {\n      pb_1.Message.setField(this, 9, value as any);\n    }\n    static fromObject(data: {\n      TransactionId?: string;\n      RefRequestId?: string;\n      RequestTypeData?: QueuesDownstreamRequestType;\n      Messages?: ReturnType<typeof QueueMessage.prototype.toObject>[];\n      ActiveOffsets?: number[];\n      IsError?: boolean;\n      Error?: string;\n      TransactionComplete?: boolean;\n      Metadata?: {\n        [key: string]: string;\n      };\n    }): QueuesDownstreamResponse {\n      const message = new QueuesDownstreamResponse({});\n      if (data.TransactionId != null) {\n        message.TransactionId = data.TransactionId;\n      }\n      if (data.RefRequestId != null) {\n        message.RefRequestId = data.RefRequestId;\n      }\n      if (data.RequestTypeData != null) {\n        message.RequestTypeData = data.RequestTypeData;\n      }\n      if (data.Messages != null) {\n        message.Messages = data.Messages.map((item) => QueueMessage.fromObject(item));\n      }\n      if (data.ActiveOffsets != null) {\n        message.ActiveOffsets = data.ActiveOffsets;\n      }\n      if (data.IsError != null) {\n        message.IsError = data.IsError;\n      }\n      if (data.Error != null) {\n        message.Error = data.Error;\n      }\n      if (data.TransactionComplete != null) {\n        message.TransactionComplete = data.TransactionComplete;\n      }\n      if (typeof data.Metadata == 'object') {\n        message.Metadata = new Map(Object.entries(data.Metadata));\n      }\n      return message;\n    }\n    toObject() {\n      const data: {\n        TransactionId?: string;\n        RefRequestId?: string;\n        RequestTypeData?: QueuesDownstreamRequestType;\n        Messages?: ReturnType<typeof QueueMessage.prototype.toObject>[];\n        ActiveOffsets?: number[];\n        IsError?: boolean;\n        Error?: string;\n        TransactionComplete?: boolean;\n        Metadata?: {\n          [key: string]: string;\n        };\n      } = {};\n      if (this.TransactionId != null) {\n        data.TransactionId = this.TransactionId;\n      }\n      if (this.RefRequestId != null) {\n        data.RefRequestId = this.RefRequestId;\n      }\n      if (this.RequestTypeData != null) {\n        data.RequestTypeData = this.RequestTypeData;\n      }\n      if (this.Messages != null) {\n        data.Messages = this.Messages.map((item: QueueMessage) => item.toObject());\n      }\n      if (this.ActiveOffsets != null) {\n        data.ActiveOffsets = this.ActiveOffsets;\n      }\n      if (this.IsError != null) {\n        data.IsError = this.IsError;\n      }\n      if (this.Error != null) {\n        data.Error = this.Error;\n      }\n      if (this.TransactionComplete != null) {\n        data.TransactionComplete = this.TransactionComplete;\n      }\n      if (this.Metadata != null) {\n        data.Metadata = Object.fromEntries(this.Metadata);\n      }\n      return data;\n    }\n    serialize(): Uint8Array;\n    serialize(w: pb_1.BinaryWriter): void;\n    serialize(w?: pb_1.BinaryWriter): Uint8Array | void {\n      const writer = w || new pb_1.BinaryWriter();\n      if (this.TransactionId.length) writer.writeString(1, this.TransactionId);\n      if (this.RefRequestId.length) writer.writeString(2, this.RefRequestId);\n      if (this.RequestTypeData != QueuesDownstreamRequestType.PollRequestTypeUnknown)\n        writer.writeEnum(3, this.RequestTypeData);\n      if (this.Messages.length)\n        writer.writeRepeatedMessage(4, this.Messages, (item: QueueMessage) =>\n          item.serialize(writer),\n        );\n      if (this.ActiveOffsets.length) writer.writePackedInt64(5, this.ActiveOffsets);\n      if (this.IsError != false) writer.writeBool(6, this.IsError);\n      if (this.Error.length) writer.writeString(7, this.Error);\n      if (this.TransactionComplete != false) writer.writeBool(8, this.TransactionComplete);\n      for (const [key, value] of this.Metadata) {\n        writer.writeMessage(9, this.Metadata, () => {\n          writer.writeString(1, key);\n          writer.writeString(2, value);\n        });\n      }\n      if (!w) return writer.getResultBuffer();\n    }\n    static deserialize(bytes: Uint8Array | pb_1.BinaryReader): QueuesDownstreamResponse {\n      const reader = bytes instanceof pb_1.BinaryReader ? bytes : new pb_1.BinaryReader(bytes),\n        message = new QueuesDownstreamResponse();\n      while (reader.nextField()) {\n        if (reader.isEndGroup()) break;\n        switch (reader.getFieldNumber()) {\n          case 1:\n            message.TransactionId = reader.readString();\n            break;\n          case 2:\n            message.RefRequestId = reader.readString();\n            break;\n          case 3:\n            message.RequestTypeData = reader.readEnum();\n            break;\n          case 4:\n            reader.readMessage(message.Messages, () =>\n              pb_1.Message.addToRepeatedWrapperField(\n                message,\n                4,\n                QueueMessage.deserialize(reader),\n                QueueMessage,\n              ),\n            );\n            break;\n          case 5:\n            message.ActiveOffsets = reader.readPackedInt64();\n            break;\n          case 6:\n            message.IsError = reader.readBool();\n            break;\n          case 7:\n            message.Error = reader.readString();\n            break;\n          case 8:\n            message.TransactionComplete = reader.readBool();\n            break;\n          case 9:\n            reader.readMessage(message, () =>\n              pb_1.Map.deserializeBinary(\n                message.Metadata as any,\n                reader,\n                reader.readString,\n                reader.readString,\n              ),\n            );\n            break;\n          default:\n            reader.skipField();\n        }\n      }\n      return message;\n    }\n    serializeBinary(): Uint8Array {\n      return this.serialize();\n    }\n    static deserializeBinary(bytes: Uint8Array): QueuesDownstreamResponse {\n      return QueuesDownstreamResponse.deserialize(bytes);\n    }\n  }\n  interface GrpcUnaryServiceInterface<P, R> {\n    (\n      message: P,\n      metadata: grpc_1.Metadata,\n      options: grpc_1.CallOptions,\n      callback: grpc_1.requestCallback<R>,\n    ): grpc_1.ClientUnaryCall;\n    (\n      message: P,\n      metadata: grpc_1.Metadata,\n      callback: grpc_1.requestCallback<R>,\n    ): grpc_1.ClientUnaryCall;\n    (\n      message: P,\n      options: grpc_1.CallOptions,\n      callback: grpc_1.requestCallback<R>,\n    ): grpc_1.ClientUnaryCall;\n    (message: P, callback: grpc_1.requestCallback<R>): grpc_1.ClientUnaryCall;\n  }\n  interface GrpcStreamServiceInterface<P, R> {\n    (\n      message: P,\n      metadata: grpc_1.Metadata,\n      options?: grpc_1.CallOptions,\n    ): grpc_1.ClientReadableStream<R>;\n    (message: P, options?: grpc_1.CallOptions): grpc_1.ClientReadableStream<R>;\n  }\n  interface GrpWritableServiceInterface<P, R> {\n    (\n      metadata: grpc_1.Metadata,\n      options: grpc_1.CallOptions,\n      callback: grpc_1.requestCallback<R>,\n    ): grpc_1.ClientWritableStream<P>;\n    (\n      metadata: grpc_1.Metadata,\n      callback: grpc_1.requestCallback<R>,\n    ): grpc_1.ClientWritableStream<P>;\n    (\n      options: grpc_1.CallOptions,\n      callback: grpc_1.requestCallback<R>,\n    ): grpc_1.ClientWritableStream<P>;\n    (callback: grpc_1.requestCallback<R>): grpc_1.ClientWritableStream<P>;\n  }\n  interface GrpcChunkServiceInterface<P, R> {\n    (metadata: grpc_1.Metadata, options?: grpc_1.CallOptions): grpc_1.ClientDuplexStream<P, R>;\n    (options?: grpc_1.CallOptions): grpc_1.ClientDuplexStream<P, R>;\n  }\n  interface GrpcPromiseServiceInterface<P, R> {\n    (message: P, metadata: grpc_1.Metadata, options?: grpc_1.CallOptions): Promise<R>;\n    (message: P, options?: grpc_1.CallOptions): Promise<R>;\n  }\n  export abstract class UnimplementedkubemqService {\n    static definition = {\n      SendEvent: {\n        path: '/kubemq.kubemq/SendEvent',\n        requestStream: false,\n        responseStream: false,\n        requestSerialize: (message: Event) => Buffer.from(message.serialize()),\n        requestDeserialize: (bytes: Buffer) => Event.deserialize(new Uint8Array(bytes)),\n        responseSerialize: (message: Result) => Buffer.from(message.serialize()),\n        responseDeserialize: (bytes: Buffer) => Result.deserialize(new Uint8Array(bytes)),\n      },\n      SendEventsStream: {\n        path: '/kubemq.kubemq/SendEventsStream',\n        requestStream: true,\n        responseStream: true,\n        requestSerialize: (message: Event) => Buffer.from(message.serialize()),\n        requestDeserialize: (bytes: Buffer) => Event.deserialize(new Uint8Array(bytes)),\n        responseSerialize: (message: Result) => Buffer.from(message.serialize()),\n        responseDeserialize: (bytes: Buffer) => Result.deserialize(new Uint8Array(bytes)),\n      },\n      SubscribeToEvents: {\n        path: '/kubemq.kubemq/SubscribeToEvents',\n        requestStream: false,\n        responseStream: true,\n        requestSerialize: (message: Subscribe) => Buffer.from(message.serialize()),\n        requestDeserialize: (bytes: Buffer) => Subscribe.deserialize(new Uint8Array(bytes)),\n        responseSerialize: (message: EventReceive) => Buffer.from(message.serialize()),\n        responseDeserialize: (bytes: Buffer) => EventReceive.deserialize(new Uint8Array(bytes)),\n      },\n      SubscribeToRequests: {\n        path: '/kubemq.kubemq/SubscribeToRequests',\n        requestStream: false,\n        responseStream: true,\n        requestSerialize: (message: Subscribe) => Buffer.from(message.serialize()),\n        requestDeserialize: (bytes: Buffer) => Subscribe.deserialize(new Uint8Array(bytes)),\n        responseSerialize: (message: Request) => Buffer.from(message.serialize()),\n        responseDeserialize: (bytes: Buffer) => Request.deserialize(new Uint8Array(bytes)),\n      },\n      SendRequest: {\n        path: '/kubemq.kubemq/SendRequest',\n        requestStream: false,\n        responseStream: false,\n        requestSerialize: (message: Request) => Buffer.from(message.serialize()),\n        requestDeserialize: (bytes: Buffer) => Request.deserialize(new Uint8Array(bytes)),\n        responseSerialize: (message: Response) => Buffer.from(message.serialize()),\n        responseDeserialize: (bytes: Buffer) => Response.deserialize(new Uint8Array(bytes)),\n      },\n      SendResponse: {\n        path: '/kubemq.kubemq/SendResponse',\n        requestStream: false,\n        responseStream: false,\n        requestSerialize: (message: Response) => Buffer.from(message.serialize()),\n        requestDeserialize: (bytes: Buffer) => Response.deserialize(new Uint8Array(bytes)),\n        responseSerialize: (message: Empty) => Buffer.from(message.serialize()),\n        responseDeserialize: (bytes: Buffer) => Empty.deserialize(new Uint8Array(bytes)),\n      },\n      SendQueueMessage: {\n        path: '/kubemq.kubemq/SendQueueMessage',\n        requestStream: false,\n        responseStream: false,\n        requestSerialize: (message: QueueMessage) => Buffer.from(message.serialize()),\n        requestDeserialize: (bytes: Buffer) => QueueMessage.deserialize(new Uint8Array(bytes)),\n        responseSerialize: (message: SendQueueMessageResult) => Buffer.from(message.serialize()),\n        responseDeserialize: (bytes: Buffer) =>\n          SendQueueMessageResult.deserialize(new Uint8Array(bytes)),\n      },\n      SendQueueMessagesBatch: {\n        path: '/kubemq.kubemq/SendQueueMessagesBatch',\n        requestStream: false,\n        responseStream: false,\n        requestSerialize: (message: QueueMessagesBatchRequest) => Buffer.from(message.serialize()),\n        requestDeserialize: (bytes: Buffer) =>\n          QueueMessagesBatchRequest.deserialize(new Uint8Array(bytes)),\n        responseSerialize: (message: QueueMessagesBatchResponse) =>\n          Buffer.from(message.serialize()),\n        responseDeserialize: (bytes: Buffer) =>\n          QueueMessagesBatchResponse.deserialize(new Uint8Array(bytes)),\n      },\n      ReceiveQueueMessages: {\n        path: '/kubemq.kubemq/ReceiveQueueMessages',\n        requestStream: false,\n        responseStream: false,\n        requestSerialize: (message: ReceiveQueueMessagesRequest) =>\n          Buffer.from(message.serialize()),\n        requestDeserialize: (bytes: Buffer) =>\n          ReceiveQueueMessagesRequest.deserialize(new Uint8Array(bytes)),\n        responseSerialize: (message: ReceiveQueueMessagesResponse) =>\n          Buffer.from(message.serialize()),\n        responseDeserialize: (bytes: Buffer) =>\n          ReceiveQueueMessagesResponse.deserialize(new Uint8Array(bytes)),\n      },\n      StreamQueueMessage: {\n        path: '/kubemq.kubemq/StreamQueueMessage',\n        requestStream: true,\n        responseStream: true,\n        requestSerialize: (message: StreamQueueMessagesRequest) => Buffer.from(message.serialize()),\n        requestDeserialize: (bytes: Buffer) =>\n          StreamQueueMessagesRequest.deserialize(new Uint8Array(bytes)),\n        responseSerialize: (message: StreamQueueMessagesResponse) =>\n          Buffer.from(message.serialize()),\n        responseDeserialize: (bytes: Buffer) =>\n          StreamQueueMessagesResponse.deserialize(new Uint8Array(bytes)),\n      },\n      AckAllQueueMessages: {\n        path: '/kubemq.kubemq/AckAllQueueMessages',\n        requestStream: false,\n        responseStream: false,\n        requestSerialize: (message: AckAllQueueMessagesRequest) => Buffer.from(message.serialize()),\n        requestDeserialize: (bytes: Buffer) =>\n          AckAllQueueMessagesRequest.deserialize(new Uint8Array(bytes)),\n        responseSerialize: (message: AckAllQueueMessagesResponse) =>\n          Buffer.from(message.serialize()),\n        responseDeserialize: (bytes: Buffer) =>\n          AckAllQueueMessagesResponse.deserialize(new Uint8Array(bytes)),\n      },\n      Ping: {\n        path: '/kubemq.kubemq/Ping',\n        requestStream: false,\n        responseStream: false,\n        requestSerialize: (message: Empty) => Buffer.from(message.serialize()),\n        requestDeserialize: (bytes: Buffer) => Empty.deserialize(new Uint8Array(bytes)),\n        responseSerialize: (message: PingResult) => Buffer.from(message.serialize()),\n        responseDeserialize: (bytes: Buffer) => PingResult.deserialize(new Uint8Array(bytes)),\n      },\n      QueuesDownstream: {\n        path: '/kubemq.kubemq/QueuesDownstream',\n        requestStream: true,\n        responseStream: true,\n        requestSerialize: (message: QueuesDownstreamRequest) => Buffer.from(message.serialize()),\n        requestDeserialize: (bytes: Buffer) =>\n          QueuesDownstreamRequest.deserialize(new Uint8Array(bytes)),\n        responseSerialize: (message: QueuesDownstreamResponse) => Buffer.from(message.serialize()),\n        responseDeserialize: (bytes: Buffer) =>\n          QueuesDownstreamResponse.deserialize(new Uint8Array(bytes)),\n      },\n      QueuesUpstream: {\n        path: '/kubemq.kubemq/QueuesUpstream',\n        requestStream: true,\n        responseStream: true,\n        requestSerialize: (message: QueuesUpstreamRequest) => Buffer.from(message.serialize()),\n        requestDeserialize: (bytes: Buffer) =>\n          QueuesUpstreamRequest.deserialize(new Uint8Array(bytes)),\n        responseSerialize: (message: QueuesUpstreamResponse) => Buffer.from(message.serialize()),\n        responseDeserialize: (bytes: Buffer) =>\n          QueuesUpstreamResponse.deserialize(new Uint8Array(bytes)),\n      },\n    };\n    [method: string]: grpc_1.UntypedHandleCall;\n    abstract SendEvent(\n      call: grpc_1.ServerUnaryCall<Event, Result>,\n      callback: grpc_1.sendUnaryData<Result>,\n    ): void;\n    abstract SendEventsStream(call: grpc_1.ServerDuplexStream<Event, Result>): void;\n    abstract SubscribeToEvents(call: grpc_1.ServerWritableStream<Subscribe, EventReceive>): void;\n    abstract SubscribeToRequests(call: grpc_1.ServerWritableStream<Subscribe, Request>): void;\n    abstract SendRequest(\n      call: grpc_1.ServerUnaryCall<Request, Response>,\n      callback: grpc_1.sendUnaryData<Response>,\n    ): void;\n    abstract SendResponse(\n      call: grpc_1.ServerUnaryCall<Response, Empty>,\n      callback: grpc_1.sendUnaryData<Empty>,\n    ): void;\n    abstract SendQueueMessage(\n      call: grpc_1.ServerUnaryCall<QueueMessage, SendQueueMessageResult>,\n      callback: grpc_1.sendUnaryData<SendQueueMessageResult>,\n    ): void;\n    abstract SendQueueMessagesBatch(\n      call: grpc_1.ServerUnaryCall<QueueMessagesBatchRequest, QueueMessagesBatchResponse>,\n      callback: grpc_1.sendUnaryData<QueueMessagesBatchResponse>,\n    ): void;\n    abstract ReceiveQueueMessages(\n      call: grpc_1.ServerUnaryCall<ReceiveQueueMessagesRequest, ReceiveQueueMessagesResponse>,\n      callback: grpc_1.sendUnaryData<ReceiveQueueMessagesResponse>,\n    ): void;\n    abstract StreamQueueMessage(\n      call: grpc_1.ServerDuplexStream<StreamQueueMessagesRequest, StreamQueueMessagesResponse>,\n    ): void;\n    abstract AckAllQueueMessages(\n      call: grpc_1.ServerUnaryCall<AckAllQueueMessagesRequest, AckAllQueueMessagesResponse>,\n      callback: grpc_1.sendUnaryData<AckAllQueueMessagesResponse>,\n    ): void;\n    abstract Ping(\n      call: grpc_1.ServerUnaryCall<Empty, PingResult>,\n      callback: grpc_1.sendUnaryData<PingResult>,\n    ): void;\n    abstract QueuesDownstream(\n      call: grpc_1.ServerDuplexStream<QueuesDownstreamRequest, QueuesDownstreamResponse>,\n    ): void;\n    abstract QueuesUpstream(\n      call: grpc_1.ServerDuplexStream<QueuesUpstreamRequest, QueuesUpstreamResponse>,\n    ): void;\n  }\n  export class kubemqClient extends grpc_1.makeGenericClientConstructor(\n    UnimplementedkubemqService.definition,\n    'kubemq',\n    {},\n  ) {\n    constructor(\n      address: string,\n      credentials: grpc_1.ChannelCredentials,\n      options?: Partial<grpc_1.ChannelOptions>,\n    ) {\n      super(address, credentials, options);\n    }\n    SendEvent: GrpcUnaryServiceInterface<Event, Result> = (\n      message: Event,\n      metadata: grpc_1.Metadata | grpc_1.CallOptions | grpc_1.requestCallback<Result>,\n      options?: grpc_1.CallOptions | grpc_1.requestCallback<Result>,\n      callback?: grpc_1.requestCallback<Result>,\n    ): grpc_1.ClientUnaryCall => {\n      return super.SendEvent(message, metadata, options, callback);\n    };\n    SendEventsStream: GrpcChunkServiceInterface<Event, Result> = (\n      metadata?: grpc_1.Metadata | grpc_1.CallOptions,\n      options?: grpc_1.CallOptions,\n    ): grpc_1.ClientDuplexStream<Event, Result> => {\n      return super.SendEventsStream(metadata, options);\n    };\n    SubscribeToEvents: GrpcStreamServiceInterface<Subscribe, EventReceive> = (\n      message: Subscribe,\n      metadata?: grpc_1.Metadata | grpc_1.CallOptions,\n      options?: grpc_1.CallOptions,\n    ): grpc_1.ClientReadableStream<EventReceive> => {\n      return super.SubscribeToEvents(message, metadata, options);\n    };\n    SubscribeToRequests: GrpcStreamServiceInterface<Subscribe, Request> = (\n      message: Subscribe,\n      metadata?: grpc_1.Metadata | grpc_1.CallOptions,\n      options?: grpc_1.CallOptions,\n    ): grpc_1.ClientReadableStream<Request> => {\n      return super.SubscribeToRequests(message, metadata, options);\n    };\n    SendRequest: GrpcUnaryServiceInterface<Request, Response> = (\n      message: Request,\n      metadata: grpc_1.Metadata | grpc_1.CallOptions | grpc_1.requestCallback<Response>,\n      options?: grpc_1.CallOptions | grpc_1.requestCallback<Response>,\n      callback?: grpc_1.requestCallback<Response>,\n    ): grpc_1.ClientUnaryCall => {\n      return super.SendRequest(message, metadata, options, callback);\n    };\n    SendResponse: GrpcUnaryServiceInterface<Response, Empty> = (\n      message: Response,\n      metadata: grpc_1.Metadata | grpc_1.CallOptions | grpc_1.requestCallback<Empty>,\n      options?: grpc_1.CallOptions | grpc_1.requestCallback<Empty>,\n      callback?: grpc_1.requestCallback<Empty>,\n    ): grpc_1.ClientUnaryCall => {\n      return super.SendResponse(message, metadata, options, callback);\n    };\n    SendQueueMessage: GrpcUnaryServiceInterface<QueueMessage, SendQueueMessageResult> = (\n      message: QueueMessage,\n      metadata:\n        | grpc_1.Metadata\n        | grpc_1.CallOptions\n        | grpc_1.requestCallback<SendQueueMessageResult>,\n      options?: grpc_1.CallOptions | grpc_1.requestCallback<SendQueueMessageResult>,\n      callback?: grpc_1.requestCallback<SendQueueMessageResult>,\n    ): grpc_1.ClientUnaryCall => {\n      return super.SendQueueMessage(message, metadata, options, callback);\n    };\n    SendQueueMessagesBatch: GrpcUnaryServiceInterface<\n      QueueMessagesBatchRequest,\n      QueueMessagesBatchResponse\n    > = (\n      message: QueueMessagesBatchRequest,\n      metadata:\n        | grpc_1.Metadata\n        | grpc_1.CallOptions\n        | grpc_1.requestCallback<QueueMessagesBatchResponse>,\n      options?: grpc_1.CallOptions | grpc_1.requestCallback<QueueMessagesBatchResponse>,\n      callback?: grpc_1.requestCallback<QueueMessagesBatchResponse>,\n    ): grpc_1.ClientUnaryCall => {\n      return super.SendQueueMessagesBatch(message, metadata, options, callback);\n    };\n    ReceiveQueueMessages: GrpcUnaryServiceInterface<\n      ReceiveQueueMessagesRequest,\n      ReceiveQueueMessagesResponse\n    > = (\n      message: ReceiveQueueMessagesRequest,\n      metadata:\n        | grpc_1.Metadata\n        | grpc_1.CallOptions\n        | grpc_1.requestCallback<ReceiveQueueMessagesResponse>,\n      options?: grpc_1.CallOptions | grpc_1.requestCallback<ReceiveQueueMessagesResponse>,\n      callback?: grpc_1.requestCallback<ReceiveQueueMessagesResponse>,\n    ): grpc_1.ClientUnaryCall => {\n      return super.ReceiveQueueMessages(message, metadata, options, callback);\n    };\n    StreamQueueMessage: GrpcChunkServiceInterface<\n      StreamQueueMessagesRequest,\n      StreamQueueMessagesResponse\n    > = (\n      metadata?: grpc_1.Metadata | grpc_1.CallOptions,\n      options?: grpc_1.CallOptions,\n    ): grpc_1.ClientDuplexStream<StreamQueueMessagesRequest, StreamQueueMessagesResponse> => {\n      return super.StreamQueueMessage(metadata, options);\n    };\n    AckAllQueueMessages: GrpcUnaryServiceInterface<\n      AckAllQueueMessagesRequest,\n      AckAllQueueMessagesResponse\n    > = (\n      message: AckAllQueueMessagesRequest,\n      metadata:\n        | grpc_1.Metadata\n        | grpc_1.CallOptions\n        | grpc_1.requestCallback<AckAllQueueMessagesResponse>,\n      options?: grpc_1.CallOptions | grpc_1.requestCallback<AckAllQueueMessagesResponse>,\n      callback?: grpc_1.requestCallback<AckAllQueueMessagesResponse>,\n    ): grpc_1.ClientUnaryCall => {\n      return super.AckAllQueueMessages(message, metadata, options, callback);\n    };\n    Ping: GrpcUnaryServiceInterface<Empty, PingResult> = (\n      message: Empty,\n      metadata: grpc_1.Metadata | grpc_1.CallOptions | grpc_1.requestCallback<PingResult>,\n      options?: grpc_1.CallOptions | grpc_1.requestCallback<PingResult>,\n      callback?: grpc_1.requestCallback<PingResult>,\n    ): grpc_1.ClientUnaryCall => {\n      return super.Ping(message, metadata, options, callback);\n    };\n    QueuesDownstream: GrpcChunkServiceInterface<QueuesDownstreamRequest, QueuesDownstreamResponse> =\n      (\n        metadata?: grpc_1.Metadata | grpc_1.CallOptions,\n        options?: grpc_1.CallOptions,\n      ): grpc_1.ClientDuplexStream<QueuesDownstreamRequest, QueuesDownstreamResponse> => {\n        return super.QueuesDownstream(metadata, options);\n      };\n    QueuesUpstream: GrpcChunkServiceInterface<QueuesUpstreamRequest, QueuesUpstreamResponse> = (\n      metadata?: grpc_1.Metadata | grpc_1.CallOptions,\n      options?: grpc_1.CallOptions,\n    ): grpc_1.ClientDuplexStream<QueuesUpstreamRequest, QueuesUpstreamResponse> => {\n      return super.QueuesUpstream(metadata, options);\n    };\n  }\n}\n","import type { Logger } from './logger.js';\nimport type { CredentialProvider } from './auth/credential-provider.js';\n\n/**\n * Jitter strategy applied to retry and reconnection backoff delays.\n *\n * @remarks\n * - `'full'` — Uniform random jitter in `[0, computedDelay]`. Best general-purpose choice.\n * - `'equal'` — Half the computed delay is fixed, the other half is randomized.\n * - `'none'` — No jitter; uses the raw exponential delay. Risk of thundering-herd.\n *\n * @see {@link RetryPolicy}\n * @see {@link ReconnectionPolicy}\n */\nexport type JitterType = 'full' | 'equal' | 'none';\n\n/**\n * Policy governing automatic retries for failed operations.\n *\n * @remarks\n * Applied to all retriable SDK operations (publish, send, queue send, etc.).\n * The actual delay between retries is computed as\n * `min(initialBackoffMs * multiplier^attempt, maxBackoffMs)`, then jittered\n * according to the {@link JitterType} strategy.\n *\n * @see {@link DEFAULT_RETRY_POLICY}\n * @see {@link ClientOptions.retry}\n */\nexport interface RetryPolicy {\n  /** Maximum number of retry attempts before throwing {@link RetryExhaustedError}. */\n  readonly maxRetries: number;\n  /** Base delay in milliseconds for the first retry. */\n  readonly initialBackoffMs: number;\n  /** Upper bound on the computed backoff delay in milliseconds. */\n  readonly maxBackoffMs: number;\n  /** Exponential multiplier applied to the backoff after each attempt. */\n  readonly multiplier: number;\n  /** Jitter strategy to reduce retry contention. */\n  readonly jitter: JitterType;\n}\n\nexport const DEFAULT_RETRY_POLICY: Readonly<RetryPolicy> = Object.freeze({\n  maxRetries: 3,\n  initialBackoffMs: 500,\n  maxBackoffMs: 30_000,\n  multiplier: 2.0,\n  jitter: 'full' as const,\n});\n\nexport const DEFAULT_KEEPALIVE: Readonly<KeepaliveOptions> = Object.freeze({\n  timeMs: 10_000,\n  timeoutMs: 5_000,\n  permitWithoutCalls: true,\n});\n\nexport const DEFAULT_RECONNECTION_POLICY: Readonly<ReconnectionPolicy> = Object.freeze({\n  maxAttempts: -1,\n  initialDelayMs: 500,\n  maxDelayMs: 30_000,\n  multiplier: 2.0,\n  jitter: 'full' as const,\n});\n\nexport const DEFAULT_CONNECTION_TIMEOUT_MS = 10_000;\nexport const DEFAULT_MAX_MESSAGE_SIZE = 104_857_600;\nexport const DEFAULT_RECONNECT_BUFFER_SIZE = 8_388_608;\n\nexport const DEFAULT_SEND_TIMEOUT_MS = 5000;\nexport const DEFAULT_SUBSCRIBE_TIMEOUT_MS = 10_000;\nexport const DEFAULT_RPC_TIMEOUT_MS = 10_000;\nexport const DEFAULT_QUEUE_RECEIVE_TIMEOUT_MS = 10_000;\nexport const DEFAULT_QUEUE_POLL_TIMEOUT_MS = 30_000;\nexport const DEFAULT_MAX_CONCURRENT_RETRIES = 10;\n\n/**\n * Policy governing automatic reconnection when the gRPC transport disconnects.\n *\n * @remarks\n * When the connection drops, the client enters `RECONNECTING` state and\n * attempts to re-establish the connection using exponential backoff with jitter.\n * Set `maxAttempts` to `-1` for unlimited reconnection attempts.\n *\n * Active subscriptions are automatically re-established after a successful\n * reconnection. Buffered messages (if `reconnectBufferSize > 0`) are replayed.\n *\n * @see {@link DEFAULT_RECONNECTION_POLICY}\n * @see {@link ClientOptions.reconnect}\n * @see {@link ConnectionState}\n */\nexport interface ReconnectionPolicy {\n  /** Maximum reconnection attempts. Use `-1` for unlimited. */\n  readonly maxAttempts: number;\n  /** Base delay in milliseconds for the first reconnection attempt. */\n  readonly initialDelayMs: number;\n  /** Upper bound on the computed reconnection delay in milliseconds. */\n  readonly maxDelayMs: number;\n  /** Exponential multiplier applied to the delay after each attempt. */\n  readonly multiplier: number;\n  /** Jitter strategy to reduce reconnection contention across clients. */\n  readonly jitter: JitterType;\n}\n\n/**\n * TLS/SSL configuration for encrypting the gRPC connection.\n *\n * @remarks\n * Set `enabled: true` (or pass `tls: true` in {@link ClientOptions}) for\n * server-authenticated TLS. For mutual TLS (mTLS), also provide `clientCert`\n * and `clientKey`. Certificate values accept PEM-encoded strings or raw Buffers.\n *\n * @see {@link ClientOptions.tls}\n */\nexport interface TlsOptions {\n  /** Whether TLS is enabled. Defaults to `false`. */\n  enabled?: boolean;\n  /** PEM-encoded CA certificate or bundle for server verification. */\n  caCert?: string | Buffer;\n  /** PEM-encoded client certificate for mutual TLS. */\n  clientCert?: string | Buffer;\n  /** PEM-encoded client private key for mutual TLS. */\n  clientKey?: string | Buffer;\n  /** Override the server name used for certificate verification. */\n  serverNameOverride?: string;\n  /** Skip server certificate verification. **Insecure — use only for development.** */\n  insecureSkipVerify?: boolean;\n  /** Minimum TLS version to accept. */\n  minVersion?: 'TLSv1.2' | 'TLSv1.3';\n}\n\n/**\n * gRPC HTTP/2 keepalive configuration.\n *\n * @remarks\n * Keepalive pings prevent idle connections from being silently dropped\n * by firewalls or load balancers. The defaults are tuned for most\n * cloud environments (10s ping interval, 5s timeout).\n *\n * @see {@link DEFAULT_KEEPALIVE}\n * @see {@link ClientOptions.keepalive}\n */\nexport interface KeepaliveOptions {\n  /** Interval in milliseconds between keepalive pings. */\n  readonly timeMs: number;\n  /** Time in milliseconds to wait for a keepalive ping response before closing. */\n  readonly timeoutMs: number;\n  /** Whether to send pings even when there are no active RPCs. */\n  readonly permitWithoutCalls: boolean;\n}\n\n/**\n * Options for individual async operations.\n *\n * @remarks\n * Pass to any async method on `KubeMQClient` to control cancellation\n * and timeout behavior for that specific operation.\n */\nexport interface OperationOptions {\n  /**\n   * AbortSignal for cooperative cancellation.\n   * When aborted, the operation is cancelled and throws `CancellationError`.\n   *\n   * @example\n   * ```typescript\n   * const controller = new AbortController();\n   * setTimeout(() => controller.abort(), 5000);\n   * await client.sendEvent(msg, { signal: controller.signal });\n   * ```\n   */\n  signal?: AbortSignal;\n\n  /**\n   * Operation timeout in milliseconds.\n   * Overrides the client-level default timeout for this operation.\n   * When exceeded, throws `KubeMQTimeoutError`.\n   */\n  timeout?: number;\n}\n\n/**\n * Options for subscription operations, extending OperationOptions.\n */\nexport interface SubscriptionOptions extends OperationOptions {\n  /**\n   * Maximum number of concurrent callback invocations.\n   * Default varies by subscription type: events=100, events_store=20, commands/queries=1.\n   * Set to a higher value for parallel message processing.\n   *\n   * @remarks\n   * When > 1, messages are dispatched to the callback concurrently\n   * using an internal semaphore. Message ordering is NOT guaranteed\n   * when concurrency > 1. Use 1 for ordered processing.\n   */\n  maxConcurrentCallbacks?: number;\n\n  /**\n   * Maximum internal queue depth before backpressure is applied.\n   * Default: 1000.\n   */\n  maxQueueDepth?: number;\n\n  /**\n   * If true, drop messages when the internal queue is full instead of\n   * pausing the gRPC stream. Useful for pub/sub patterns where message\n   * loss is acceptable but stream stalls are not. Default: false.\n   */\n  dropOnHighWater?: boolean;\n}\n\n/**\n * Options for the `close()` method.\n */\nexport interface CloseOptions {\n  /**\n   * Max time to wait for in-flight gRPC operations to drain, in seconds.\n   * Default: 5.\n   */\n  timeoutSeconds?: number;\n\n  /**\n   * Max time to wait for in-flight subscription callbacks to complete, in seconds.\n   * Default: 30.\n   *\n   * Callbacks that haven't completed within this timeout are abandoned —\n   * they may still be running in the background but the client will\n   * proceed to close.\n   */\n  callbackTimeoutSeconds?: number;\n}\n\n/**\n * Configuration options for creating a {@link KubeMQClient}.\n *\n * @remarks\n * Only `address` is required. All other options have sensible defaults.\n * Pass to {@link KubeMQClient.create} to build a connected client.\n *\n * @example\n * ```typescript\n * const client = await KubeMQClient.create({\n *   address: 'localhost:50000',\n *   clientId: 'order-service',\n *   logger: createConsoleLogger('info'),\n *   retry: { ...DEFAULT_RETRY_POLICY, maxRetries: 5 },\n * });\n * ```\n *\n * @see {@link KubeMQClient.create}\n */\nexport interface ClientOptions {\n  /** KubeMQ server address in `host:port` format. */\n  address: string;\n  /** Unique client identifier. Auto-generated UUID if omitted. */\n  clientId?: string;\n  /** Authentication credentials — a token string or a {@link CredentialProvider}. */\n  credentials?: CredentialProvider | string;\n  /** TLS configuration. Pass `true` for default TLS, or a {@link TlsOptions} object. */\n  tls?: TlsOptions | boolean;\n  /** HTTP/2 keepalive settings. Uses {@link DEFAULT_KEEPALIVE} if omitted. */\n  keepalive?: KeepaliveOptions;\n  /** Retry policy for failed operations. Uses {@link DEFAULT_RETRY_POLICY} if omitted. */\n  retry?: RetryPolicy;\n  /** Reconnection policy for dropped connections. Uses {@link DEFAULT_RECONNECTION_POLICY} if omitted. */\n  reconnect?: ReconnectionPolicy;\n  /** Maximum time in seconds to wait for the initial connection. Default: 10. */\n  connectionTimeoutSeconds?: number;\n  /** Maximum inbound message size in bytes. Default: {@link DEFAULT_MAX_MESSAGE_SIZE} (100 MiB). */\n  maxReceiveMessageSize?: number;\n  /** Maximum outbound message size in bytes. Default: {@link DEFAULT_MAX_MESSAGE_SIZE} (100 MiB). */\n  maxSendMessageSize?: number;\n  /** Block until the gRPC channel is ready instead of failing fast. */\n  waitForReady?: boolean;\n  /** Structured logger implementation. Default: silent no-op logger. */\n  logger?: Logger;\n  /** OpenTelemetry TracerProvider for distributed tracing. */\n  tracerProvider?: unknown;\n  /** OpenTelemetry MeterProvider for metrics collection. */\n  meterProvider?: unknown;\n  /** Size in bytes of the in-memory buffer for messages sent during reconnection. Default: {@link DEFAULT_RECONNECT_BUFFER_SIZE}. */\n  reconnectBufferSize?: number;\n  /** Behavior when the reconnect buffer is full: `'error'` throws {@link BufferFullError}, `'block'` waits. */\n  reconnectBufferMode?: 'error' | 'block';\n  /** Maximum number of concurrent retry operations across all calls. Default: {@link DEFAULT_MAX_CONCURRENT_RETRIES}. */\n  maxConcurrentRetries?: number;\n  /** Default timeout in seconds for publish/send operations. Default: 5. */\n  defaultSendTimeoutSeconds?: number;\n  /** Default timeout in seconds for subscribe operations. Default: 10. */\n  defaultSubscribeTimeoutSeconds?: number;\n  /** Default timeout in seconds for RPC (command/query) operations. Default: 10. */\n  defaultRpcTimeoutSeconds?: number;\n  /** Default timeout in seconds for queue receive operations. Default: 10. */\n  defaultQueueReceiveTimeoutSeconds?: number;\n  /** Default timeout in seconds for queue poll operations. Default: 30. */\n  defaultQueuePollTimeoutSeconds?: number;\n}\n","/** @internal */\n\nimport { EventEmitter } from 'node:events';\nimport type { ConnectionState } from './connection-state.js';\n\n/**\n * Typed event map for {@link KubeMQClient.on} and {@link KubeMQClient.off}.\n *\n * @remarks\n * Subscribe to connection lifecycle events to implement custom monitoring,\n * health checks, or reconnection logging.\n *\n * @see {@link KubeMQClient.on}\n * @see {@link KubeMQClient.off}\n * @see {@link ConnectionState}\n */\n// eslint-disable-next-line @typescript-eslint/consistent-type-definitions\nexport type ConnectionEventMap = {\n  /** Fired when the initial connection is established. */\n  connected: () => void;\n  /** Fired when the connection is lost. */\n  disconnected: () => void;\n  /** Fired on each reconnection attempt, with the attempt number. */\n  reconnecting: (attempt: number) => void;\n  /** Fired when the connection is successfully re-established. */\n  reconnected: () => void;\n  /** Fired when the client is permanently closed. */\n  closed: () => void;\n  /** Fired when reconnect-buffered messages are discarded. */\n  bufferDrain: (discardedCount: number) => void;\n  /** Fired on every connection state transition. */\n  stateChange: (state: ConnectionState) => void;\n};\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\nexport interface TypedEventEmitter<TEvents extends Record<string, (...args: any[]) => void>> {\n  on<K extends keyof TEvents & string>(event: K, listener: TEvents[K]): this;\n  once<K extends keyof TEvents & string>(event: K, listener: TEvents[K]): this;\n  off<K extends keyof TEvents & string>(event: K, listener: TEvents[K]): this;\n  emit<K extends keyof TEvents & string>(event: K, ...args: Parameters<TEvents[K]>): boolean;\n}\n\nexport class SafeEventEmitter<TEvents extends Record<string, (...args: any[]) => void>>\n  extends EventEmitter\n  implements TypedEventEmitter<TEvents>\n{\n  #logger?: { warn(msg: string, fields?: Record<string, unknown>): void };\n\n  setLogger(logger: { warn(msg: string, fields?: Record<string, unknown>): void }): void {\n    this.#logger = logger;\n  }\n\n  override emit<K extends keyof TEvents & string>(\n    event: K,\n    ...args: Parameters<TEvents[K]>\n  ): boolean {\n    try {\n      return super.emit(event, ...args);\n    } catch (err: unknown) {\n      this.#logger?.warn('Event handler threw an exception', {\n        event,\n        error: err instanceof Error ? err.message : String(err),\n      });\n      return false;\n    }\n  }\n}\n/* eslint-enable @typescript-eslint/no-explicit-any */\n","/** @internal */\n\nimport { ConnectionState, isValidTransition } from './connection-state.js';\nimport { SafeEventEmitter } from './typed-emitter.js';\nimport type { ConnectionEventMap } from './typed-emitter.js';\nimport type { Logger } from '../../logger.js';\n\nexport class ConnectionStateMachine {\n  private _state: ConnectionState = ConnectionState.IDLE;\n  private readonly emitter: SafeEventEmitter<ConnectionEventMap>;\n  private readonly logger: Logger;\n\n  constructor(logger: Logger) {\n    this.emitter = new SafeEventEmitter();\n    this.emitter.setLogger(logger);\n    this.logger = logger;\n  }\n\n  get state(): ConnectionState {\n    return this._state;\n  }\n\n  transitionTo(\n    newState: ConnectionState,\n    meta?: { attempt?: number; discardedCount?: number },\n  ): void {\n    const oldState = this._state;\n    if (!isValidTransition(oldState, newState)) {\n      this.logger.warn('Invalid state transition attempted', {\n        from: oldState,\n        to: newState,\n      });\n      return;\n    }\n\n    this._state = newState;\n    this.logger.info('Connection state changed', { from: oldState, to: newState });\n\n    queueMicrotask(() => {\n      this.emitter.emit('stateChange', newState);\n\n      switch (newState) {\n        case ConnectionState.READY:\n          if (oldState === ConnectionState.CONNECTING) {\n            this.emitter.emit('connected');\n          } else if (oldState === ConnectionState.RECONNECTING) {\n            this.emitter.emit('reconnected');\n          }\n          break;\n        case ConnectionState.RECONNECTING:\n          if (oldState !== ConnectionState.RECONNECTING) {\n            this.emitter.emit('disconnected');\n          }\n          this.emitter.emit('reconnecting', meta?.attempt ?? 0);\n          break;\n        case ConnectionState.CLOSED:\n          if (meta?.discardedCount !== undefined && meta.discardedCount > 0) {\n            this.emitter.emit('bufferDrain', meta.discardedCount);\n          }\n          this.emitter.emit('closed');\n          break;\n      }\n    });\n  }\n\n  on<K extends keyof ConnectionEventMap>(event: K, listener: ConnectionEventMap[K]): void {\n    this.emitter.on(event, listener);\n  }\n\n  off<K extends keyof ConnectionEventMap>(event: K, listener: ConnectionEventMap[K]): void {\n    this.emitter.off(event, listener);\n  }\n}\n","/** @internal */\n\nimport type { ReconnectionPolicy } from '../../options.js';\nimport type { Logger } from '../../logger.js';\nimport { ConnectionState } from './connection-state.js';\nimport type { ConnectionStateMachine } from './connection-state-machine.js';\n\nexport interface ReconnectionContext {\n  attempt: number;\n  delayMs: number;\n  elapsedMs: number;\n}\n\nexport class ReconnectionManager {\n  private readonly policy: Readonly<ReconnectionPolicy>;\n  private readonly logger: Logger;\n  private readonly stateMachine: ConnectionStateMachine;\n  private abortController: AbortController | null = null;\n  private attempt = 0;\n  private startTime = 0;\n\n  constructor(policy: ReconnectionPolicy, stateMachine: ConnectionStateMachine, logger: Logger) {\n    this.policy = Object.freeze({ ...policy });\n    this.stateMachine = stateMachine;\n    this.logger = logger;\n  }\n\n  async reconnect(connectFn: () => Promise<void>): Promise<void> {\n    this.attempt = 0;\n    this.startTime = Date.now();\n    this.abortController = new AbortController();\n\n    while (!this.isExhausted() && !this.abortController.signal.aborted) {\n      this.attempt++;\n      const delayMs = this.calculateDelay();\n\n      this.logger.info('Reconnection attempt', {\n        attempt: this.attempt,\n        delayMs,\n        maxAttempts: this.policy.maxAttempts,\n      });\n\n      this.stateMachine.transitionTo(ConnectionState.RECONNECTING, {\n        attempt: this.attempt,\n      });\n\n      await this.sleep(delayMs);\n      // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- may be aborted during sleep\n      if (this.abortController.signal.aborted) break;\n\n      try {\n        await connectFn();\n        this.logger.info('Reconnection successful', { attempt: this.attempt });\n        this.reset();\n        this.stateMachine.transitionTo(ConnectionState.READY);\n        return;\n      } catch (err: unknown) {\n        this.logger.warn('Reconnection attempt failed', {\n          attempt: this.attempt,\n          error: err instanceof Error ? err.message : String(err),\n        });\n      }\n    }\n\n    if (!this.abortController.signal.aborted) {\n      this.logger.error('Reconnection exhausted', {\n        attempts: this.attempt,\n        elapsedMs: Date.now() - this.startTime,\n      });\n    }\n  }\n\n  cancel(): void {\n    this.abortController?.abort();\n  }\n\n  private reset(): void {\n    this.attempt = 0;\n    this.startTime = 0;\n    this.abortController = null;\n  }\n\n  private isExhausted(): boolean {\n    if (this.policy.maxAttempts === -1) return false;\n    return this.attempt >= this.policy.maxAttempts;\n  }\n\n  private calculateDelay(): number {\n    const baseDelay = Math.min(\n      this.policy.initialDelayMs * Math.pow(this.policy.multiplier, this.attempt - 1),\n      this.policy.maxDelayMs,\n    );\n\n    switch (this.policy.jitter) {\n      case 'full':\n        return Math.random() * baseDelay;\n      case 'equal':\n        return baseDelay / 2 + Math.random() * (baseDelay / 2);\n      case 'none':\n        return baseDelay;\n    }\n  }\n\n  private sleep(ms: number): Promise<void> {\n    return new Promise((resolve) => {\n      if (this.abortController?.signal.aborted) {\n        resolve();\n        return;\n      }\n      const timer = setTimeout(resolve, ms);\n      if (typeof timer === 'object' && 'unref' in timer) {\n        timer.unref();\n      }\n      this.abortController?.signal.addEventListener(\n        'abort',\n        () => {\n          clearTimeout(timer);\n          resolve();\n        },\n        { once: true },\n      );\n    });\n  }\n}\n","/** @internal */\n\nimport { BufferFullError, ErrorCode } from '../../errors.js';\nimport type { Logger } from '../../logger.js';\n\nexport interface BufferedMessage {\n  data: Uint8Array;\n  operation: string;\n  channel: string;\n  resolve: (value: unknown) => void;\n  reject: (reason: unknown) => void;\n  bufferedAt: number;\n}\n\nexport class MessageBuffer {\n  private readonly maxSizeBytes: number;\n  private readonly mode: 'error' | 'block';\n  private readonly logger: Logger;\n  private readonly queue: BufferedMessage[] = [];\n  private currentSizeBytes = 0;\n  private drainWaiters: { resolve: () => void; reject: (err: Error) => void }[] = [];\n\n  constructor(maxSizeBytes: number, mode: 'error' | 'block', logger: Logger) {\n    this.maxSizeBytes = maxSizeBytes;\n    this.mode = mode;\n    this.logger = logger;\n  }\n\n  get size(): number {\n    return this.queue.length;\n  }\n\n  get sizeBytes(): number {\n    return this.currentSizeBytes;\n  }\n\n  async enqueue(msg: BufferedMessage): Promise<void> {\n    const msgSize = msg.data.byteLength;\n\n    while (this.currentSizeBytes + msgSize > this.maxSizeBytes) {\n      if (this.mode === 'error') {\n        throw new BufferFullError({\n          code: ErrorCode.BufferFull,\n          message: `Reconnection buffer full (${String(this.currentSizeBytes)}/${String(this.maxSizeBytes)} bytes). Message dropped.`,\n          operation: msg.operation,\n          channel: msg.channel,\n          isRetryable: false,\n          suggestion: 'Increase reconnectBufferSize or switch to reconnectBufferMode: \"block\"',\n        });\n      }\n      await new Promise<void>((resolve, reject) => {\n        this.drainWaiters.push({ resolve, reject });\n      });\n    }\n\n    this.queue.push(msg);\n    this.currentSizeBytes += msgSize;\n    this.logger.debug('Message buffered', {\n      operation: msg.operation,\n      channel: msg.channel,\n      bufferSize: this.currentSizeBytes,\n      bufferCount: this.queue.length,\n    });\n  }\n\n  async flush(sendFn: (msg: BufferedMessage) => Promise<void>): Promise<number> {\n    let flushed = 0;\n    while (this.queue.length > 0) {\n      const msg = this.queue.shift();\n      if (!msg) break;\n      this.currentSizeBytes -= msg.data.byteLength;\n      try {\n        await sendFn(msg);\n        flushed++;\n      } catch (err: unknown) {\n        msg.reject(err);\n      }\n    }\n\n    for (const waiter of this.drainWaiters) {\n      waiter.resolve();\n    }\n    this.drainWaiters = [];\n\n    this.logger.info('Buffer flushed', { messagesFlushed: flushed });\n    return flushed;\n  }\n\n  rejectAll(err: Error): void {\n    const waiters = this.drainWaiters;\n    this.drainWaiters = [];\n    for (const waiter of waiters) {\n      waiter.reject(err);\n    }\n  }\n\n  discard(): number {\n    const count = this.queue.length;\n    for (const msg of this.queue) {\n      msg.reject(\n        new BufferFullError({\n          code: ErrorCode.BufferFull,\n          message: 'Connection closed — buffered message discarded',\n          operation: msg.operation,\n          channel: msg.channel,\n          isRetryable: false,\n        }),\n      );\n    }\n    this.queue.length = 0;\n    this.currentSizeBytes = 0;\n\n    this.rejectAll(\n      new BufferFullError({\n        code: ErrorCode.BufferFull,\n        message: 'Buffer discarded — connection closed',\n        operation: 'buffer.discard',\n        isRetryable: false,\n      }),\n    );\n\n    if (count > 0) {\n      this.logger.warn('Buffer discarded', { discardedCount: count });\n    }\n    return count;\n  }\n}\n","/** @internal */\n\nexport class InFlightTracker {\n  private readonly pending = new Set<Promise<unknown>>();\n\n  track<T>(promise: Promise<T>): Promise<T> {\n    this.pending.add(promise);\n    const cleanup = (): void => {\n      this.pending.delete(promise);\n    };\n    promise.then(cleanup, cleanup);\n    return promise;\n  }\n\n  async waitForAll(): Promise<void> {\n    await Promise.allSettled([...this.pending]);\n  }\n\n  get count(): number {\n    return this.pending.size;\n  }\n}\n","/** @internal */\n\nexport interface TrackedSubscription {\n  readonly id: string;\n  readonly pattern: 'events' | 'events-store' | 'commands' | 'queries' | 'queue-stream';\n  readonly channel: string;\n  readonly group?: string;\n  lastSequence?: number;\n  resubscribe: () => void;\n}\n\nexport class SubscriptionTracker {\n  private readonly subscriptions = new Map<string, TrackedSubscription>();\n\n  register(sub: TrackedSubscription): void {\n    this.subscriptions.set(sub.id, sub);\n  }\n\n  unregister(id: string): void {\n    this.subscriptions.delete(id);\n  }\n\n  get(id: string): TrackedSubscription | undefined {\n    return this.subscriptions.get(id);\n  }\n\n  updateSequence(id: string, sequence: number): void {\n    const sub = this.subscriptions.get(id);\n    if (sub?.pattern === 'events-store') {\n      sub.lastSequence = sequence;\n    }\n  }\n\n  resubscribeAll(): void {\n    for (const sub of this.subscriptions.values()) {\n      sub.resubscribe();\n    }\n  }\n\n  get count(): number {\n    return this.subscriptions.size;\n  }\n\n  clear(): void {\n    this.subscriptions.clear();\n  }\n}\n","/**\n * Structured logging interface. Users inject their preferred logger\n * (pino, winston, bunyan, etc.) via ClientOptions.\n *\n * Default: noopLogger — zero output unless configured.\n */\nexport interface Logger {\n  debug(msg: string, fields?: Record<string, unknown>): void;\n  info(msg: string, fields?: Record<string, unknown>): void;\n  warn(msg: string, fields?: Record<string, unknown>): void;\n  error(msg: string, fields?: Record<string, unknown>): void;\n}\n\n/** Structured key-value context attached to log entries. */\nexport type LogContext = Record<string, unknown>;\n\n/** Log severity levels. 'off' disables all output. */\nexport type LogLevel = 'debug' | 'info' | 'warn' | 'error' | 'off';\n\n/**\n * Default no-op logger. All methods are empty — zero overhead,\n * zero output. Users replace this via ClientOptions.logger.\n */\nexport const noopLogger: Logger = {\n  debug() {\n    /* noop */\n  },\n  info() {\n    /* noop */\n  },\n  warn() {\n    /* noop */\n  },\n  error() {\n    /* noop */\n  },\n};\n\nconst LOG_LEVEL_PRIORITY: Readonly<Record<LogLevel, number>> = {\n  debug: 0,\n  info: 1,\n  warn: 2,\n  error: 3,\n  off: 4,\n};\n\n/**\n * Creates a console-based logger filtered by level.\n * Intended for development/debugging — NOT used internally by the SDK.\n *\n * @example\n * ```ts\n * import { createConsoleLogger } from 'kubemq-js';\n *\n * const client = await KubeMQClient.create({\n *   address: 'localhost:50000',\n *   logger: createConsoleLogger('debug'),\n * });\n * ```\n */\nexport function createConsoleLogger(level: LogLevel): Logger {\n  if (level === 'off') {\n    return noopLogger;\n  }\n\n  const threshold = LOG_LEVEL_PRIORITY[level];\n\n  function emit(\n    severity: Exclude<LogLevel, 'off'>,\n    consoleFn: (...args: unknown[]) => void,\n    msg: string,\n    fields?: LogContext,\n  ): void {\n    if (LOG_LEVEL_PRIORITY[severity] < threshold) {\n      return;\n    }\n    if (fields !== undefined && Object.keys(fields).length > 0) {\n      consoleFn(`[${severity.toUpperCase()}] ${msg}`, fields);\n    } else {\n      consoleFn(`[${severity.toUpperCase()}] ${msg}`);\n    }\n  }\n\n  return {\n    /* eslint-disable no-console */\n    debug(msg: string, fields?: LogContext): void {\n      emit('debug', console.debug, msg, fields);\n    },\n    info(msg: string, fields?: LogContext): void {\n      emit('info', console.info, msg, fields);\n    },\n    warn(msg: string, fields?: LogContext): void {\n      emit('warn', console.warn, msg, fields);\n    },\n    error(msg: string, fields?: LogContext): void {\n      emit('error', console.error, msg, fields);\n    },\n    /* eslint-enable no-console */\n  };\n}\n","import { ValidationError, ErrorCode } from '../errors.js';\n\n/**\n * Pluggable credential provider interface for authentication.\n *\n * Implementations must be safe for concurrent invocation from\n * the event loop (the SDK serializes calls, but user code may not).\n *\n * The SDK caches the returned token and re-invokes the provider only when:\n * - No cached token exists\n * - The cached token is invalidated by a server UNAUTHENTICATED response\n * - Proactive refresh determines the token is approaching expiry\n *\n * At most one outstanding getToken() call is in flight at any time.\n */\nexport interface CredentialProvider {\n  getToken(): Promise<{ token: string; expiresAt?: Date }>;\n}\n\n/**\n * Simple credential provider that returns a fixed authentication token.\n *\n * @remarks\n * Suitable for development or environments where tokens do not expire.\n * For production with rotating tokens, implement a custom {@link CredentialProvider}.\n *\n * Passing a plain string to {@link ClientOptions.credentials} automatically\n * wraps it in a `StaticTokenProvider`.\n *\n * @see {@link CredentialProvider}\n * @see {@link ClientOptions.credentials}\n */\nexport class StaticTokenProvider implements CredentialProvider {\n  readonly #token: string;\n\n  constructor(token: string) {\n    if (!token) {\n      throw new ValidationError({\n        code: ErrorCode.ValidationFailed,\n        message: 'Static token must not be empty',\n        operation: 'StaticTokenProvider.constructor',\n        isRetryable: false,\n        suggestion: 'Provide a non-empty authentication token.',\n      });\n    }\n    this.#token = token;\n  }\n\n  getToken(): Promise<{ token: string; expiresAt?: Date }> {\n    return Promise.resolve({ token: this.#token });\n  }\n\n  toString(): string {\n    return 'StaticTokenProvider { tokenPresent: true }';\n  }\n\n  toJSON(): Record<string, unknown> {\n    return { type: 'StaticTokenProvider', tokenPresent: true };\n  }\n}\n\n/**\n * Resolve credentials from ClientOptions into a CredentialProvider.\n * String values are auto-wrapped in StaticTokenProvider.\n */\nexport function resolveCredentialProvider(\n  credentials: CredentialProvider | string | undefined,\n): CredentialProvider | undefined {\n  if (!credentials) return undefined;\n  if (typeof credentials === 'string') {\n    return new StaticTokenProvider(credentials);\n  }\n  return credentials;\n}\n","import type { CredentialProvider } from './credential-provider.js';\nimport type { Logger } from '../logger.js';\nimport { KubeMQError, AuthenticationError, TransientError, ErrorCode } from '../errors.js';\n\ninterface CachedToken {\n  token: string;\n  expiresAt?: Date;\n  fetchedAt: Date;\n}\n\nconst PROACTIVE_REFRESH_MARGIN_MS = 30_000;\n\nexport class TokenCache {\n  #cached: CachedToken | null = null;\n  #pending: Promise<CachedToken> | null = null;\n  #refreshTimer: ReturnType<typeof setTimeout> | null = null;\n  readonly #provider: CredentialProvider;\n  readonly #logger: Logger;\n\n  constructor(provider: CredentialProvider, logger: Logger) {\n    this.#provider = provider;\n    this.#logger = logger;\n  }\n\n  async getToken(): Promise<string> {\n    if (this.#cached && !this.#isExpired(this.#cached)) {\n      return this.#cached.token;\n    }\n    return (await this.#fetchToken()).token;\n  }\n\n  get lastKnownToken(): string | undefined {\n    if (this.#cached && !this.#isExpired(this.#cached)) {\n      return this.#cached.token;\n    }\n    return undefined;\n  }\n\n  invalidate(): void {\n    this.#cached = null;\n    this.#cancelRefreshTimer();\n    this.#logger.debug('Token cache invalidated');\n  }\n\n  dispose(): void {\n    this.#cancelRefreshTimer();\n    this.#cached = null;\n    this.#pending = null;\n  }\n\n  async #fetchToken(): Promise<CachedToken> {\n    if (this.#pending) {\n      return this.#pending;\n    }\n\n    this.#pending = this.#doFetch();\n    try {\n      return await this.#pending;\n    } finally {\n      this.#pending = null;\n    }\n  }\n\n  async #doFetch(): Promise<CachedToken> {\n    this.#logger.debug('Fetching token from credential provider', {\n      tokenPresent: !!this.#cached,\n    });\n\n    try {\n      const { token, expiresAt } = await this.#provider.getToken();\n\n      const cached: CachedToken = {\n        token,\n        expiresAt,\n        fetchedAt: new Date(),\n      };\n      this.#cached = cached;\n\n      if (expiresAt) {\n        this.#scheduleProactiveRefresh(expiresAt);\n      }\n\n      this.#logger.debug('Token fetched successfully', {\n        expiresAt: expiresAt?.toISOString(),\n        tokenPresent: true,\n      });\n\n      return cached;\n    } catch (err: unknown) {\n      this.#logger.error('Token fetch failed', {\n        error: err instanceof Error ? err.message : String(err),\n      });\n      throw this.#classifyProviderError(err);\n    }\n  }\n\n  #isExpired(cached: CachedToken): boolean {\n    if (!cached.expiresAt) return false;\n    return Date.now() >= cached.expiresAt.getTime();\n  }\n\n  #scheduleProactiveRefresh(expiresAt: Date): void {\n    this.#cancelRefreshTimer();\n\n    const refreshAt = expiresAt.getTime() - PROACTIVE_REFRESH_MARGIN_MS;\n    const delayMs = refreshAt - Date.now();\n\n    if (delayMs <= 0) {\n      this.#triggerProactiveRefresh();\n      return;\n    }\n\n    this.#refreshTimer = setTimeout(() => {\n      this.#triggerProactiveRefresh();\n    }, delayMs);\n\n    if (typeof this.#refreshTimer === 'object' && 'unref' in this.#refreshTimer) {\n      this.#refreshTimer.unref();\n    }\n  }\n\n  #triggerProactiveRefresh(): void {\n    this.#logger.debug('Proactive token refresh triggered');\n    this.#cached = null;\n    this.#refreshTimer = null;\n    this.#fetchToken().catch((err: unknown) => {\n      this.#logger.error('Proactive token refresh failed', {\n        error: err instanceof Error ? err.message : String(err),\n      });\n    });\n  }\n\n  #cancelRefreshTimer(): void {\n    if (this.#refreshTimer) {\n      clearTimeout(this.#refreshTimer);\n      this.#refreshTimer = null;\n    }\n  }\n\n  #classifyProviderError(err: unknown): KubeMQError {\n    if (err instanceof KubeMQError) return err;\n\n    const error = err instanceof Error ? err : new Error(String(err));\n\n    const isTransient =\n      (err as Record<string, unknown>).isTransient === true ||\n      error.message.includes('ECONNREFUSED') ||\n      error.message.includes('ETIMEDOUT') ||\n      error.message.includes('ENOTFOUND') ||\n      error.message.includes('network') ||\n      error.message.includes('unavailable');\n\n    if (isTransient) {\n      return new TransientError({\n        code: ErrorCode.Unavailable,\n        message: `Credential provider infrastructure error: ${error.message}`,\n        operation: 'CredentialProvider.getToken',\n        isRetryable: true,\n        cause: error,\n        suggestion: 'Check credential store connectivity.',\n      });\n    }\n\n    return new AuthenticationError({\n      code: ErrorCode.AuthFailed,\n      message: `Credential provider error: ${error.message}`,\n      operation: 'CredentialProvider.getToken',\n      isRetryable: false,\n      cause: error,\n      suggestion: 'Check credential provider configuration and credential validity.',\n    });\n  }\n}\n","import { readFile } from 'node:fs/promises';\nimport { normalize } from 'node:path';\nimport { X509Certificate } from 'node:crypto';\nimport type { TlsOptions } from '../options.js';\nimport type { Logger } from '../logger.js';\nimport { AuthenticationError, ConfigurationError, ErrorCode } from '../errors.js';\n\n// ─── Path Safety ────────────────────────────────────────────────────\n\n/**\n * Reject file paths containing traversal segments (`..`) to prevent\n * reading arbitrary files when cert paths are derived from untrusted input.\n */\nfunction assertSafePath(filePath: string): void {\n  const normalized = normalize(filePath);\n  if (normalized.includes('..')) {\n    throw new ConfigurationError({\n      code: ErrorCode.ConfigurationError,\n      message: `TLS file path must not contain path traversal segments: ${filePath}`,\n      operation: 'resolvePemOrPath',\n      isRetryable: false,\n      suggestion: 'Use an absolute path or a relative path without \"..\" segments.',\n    });\n  }\n}\n\n// ─── PEM Resolution ──────────────────────────────────────────────────\n\n/**\n * Resolve a cert/key input to a Buffer.\n * - Buffer → passthrough\n * - String starting with \"-----BEGIN\" → treat as inline PEM\n * - Otherwise → treat as file path and read from disk\n */\nexport async function resolvePemOrPath(input: string | Buffer): Promise<Buffer> {\n  if (Buffer.isBuffer(input)) {\n    return input;\n  }\n  if (input.trimStart().startsWith('-----BEGIN')) {\n    return Buffer.from(input, 'utf-8');\n  }\n  assertSafePath(input);\n  return readFile(input);\n}\n\n// ─── Localhost Detection ─────────────────────────────────────────────\n\nconst LOCALHOST_PATTERNS = new Set(['localhost', '127.0.0.1', '::1', '[::1]']);\n\nexport function isLocalhostAddress(address: string): boolean {\n  const host = extractHost(address);\n  return LOCALHOST_PATTERNS.has(host.toLowerCase());\n}\n\nfunction extractHost(address: string): string {\n  if (address.startsWith('[')) {\n    const closingBracket = address.indexOf(']');\n    return closingBracket > 0 ? address.slice(0, closingBracket + 1) : address;\n  }\n  const lastColon = address.lastIndexOf(':');\n  return lastColon > 0 ? address.slice(0, lastColon) : address;\n}\n\n// ─── Smart TLS Default ──────────────────────────────────────────────\n\nexport function resolveTlsEnabled(tls: TlsOptions | boolean | undefined, address: string): boolean {\n  if (typeof tls === 'boolean') return tls;\n  if (typeof tls === 'object' && tls.enabled !== undefined) return tls.enabled;\n  return !isLocalhostAddress(address);\n}\n\n/**\n * Normalize the tls option from ClientOptions into a concrete TlsOptions\n * object with `enabled` resolved.\n */\nexport function normalizeTlsOptions(\n  tls: TlsOptions | boolean | undefined,\n  address: string,\n): TlsOptions & { enabled: boolean } {\n  const enabled = resolveTlsEnabled(tls, address);\n  if (typeof tls === 'boolean' || tls === undefined) {\n    return { enabled };\n  }\n  return { ...tls, enabled };\n}\n\n// ─── TLS Version Validation ─────────────────────────────────────────\n\nconst ALLOWED_TLS_VERSIONS = new Set(['TLSv1.2', 'TLSv1.3']);\n\nexport function validateMinTlsVersion(minVersion: string | undefined): void {\n  const version = minVersion ?? 'TLSv1.2';\n  if (!ALLOWED_TLS_VERSIONS.has(version)) {\n    throw new ConfigurationError({\n      code: ErrorCode.ConfigurationError,\n      message: `Unsupported minimum TLS version: \"${String(minVersion)}\". Allowed: TLSv1.2, TLSv1.3`,\n      operation: 'createTransport',\n      isRetryable: false,\n      suggestion: 'Use \"TLSv1.2\" or \"TLSv1.3\" as the minimum TLS version.',\n    });\n  }\n}\n\n// ─── Certificate Validation ─────────────────────────────────────────\n\nexport async function validateCertificates(opts: TlsOptions, logger: Logger): Promise<void> {\n  if (opts.clientCert && !opts.clientKey) {\n    throw new ConfigurationError({\n      code: ErrorCode.ConfigurationError,\n      message: 'Client certificate provided without client key — both are required for mTLS',\n      operation: 'validateCertificates',\n      isRetryable: false,\n      suggestion: 'Provide both clientCert and clientKey for mTLS.',\n    });\n  }\n\n  if (!opts.clientCert && opts.clientKey) {\n    throw new ConfigurationError({\n      code: ErrorCode.ConfigurationError,\n      message: 'Client key provided without client certificate — both are required for mTLS',\n      operation: 'validateCertificates',\n      isRetryable: false,\n      suggestion: 'Provide both clientCert and clientKey for mTLS.',\n    });\n  }\n\n  if (opts.clientCert) {\n    const certPem = await resolvePemOrPath(opts.clientCert);\n    try {\n      const cert = new X509Certificate(certPem);\n      const now = new Date();\n      if (new Date(cert.validTo) < now) {\n        throw new AuthenticationError({\n          code: ErrorCode.AuthFailed,\n          message: `Client certificate expired on ${cert.validTo}`,\n          operation: 'validateCertificates',\n          isRetryable: false,\n          suggestion: `Renew the client certificate. It expired on ${cert.validTo}.`,\n        });\n      }\n      if (new Date(cert.validFrom) > now) {\n        throw new AuthenticationError({\n          code: ErrorCode.AuthFailed,\n          message: `Client certificate is not yet valid (valid from ${cert.validFrom})`,\n          operation: 'validateCertificates',\n          isRetryable: false,\n          suggestion: `Certificate becomes valid on ${cert.validFrom}. Check system clock.`,\n        });\n      }\n      logger.debug('Client certificate validated', {\n        subject: cert.subject,\n        validFrom: cert.validFrom,\n        validTo: cert.validTo,\n      });\n    } catch (err: unknown) {\n      if (err instanceof AuthenticationError) throw err;\n      throw new AuthenticationError({\n        code: ErrorCode.AuthFailed,\n        message: `Invalid client certificate: ${err instanceof Error ? err.message : String(err)}`,\n        operation: 'validateCertificates',\n        isRetryable: false,\n        cause: err instanceof Error ? err : undefined,\n        suggestion: 'Check that the certificate is valid PEM format.',\n      });\n    }\n  }\n\n  if (opts.clientKey) {\n    const keyPem = await resolvePemOrPath(opts.clientKey);\n    if (!keyPem.toString('utf-8').includes('-----BEGIN')) {\n      throw new AuthenticationError({\n        code: ErrorCode.AuthFailed,\n        message: 'Client private key does not appear to be PEM-encoded',\n        operation: 'validateCertificates',\n        isRetryable: false,\n        suggestion: 'Provide a PEM-encoded private key file or buffer.',\n      });\n    }\n  }\n\n  validateMinTlsVersion(opts.minVersion);\n}\n\n// ─── TLS Credential Source ───────────────────────────────────────────\n\nexport interface TlsCredentialSource {\n  readonly options: TlsOptions;\n  readonly logger: Logger;\n}\n\n// ─── SSL Credential Building ─────────────────────────────────────────\n\nexport interface SslCredentialParts {\n  rootCerts: Buffer | null;\n  clientCert: Buffer | null;\n  clientKey: Buffer | null;\n  insecureSkipVerify: boolean;\n}\n\n/**\n * Resolve all TLS cert/key inputs into Buffers for gRPC.\n * Called during initial connection and on reconnection (for cert rotation).\n */\nexport async function resolveSslParts(\n  opts: TlsOptions,\n  logger: Logger,\n): Promise<SslCredentialParts> {\n  let rootCerts: Buffer | null = null;\n  let clientCert: Buffer | null = null;\n  let clientKey: Buffer | null = null;\n\n  if (opts.caCert) {\n    rootCerts = await resolvePemOrPath(opts.caCert);\n    logger.debug('CA certificate loaded', {\n      source: typeof opts.caCert === 'string' && !opts.caCert.startsWith('-----') ? 'file' : 'pem',\n    });\n  }\n\n  if (opts.clientCert && opts.clientKey) {\n    clientCert = await resolvePemOrPath(opts.clientCert);\n    clientKey = await resolvePemOrPath(opts.clientKey);\n    logger.debug('Client certificate and key loaded for mTLS');\n  }\n\n  if (opts.insecureSkipVerify) {\n    if (process.env.NODE_ENV === 'production' && !process.env.KUBEMQ_ALLOW_INSECURE) {\n      throw new ConfigurationError({\n        code: ErrorCode.ConfigurationError,\n        message: 'insecureSkipVerify is not allowed when NODE_ENV=production',\n        operation: 'resolveSslParts',\n        isRetryable: false,\n        suggestion: 'Set KUBEMQ_ALLOW_INSECURE=1 to override, or remove insecureSkipVerify.',\n      });\n    }\n    logger.warn('certificate verification is disabled — do not use in production');\n  }\n\n  return {\n    rootCerts,\n    clientCert,\n    clientKey,\n    insecureSkipVerify: opts.insecureSkipVerify ?? false,\n  };\n}\n\n/**\n * Build fresh SSL credentials by re-reading cert sources.\n * Called on every reconnection attempt for cert rotation support.\n */\nexport async function buildFreshSslParts(source: TlsCredentialSource): Promise<SslCredentialParts> {\n  const { options: opts, logger } = source;\n\n  logger.debug('Reloading TLS credentials for reconnection');\n\n  try {\n    const parts = await resolveSslParts(opts, logger);\n\n    logger.debug('TLS credentials reloaded successfully', {\n      hasCaCert: !!parts.rootCerts,\n      hasClientCert: !!parts.clientCert,\n      source: getSourceType(opts),\n    });\n\n    return parts;\n  } catch (err: unknown) {\n    logger.error('TLS credential reload failed', {\n      error: err instanceof Error ? err.message : String(err),\n    });\n    throw err;\n  }\n}\n\nfunction getSourceType(opts: TlsOptions): string {\n  if (opts.clientCert) {\n    return Buffer.isBuffer(opts.clientCert) ? 'pem-buffer' : 'file';\n  }\n  return 'none';\n}\n","/**\n * @internal — Auth credential injection for gRPC calls.\n *\n * Two mechanisms are provided:\n * 1. Call credentials (combined with SSL channel credentials via\n *    grpc.credentials.combineChannelCredentials) — used when TLS is enabled.\n * 2. Interceptor-based token injection — used for insecure connections\n *    where combineChannelCredentials is not available.\n */\n\nimport type { TokenCache } from '../../auth/token-cache.js';\nimport type { Logger } from '../../logger.js';\n\n// ─── Metadata Keys ──────────────────────────────────────────────────\n\nexport const AUTH_METADATA_KEY = 'authorization';\n\n/**\n * Metadata keys that must be redacted from logs, OTel spans, and toString.\n */\nexport const REDACTED_METADATA_KEYS = new Set([\n  'authorization',\n  'cookie',\n  'set-cookie',\n  'x-api-key',\n]);\n\n/**\n * Sanitize gRPC metadata for safe logging / OTel span attributes.\n * Replaces sensitive header values with '[REDACTED]'.\n */\nexport function sanitizeMetadata(metadata: Record<string, string>): Record<string, string> {\n  const result: Record<string, string> = {};\n  for (const [key, value] of Object.entries(metadata)) {\n    if (REDACTED_METADATA_KEYS.has(key.toLowerCase())) {\n      result[key] = '[REDACTED]';\n    } else {\n      result[key] = value;\n    }\n  }\n  return result;\n}\n\n/**\n * Fetch a token from the cache and return it with metadata\n * suitable for gRPC call injection. Returns undefined if\n * the token fetch fails (non-throwing for interceptor use).\n */\nexport async function fetchTokenForMetadata(\n  tokenCache: TokenCache,\n  logger: Logger,\n): Promise<string | undefined> {\n  try {\n    const token = await tokenCache.getToken();\n    logger.debug('Token injected into gRPC metadata', {\n      tokenPresent: true,\n      tokenLength: token.length,\n    });\n    return token;\n  } catch (err: unknown) {\n    logger.warn('Credential provider failed — request will proceed without token', {\n      error: err instanceof Error ? err.message : String(err),\n    });\n    return undefined;\n  }\n}\n\n/**\n * Security warnings emitted on every connection/reconnection attempt.\n */\nexport function emitSecurityWarnings(\n  opts: {\n    insecureSkipVerify?: boolean;\n    tlsEnabled: boolean;\n    address: string;\n  },\n  isLocalhost: boolean,\n  logger: Logger,\n): void {\n  if (opts.insecureSkipVerify) {\n    logger.warn('certificate verification is disabled — this connection is insecure', {\n      address: opts.address,\n      insecureSkipVerify: true,\n    });\n  }\n\n  if (!opts.tlsEnabled && !isLocalhost) {\n    logger.warn('TLS is disabled for a remote address — connection is unencrypted', {\n      address: opts.address,\n      tlsEnabled: false,\n    });\n  }\n}\n","/**\n * GrpcTransport — single gRPC channel per client instance.\n *\n * Implements the Transport interface (Layer 3) and owns:\n * - One @grpc/grpc-js Client (connection reuse, REQ-CONN-6)\n * - Connection state machine (REQ-CONN-2)\n * - Reconnection manager (REQ-CONN-1)\n * - Message buffer (REQ-CONN-1)\n * - In-flight tracker (REQ-CONN-4)\n * - Subscription tracker (REQ-CONN-1)\n *\n * @internal\n */\n\nimport * as grpc from '@grpc/grpc-js';\nimport { kubemq } from '../../protos/kubemq.js';\nimport type { Logger } from '../../logger.js';\nimport type {\n  ClientOptions,\n  KeepaliveOptions,\n  ReconnectionPolicy,\n  TlsOptions,\n} from '../../options.js';\nimport { DEFAULT_KEEPALIVE, DEFAULT_RECONNECTION_POLICY } from '../../options.js';\nimport { ConnectionState } from './connection-state.js';\nimport { ConnectionStateMachine } from './connection-state-machine.js';\nimport { ReconnectionManager } from './reconnection-manager.js';\nimport { MessageBuffer } from './message-buffer.js';\nimport type { BufferedMessage } from './message-buffer.js';\nimport { InFlightTracker } from './in-flight-tracker.js';\nimport { SubscriptionTracker } from './subscription-tracker.js';\nimport { ClientClosedError, ErrorCode } from '../../errors.js';\nimport { noopLogger } from '../../logger.js';\nimport type {\n  Transport,\n  TransportCallOptions,\n  StreamHandle,\n  RawTransportError,\n} from './transport.js';\nimport type { ConnectionEventMap } from './typed-emitter.js';\nimport { resolveCredentialProvider } from '../../auth/credential-provider.js';\nimport type { CredentialProvider } from '../../auth/credential-provider.js';\nimport { TokenCache } from '../../auth/token-cache.js';\nimport {\n  normalizeTlsOptions,\n  validateCertificates,\n  isLocalhostAddress,\n  resolveSslParts,\n  buildFreshSslParts,\n} from '../../auth/tls-utils.js';\nimport type { TlsCredentialSource, SslCredentialParts } from '../../auth/tls-utils.js';\nimport {\n  emitSecurityWarnings,\n  fetchTokenForMetadata,\n  AUTH_METADATA_KEY,\n} from '../middleware/auth.js';\n\nexport interface GrpcChannelOptions {\n  'grpc.max_receive_message_length': number;\n  'grpc.max_send_message_length': number;\n  'grpc.keepalive_time_ms': number;\n  'grpc.keepalive_timeout_ms': number;\n  'grpc.keepalive_permit_without_calls': number;\n  'grpc.dns_min_time_between_resolutions_ms': number;\n  'grpc.initial_reconnect_backoff_ms': number;\n  'grpc.max_reconnect_backoff_ms': number;\n  'grpc.min_reconnect_backoff_ms': number;\n  'grpc.ssl_target_name_override'?: string;\n}\n\nexport function buildChannelOptions(opts: ClientOptions): GrpcChannelOptions {\n  const keepalive: KeepaliveOptions = opts.keepalive ?? DEFAULT_KEEPALIVE;\n  const reconnect: ReconnectionPolicy = opts.reconnect ?? DEFAULT_RECONNECTION_POLICY;\n  const tlsOpts: TlsOptions | undefined = typeof opts.tls === 'object' ? opts.tls : undefined;\n\n  const channelOptions: GrpcChannelOptions = {\n    'grpc.max_receive_message_length': opts.maxReceiveMessageSize ?? 104_857_600,\n    'grpc.max_send_message_length': opts.maxSendMessageSize ?? 104_857_600,\n    'grpc.keepalive_time_ms': keepalive.timeMs,\n    'grpc.keepalive_timeout_ms': keepalive.timeoutMs,\n    'grpc.keepalive_permit_without_calls': keepalive.permitWithoutCalls ? 1 : 0,\n    'grpc.dns_min_time_between_resolutions_ms': 1_000,\n    'grpc.initial_reconnect_backoff_ms': reconnect.initialDelayMs,\n    'grpc.max_reconnect_backoff_ms': reconnect.maxDelayMs,\n    'grpc.min_reconnect_backoff_ms': reconnect.initialDelayMs,\n  };\n\n  if (tlsOpts?.serverNameOverride) {\n    channelOptions['grpc.ssl_target_name_override'] = tlsOpts.serverNameOverride;\n  }\n\n  return channelOptions;\n}\n\nexport class GrpcTransport implements Transport {\n  private readonly logger: Logger;\n  private readonly stateMachine: ConnectionStateMachine;\n  private readonly reconnectionManager: ReconnectionManager;\n  private readonly messageBuffer: MessageBuffer;\n  private readonly inFlightTracker: InFlightTracker;\n  private readonly subscriptionTracker: SubscriptionTracker;\n  private readonly channelOptions: GrpcChannelOptions;\n  private readonly address: string;\n  private _closing = false;\n  private readonly metadata = new Map<string, string>();\n  private cachedGrpcMetadata: grpc.Metadata | null = null;\n\n  private grpcClient: InstanceType<typeof kubemq.kubemqClient> | null = null;\n\n  private readonly credentialProvider: CredentialProvider | undefined;\n  private readonly tokenCache: TokenCache | undefined;\n  private readonly resolvedTls: TlsOptions & { enabled: boolean };\n  private readonly tlsCredentialSource: TlsCredentialSource | undefined;\n\n  constructor(options: ClientOptions) {\n    this.address = options.address;\n    this.logger = options.logger ?? noopLogger;\n    this.channelOptions = buildChannelOptions(options);\n    this.stateMachine = new ConnectionStateMachine(this.logger);\n    this.reconnectionManager = new ReconnectionManager(\n      options.reconnect ?? DEFAULT_RECONNECTION_POLICY,\n      this.stateMachine,\n      this.logger,\n    );\n    this.messageBuffer = new MessageBuffer(\n      options.reconnectBufferSize ?? 8_388_608,\n      options.reconnectBufferMode ?? 'error',\n      this.logger,\n    );\n    this.inFlightTracker = new InFlightTracker();\n    this.subscriptionTracker = new SubscriptionTracker();\n\n    this.credentialProvider = resolveCredentialProvider(options.credentials);\n    if (this.credentialProvider) {\n      this.tokenCache = new TokenCache(this.credentialProvider, this.logger);\n    }\n\n    this.resolvedTls = normalizeTlsOptions(options.tls, options.address);\n    if (this.resolvedTls.enabled) {\n      this.tlsCredentialSource = {\n        options: this.resolvedTls,\n        logger: this.logger,\n      };\n    }\n  }\n\n  get state(): ConnectionState {\n    return this.stateMachine.state;\n  }\n\n  getStateMachine(): ConnectionStateMachine {\n    return this.stateMachine;\n  }\n\n  getInFlightTracker(): InFlightTracker {\n    return this.inFlightTracker;\n  }\n\n  getMessageBuffer(): MessageBuffer {\n    return this.messageBuffer;\n  }\n\n  getReconnectionManager(): ReconnectionManager {\n    return this.reconnectionManager;\n  }\n\n  getSubscriptionTracker(): SubscriptionTracker {\n    return this.subscriptionTracker;\n  }\n\n  getChannelOptions(): GrpcChannelOptions {\n    return this.channelOptions;\n  }\n\n  /**\n   * Validate TLS certificates and emit security warnings.\n   * Must be called before connect() to enforce fail-fast semantics.\n   */\n  async validateAuth(): Promise<void> {\n    if (this.resolvedTls.enabled) {\n      await validateCertificates(this.resolvedTls, this.logger);\n    }\n\n    emitSecurityWarnings(\n      {\n        insecureSkipVerify: this.resolvedTls.insecureSkipVerify,\n        tlsEnabled: this.resolvedTls.enabled,\n        address: this.address,\n      },\n      isLocalhostAddress(this.address),\n      this.logger,\n    );\n  }\n\n  /**\n   * Resolve SSL credential parts for the current TLS configuration.\n   * Used during initial connect and reconnection (cert rotation).\n   */\n  async resolveSslCredentials(): Promise<SslCredentialParts | undefined> {\n    if (!this.tlsCredentialSource) return undefined;\n    return resolveSslParts(this.resolvedTls, this.logger);\n  }\n\n  /**\n   * Rebuild SSL credentials from source (re-reads files for cert rotation).\n   */\n  async reloadSslCredentials(): Promise<SslCredentialParts | undefined> {\n    if (!this.tlsCredentialSource) return undefined;\n    return buildFreshSslParts(this.tlsCredentialSource);\n  }\n\n  getTokenCache(): TokenCache | undefined {\n    return this.tokenCache;\n  }\n\n  getCredentialProvider(): CredentialProvider | undefined {\n    return this.credentialProvider;\n  }\n\n  getResolvedTls(): TlsOptions & { enabled: boolean } {\n    return this.resolvedTls;\n  }\n\n  async connect(): Promise<void> {\n    await this.validateAuth();\n    this.stateMachine.transitionTo(ConnectionState.CONNECTING);\n\n    const sslParts = await this.resolveSslCredentials();\n\n    let channelCreds: grpc.ChannelCredentials;\n    if (this.resolvedTls.enabled && sslParts) {\n      channelCreds = grpc.credentials.createSsl(\n        sslParts.rootCerts,\n        sslParts.clientKey,\n        sslParts.clientCert,\n      );\n    } else {\n      channelCreds = grpc.credentials.createInsecure();\n    }\n\n    let finalCreds: grpc.ChannelCredentials = channelCreds;\n    if (this.tokenCache && this.resolvedTls.enabled) {\n      const tokenCache = this.tokenCache;\n      const logger = this.logger;\n      const callCreds = grpc.credentials.createFromMetadataGenerator((_params, callback) => {\n        fetchTokenForMetadata(tokenCache, logger)\n          .then((token) => {\n            const md = new grpc.Metadata();\n            if (token) {\n              md.set(AUTH_METADATA_KEY, token);\n            }\n            callback(null, md);\n          })\n          .catch((err: unknown) => {\n            callback(err instanceof Error ? err : new Error(String(err)));\n          });\n      });\n      finalCreds = grpc.credentials.combineChannelCredentials(channelCreds, callCreds);\n    } else if (this.tokenCache && !this.resolvedTls.enabled) {\n      this.logger.warn('Auth credentials provided without TLS — token will be sent in plaintext', {\n        address: this.address,\n      });\n      await this.tokenCache.getToken();\n    }\n\n    this.grpcClient = new kubemq.kubemqClient(this.address, finalCreds, this.channelOptions);\n\n    this.stateMachine.transitionTo(ConnectionState.READY);\n    this.watchChannelState();\n  }\n\n  async close(timeoutMs?: number): Promise<void> {\n    const timeout = timeoutMs ?? 5000;\n\n    if (this.stateMachine.state === ConnectionState.CLOSED) {\n      return;\n    }\n\n    this._closing = true;\n\n    if (this.stateMachine.state === ConnectionState.RECONNECTING) {\n      this.reconnectionManager.cancel();\n      const discarded = this.messageBuffer.discard();\n      this.stateMachine.transitionTo(ConnectionState.CLOSED, { discardedCount: discarded });\n      return;\n    }\n\n    try {\n      // eslint-disable-next-line @typescript-eslint/require-await\n      await this.messageBuffer.flush(async (msg: BufferedMessage) => {\n        msg.resolve(undefined);\n      });\n    } catch (err: unknown) {\n      this.logger.warn('Buffer flush failed during shutdown', {\n        error: err instanceof Error ? err.message : String(err),\n      });\n      this.messageBuffer.discard();\n    }\n\n    await Promise.race([this.inFlightTracker.waitForAll(), this.createTimeout(timeout)]).catch(\n      () => {\n        // Timeout reached — proceed with shutdown\n      },\n    );\n\n    this.subscriptionTracker.clear();\n    this.tokenCache?.dispose();\n\n    if (this.grpcClient) {\n      this.grpcClient.close();\n      this.grpcClient = null;\n    }\n\n    this.stateMachine.transitionTo(ConnectionState.CLOSED);\n  }\n\n  ensureNotClosed(operation: string): void {\n    if (this._closing || this.stateMachine.state === ConnectionState.CLOSED) {\n      throw new ClientClosedError({\n        code: ErrorCode.ClientClosed,\n        message: 'Client is closed — cannot perform operations',\n        operation,\n        isRetryable: false,\n        suggestion: 'Create a new KubeMQClient instance',\n      });\n    }\n  }\n\n  // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-parameters\n  unaryCall<TReq, TRes>(\n    method: string,\n    request: TReq,\n    options?: TransportCallOptions,\n  ): Promise<TRes> {\n    this.ensureNotClosed('unaryCall');\n    if (!this.grpcClient) throw new Error('Not connected');\n\n    const grpcMethod = (this.grpcClient as Record<string, unknown>)[method] as\n      | ((...args: unknown[]) => grpc.ClientUnaryCall)\n      | undefined;\n    if (!grpcMethod) throw new Error(`Unknown method: ${method}`);\n\n    return new Promise<TRes>((resolve, reject) => {\n      const metadata = this.buildGrpcMetadata();\n      const callOptions: grpc.CallOptions = {};\n      if (options?.deadline) callOptions.deadline = options.deadline;\n\n      const call = grpcMethod.call(\n        this.grpcClient,\n        request,\n        metadata,\n        callOptions,\n        (err: grpc.ServiceError | null, response: TRes) => {\n          if (err) {\n            reject(this.toRawTransportError(err));\n          } else {\n            resolve(response);\n          }\n        },\n      );\n\n      if (options?.signal) {\n        const onAbort = () => {\n          call.cancel();\n        };\n        options.signal.addEventListener('abort', onAbort, { once: true });\n      }\n    });\n  }\n\n  // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-parameters\n  serverStream<TReq, TRes>(\n    method: string,\n    request: TReq,\n    options?: TransportCallOptions,\n  ): StreamHandle<never, TRes> {\n    this.ensureNotClosed('serverStream');\n    if (!this.grpcClient) throw new Error('Not connected');\n\n    const grpcMethod = (this.grpcClient as Record<string, unknown>)[method] as\n      | ((...args: unknown[]) => grpc.ClientReadableStream<TRes>)\n      | undefined;\n    if (!grpcMethod) throw new Error(`Unknown method: ${method}`);\n\n    const metadata = this.buildGrpcMetadata();\n    const callOptions: grpc.CallOptions = {};\n    if (options?.deadline) callOptions.deadline = options.deadline;\n\n    const stream: grpc.ClientReadableStream<TRes> = grpcMethod.call(\n      this.grpcClient,\n      request,\n      metadata,\n      callOptions,\n    );\n\n    if (options?.signal) {\n      const onAbort = () => {\n        stream.cancel();\n      };\n      options.signal.addEventListener('abort', onAbort, { once: true });\n    }\n\n    return this.wrapReadableStream<TRes>(stream);\n  }\n\n  duplexStream<TReq, TRes>(\n    method: string,\n    options?: TransportCallOptions,\n  ): StreamHandle<TReq, TRes> {\n    this.ensureNotClosed('duplexStream');\n    if (!this.grpcClient) throw new Error('Not connected');\n\n    const grpcMethod = (this.grpcClient as Record<string, unknown>)[method] as\n      | ((...args: unknown[]) => grpc.ClientDuplexStream<TReq, TRes>)\n      | undefined;\n    if (!grpcMethod) throw new Error(`Unknown method: ${method}`);\n\n    const metadata = this.buildGrpcMetadata();\n    const callOptions: grpc.CallOptions = {};\n    if (options?.deadline) callOptions.deadline = options.deadline;\n\n    const stream: grpc.ClientDuplexStream<TReq, TRes> = grpcMethod.call(\n      this.grpcClient,\n      metadata,\n      callOptions,\n    );\n\n    if (options?.signal) {\n      const onAbort = () => {\n        stream.cancel();\n      };\n      options.signal.addEventListener('abort', onAbort, { once: true });\n    }\n\n    return this.wrapDuplexStream<TReq, TRes>(stream);\n  }\n\n  getMetadata(): Record<string, string> {\n    return Object.fromEntries(this.metadata);\n  }\n\n  setMetadata(key: string, value: string): void {\n    this.metadata.set(key, value);\n    this.cachedGrpcMetadata = null; // invalidate cache\n  }\n\n  on<K extends keyof ConnectionEventMap>(event: K, handler: ConnectionEventMap[K]): void {\n    this.stateMachine.on(event, handler);\n  }\n\n  off<K extends keyof ConnectionEventMap>(event: K, handler: ConnectionEventMap[K]): void {\n    this.stateMachine.off(event, handler);\n  }\n\n  private watchChannelState(): void {\n    if (!this.grpcClient || this._closing) return;\n\n    try {\n      /* eslint-disable @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access */\n      const channel = (this.grpcClient as any).getChannel();\n      const currentState = channel.getConnectivityState(false);\n\n      if (currentState === 3 /* TRANSIENT_FAILURE */) {\n        this.handleTransientFailure();\n        return;\n      }\n\n      const deadline = Date.now() + 30_000;\n      channel.watchConnectivityState(currentState, deadline, (_err?: Error) => {\n        // JS-2 fix: only stop watching if closing; on deadline expiry, restart the watch\n        if (this._closing) return;\n        this.watchChannelState();\n      });\n      /* eslint-enable @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access */\n    } catch {\n      // Channel may not be available yet or already closed\n    }\n  }\n\n  private handleTransientFailure(): void {\n    if (this._closing || this.stateMachine.state === ConnectionState.CLOSED) return;\n\n    this.logger.warn('gRPC channel entered TRANSIENT_FAILURE — initiating reconnection');\n    this.stateMachine.transitionTo(ConnectionState.RECONNECTING);\n\n    this.reconnectionManager\n      .reconnect(async () => {\n        if (this.grpcClient) {\n          try {\n            this.grpcClient.close();\n          } catch {\n            /* ignore close errors during reconnect */\n          }\n          this.grpcClient = null;\n        }\n        const sslParts = await this.resolveSslCredentials();\n        let channelCreds: grpc.ChannelCredentials;\n        if (this.resolvedTls.enabled && sslParts) {\n          channelCreds = grpc.credentials.createSsl(\n            sslParts.rootCerts,\n            sslParts.clientKey,\n            sslParts.clientCert,\n          );\n        } else {\n          channelCreds = grpc.credentials.createInsecure();\n        }\n        let finalCreds = channelCreds;\n        if (this.tokenCache && this.resolvedTls.enabled) {\n          const tokenCache = this.tokenCache;\n          const logger = this.logger;\n          const callCreds = grpc.credentials.createFromMetadataGenerator((_params, callback) => {\n            fetchTokenForMetadata(tokenCache, logger)\n              .then((token) => {\n                const md = new grpc.Metadata();\n                if (token) md.set(AUTH_METADATA_KEY, token);\n                callback(null, md);\n              })\n              .catch((err: unknown) => {\n                callback(err instanceof Error ? err : new Error(String(err)));\n              });\n          });\n          finalCreds = grpc.credentials.combineChannelCredentials(channelCreds, callCreds);\n        }\n        this.grpcClient = new kubemq.kubemqClient(this.address, finalCreds, this.channelOptions);\n        // JS-3 fix: verify connectivity with a ping before declaring ready\n        await this.waitForChannelReady(5000);\n        this.watchChannelState();\n      })\n      .then(() => {\n        if (this.subscriptionTracker.count > 0) {\n          this.logger.info('Re-establishing subscriptions after reconnection', {\n            count: this.subscriptionTracker.count,\n          });\n          this.subscriptionTracker.resubscribeAll();\n        }\n      })\n      .catch((err: unknown) => {\n        this.logger.error('Reconnection loop failed', {\n          error: err instanceof Error ? err.message : String(err),\n        });\n      });\n  }\n\n  private buildGrpcMetadata(): grpc.Metadata {\n    // When there's a token cache without TLS, the token may change between calls,\n    // so we cannot cache the metadata.\n    if (this.tokenCache && !this.resolvedTls.enabled) {\n      const metadata = new grpc.Metadata();\n      for (const [key, value] of this.metadata) {\n        metadata.set(key, value);\n      }\n      const token = this.tokenCache.lastKnownToken;\n      if (token) {\n        metadata.set(AUTH_METADATA_KEY, token);\n      }\n      return metadata;\n    }\n\n    // Static metadata path: build once and cache\n    if (this.cachedGrpcMetadata) return this.cachedGrpcMetadata;\n    const metadata = new grpc.Metadata();\n    for (const [key, value] of this.metadata) {\n      metadata.set(key, value);\n    }\n    this.cachedGrpcMetadata = metadata;\n    return metadata;\n  }\n\n  private toRawTransportError(err: grpc.ServiceError): RawTransportError {\n    const rawErr = new Error(err.details || err.message) as Error & {\n      code: number;\n      details: string;\n      metadata?: Record<string, string>;\n    };\n    rawErr.code = err.code;\n    rawErr.details = err.details || err.message;\n    const meta: Record<string, string> = {};\n    for (const [key, values] of Object.entries(err.metadata.getMap())) {\n      meta[key] = String(values);\n    }\n    rawErr.metadata = meta;\n    return rawErr;\n  }\n\n  private wrapReadableStream<TRes>(\n    stream: grpc.ClientReadableStream<TRes>,\n  ): StreamHandle<never, TRes> {\n    return {\n      write(): boolean {\n        return false;\n      },\n      onData(handler: (msg: TRes) => void): void {\n        stream.on('data', handler);\n      },\n      onError(handler: (err: Error) => void): void {\n        stream.on('error', handler);\n      },\n      onEnd(handler: () => void): void {\n        stream.on('end', handler);\n      },\n      cancel(): void {\n        stream.cancel();\n      },\n      end(): void {\n        stream.cancel();\n      },\n      // C3 fix: backpressure support\n      pause(): void {\n        stream.pause();\n      },\n      resume(): void {\n        stream.resume();\n      },\n      // H2 fix: clean up listeners on rebind\n      removeAllListeners(): void {\n        stream.removeAllListeners();\n      },\n      onDrain(_handler: () => void): void {\n        /* read-only stream, no-op */\n      },\n    };\n  }\n\n  private wrapDuplexStream<TReq, TRes>(\n    stream: grpc.ClientDuplexStream<TReq, TRes>,\n  ): StreamHandle<TReq, TRes> {\n    return {\n      write(msg: TReq): boolean {\n        return stream.write(msg);\n      },\n      onData(handler: (msg: TRes) => void): void {\n        stream.on('data', handler);\n      },\n      onError(handler: (err: Error) => void): void {\n        stream.on('error', handler);\n      },\n      onEnd(handler: () => void): void {\n        stream.on('end', handler);\n      },\n      cancel(): void {\n        stream.cancel();\n      },\n      end(): void {\n        stream.end();\n      },\n      // C3 fix: backpressure support\n      pause(): void {\n        stream.pause();\n      },\n      resume(): void {\n        stream.resume();\n      },\n      // H2 fix: clean up listeners on rebind\n      removeAllListeners(): void {\n        stream.removeAllListeners();\n      },\n      onDrain(handler: () => void): void {\n        stream.once('drain', handler);\n      },\n    };\n  }\n\n  /**\n   * JS-3 fix: Wait for the gRPC channel to reach READY state before proceeding.\n   * Uses grpc-js waitForReady which waits for the underlying HTTP/2 connection.\n   */\n  private waitForChannelReady(timeoutMs: number): Promise<void> {\n    return new Promise<void>((resolve, reject) => {\n      if (!this.grpcClient) {\n        reject(new Error('No gRPC client'));\n        return;\n      }\n      const deadline = Date.now() + timeoutMs;\n      this.grpcClient.waitForReady(deadline, (err?: Error) => {\n        if (err) {\n          reject(err);\n        } else {\n          resolve();\n        }\n      });\n    });\n  }\n\n  private createTimeout(ms: number): Promise<void> {\n    return new Promise((resolve) => {\n      const timer = setTimeout(resolve, ms);\n      if (typeof timer === 'object' && 'unref' in timer) {\n        timer.unref();\n      }\n    });\n  }\n}\n","/** @internal */\n\nimport { ConfigurationError, ErrorCode } from '../errors.js';\nimport type {\n  ClientOptions,\n  RetryPolicy,\n  ReconnectionPolicy,\n  KeepaliveOptions,\n} from '../options.js';\n\nexport function validateClientOptions(opts: ClientOptions): void {\n  if (!opts.address || opts.address.trim() === '') {\n    throw new ConfigurationError({\n      code: ErrorCode.ConfigurationError,\n      message: 'Client address is required and cannot be empty',\n      operation: 'KubeMQClient.create',\n      isRetryable: false,\n      suggestion: \"Provide a valid address like 'localhost:50000'\",\n    });\n  }\n\n  if (!isValidAddress(opts.address)) {\n    throw new ConfigurationError({\n      code: ErrorCode.ConfigurationError,\n      message: `Invalid address format: \"${opts.address}\". Expected \"host:port\" format`,\n      operation: 'KubeMQClient.create',\n      isRetryable: false,\n      suggestion: \"Use format 'hostname:port' (e.g., 'localhost:50000')\",\n    });\n  }\n\n  if (opts.connectionTimeoutSeconds !== undefined && opts.connectionTimeoutSeconds <= 0) {\n    throw new ConfigurationError({\n      code: ErrorCode.ConfigurationError,\n      message: `connectionTimeoutSeconds must be positive, got ${String(opts.connectionTimeoutSeconds)}`,\n      operation: 'KubeMQClient.create',\n      isRetryable: false,\n    });\n  }\n\n  if (opts.maxReceiveMessageSize !== undefined && opts.maxReceiveMessageSize <= 0) {\n    throw new ConfigurationError({\n      code: ErrorCode.ConfigurationError,\n      message: `maxReceiveMessageSize must be positive, got ${String(opts.maxReceiveMessageSize)}`,\n      operation: 'KubeMQClient.create',\n      isRetryable: false,\n    });\n  }\n\n  if (opts.maxSendMessageSize !== undefined && opts.maxSendMessageSize <= 0) {\n    throw new ConfigurationError({\n      code: ErrorCode.ConfigurationError,\n      message: `maxSendMessageSize must be positive, got ${String(opts.maxSendMessageSize)}`,\n      operation: 'KubeMQClient.create',\n      isRetryable: false,\n    });\n  }\n\n  if (opts.reconnectBufferSize !== undefined && opts.reconnectBufferSize < 0) {\n    throw new ConfigurationError({\n      code: ErrorCode.ConfigurationError,\n      message: `reconnectBufferSize must be non-negative, got ${String(opts.reconnectBufferSize)}`,\n      operation: 'KubeMQClient.create',\n      isRetryable: false,\n    });\n  }\n\n  if (opts.clientId?.trim().length === 0) {\n    throw new ConfigurationError({\n      code: ErrorCode.ConfigurationError,\n      message: 'clientId must not be empty when provided',\n      operation: 'KubeMQClient.create',\n      isRetryable: false,\n      suggestion: 'Omit clientId to auto-generate one, or provide a non-empty string',\n    });\n  }\n\n  validateTlsOptions(opts);\n  validateRetryPolicy(opts.retry);\n  validateReconnectionPolicy(opts.reconnect);\n  validateKeepaliveOptions(opts.keepalive);\n}\n\nfunction isValidAddress(address: string): boolean {\n  const parts = address.split(':');\n  if (parts.length < 2) return false;\n  const portStr = parts[parts.length - 1];\n  if (portStr === undefined) return false;\n  const port = Number(portStr);\n  if (isNaN(port) || port <= 0 || port > 65535) return false;\n  const host = parts.slice(0, -1).join(':');\n  return host.length > 0;\n}\n\nfunction validateTlsOptions(opts: ClientOptions): void {\n  if (typeof opts.tls === 'object') {\n    const tls = opts.tls;\n    if (tls.clientCert && !tls.clientKey) {\n      throw new ConfigurationError({\n        code: ErrorCode.ConfigurationError,\n        message: 'TLS clientKey is required when clientCert is provided',\n        operation: 'KubeMQClient.create',\n        isRetryable: false,\n        suggestion: 'Provide both clientCert and clientKey for mutual TLS',\n      });\n    }\n    if (tls.clientKey && !tls.clientCert) {\n      throw new ConfigurationError({\n        code: ErrorCode.ConfigurationError,\n        message: 'TLS clientCert is required when clientKey is provided',\n        operation: 'KubeMQClient.create',\n        isRetryable: false,\n        suggestion: 'Provide both clientCert and clientKey for mutual TLS',\n      });\n    }\n  }\n}\n\nfunction validateRetryPolicy(retry: RetryPolicy | undefined): void {\n  if (!retry) return;\n  if (retry.maxRetries < 0) {\n    throw new ConfigurationError({\n      code: ErrorCode.ConfigurationError,\n      message: `retry.maxRetries must be >= 0, got ${String(retry.maxRetries)}`,\n      operation: 'KubeMQClient.create',\n      isRetryable: false,\n    });\n  }\n  if (retry.initialBackoffMs <= 0) {\n    throw new ConfigurationError({\n      code: ErrorCode.ConfigurationError,\n      message: `retry.initialBackoffMs must be positive, got ${String(retry.initialBackoffMs)}`,\n      operation: 'KubeMQClient.create',\n      isRetryable: false,\n    });\n  }\n  if (retry.maxBackoffMs <= 0) {\n    throw new ConfigurationError({\n      code: ErrorCode.ConfigurationError,\n      message: `retry.maxBackoffMs must be positive, got ${String(retry.maxBackoffMs)}`,\n      operation: 'KubeMQClient.create',\n      isRetryable: false,\n    });\n  }\n}\n\nfunction validateReconnectionPolicy(reconnect: ReconnectionPolicy | undefined): void {\n  if (!reconnect) return;\n  if (reconnect.initialDelayMs <= 0) {\n    throw new ConfigurationError({\n      code: ErrorCode.ConfigurationError,\n      message: `reconnect.initialDelayMs must be positive, got ${String(reconnect.initialDelayMs)}`,\n      operation: 'KubeMQClient.create',\n      isRetryable: false,\n    });\n  }\n  if (reconnect.maxDelayMs <= 0) {\n    throw new ConfigurationError({\n      code: ErrorCode.ConfigurationError,\n      message: `reconnect.maxDelayMs must be positive, got ${String(reconnect.maxDelayMs)}`,\n      operation: 'KubeMQClient.create',\n      isRetryable: false,\n    });\n  }\n}\n\nfunction validateKeepaliveOptions(keepalive: KeepaliveOptions | undefined): void {\n  if (!keepalive) return;\n  if (keepalive.timeMs <= 0) {\n    throw new ConfigurationError({\n      code: ErrorCode.ConfigurationError,\n      message: `keepalive.timeMs must be positive, got ${String(keepalive.timeMs)}`,\n      operation: 'KubeMQClient.create',\n      isRetryable: false,\n    });\n  }\n  if (keepalive.timeoutMs <= 0) {\n    throw new ConfigurationError({\n      code: ErrorCode.ConfigurationError,\n      message: `keepalive.timeoutMs must be positive, got ${String(keepalive.timeoutMs)}`,\n      operation: 'KubeMQClient.create',\n      isRetryable: false,\n    });\n  }\n}\n","/** @internal */\n\nimport { randomUUID } from 'node:crypto';\nimport type {\n  ClientOptions,\n  KeepaliveOptions,\n  RetryPolicy,\n  ReconnectionPolicy,\n  TlsOptions,\n} from '../options.js';\nimport type { Logger } from '../logger.js';\nimport { noopLogger } from '../logger.js';\nimport {\n  DEFAULT_CONNECTION_TIMEOUT_MS,\n  DEFAULT_MAX_MESSAGE_SIZE,\n  DEFAULT_RECONNECT_BUFFER_SIZE,\n  DEFAULT_SEND_TIMEOUT_MS,\n  DEFAULT_SUBSCRIBE_TIMEOUT_MS,\n  DEFAULT_RPC_TIMEOUT_MS,\n  DEFAULT_QUEUE_RECEIVE_TIMEOUT_MS,\n  DEFAULT_QUEUE_POLL_TIMEOUT_MS,\n  DEFAULT_MAX_CONCURRENT_RETRIES,\n} from '../options.js';\n\n/**\n * Fully-resolved configuration after defaults are applied.\n * Unlike `Required<ClientOptions>`, `credentials`, `tracerProvider`,\n * and `meterProvider` remain optional (no sensible non-undefined default).\n */\nexport interface ResolvedClientOptions {\n  readonly address: string;\n  readonly clientId: string;\n  readonly credentials: ClientOptions['credentials'] | undefined;\n  readonly tls: boolean | TlsOptions;\n  readonly keepalive: Readonly<Required<KeepaliveOptions>>;\n  readonly retry: Readonly<Required<RetryPolicy>>;\n  readonly reconnect: Readonly<Required<ReconnectionPolicy>>;\n  readonly connectionTimeoutMs: number;\n  readonly maxReceiveMessageSize: number;\n  readonly maxSendMessageSize: number;\n  readonly waitForReady: boolean;\n  readonly logger: Logger;\n  readonly tracerProvider: unknown;\n  readonly meterProvider: unknown;\n  readonly reconnectBufferSize: number;\n  readonly reconnectBufferMode: 'error' | 'block';\n  readonly maxConcurrentRetries: number;\n  readonly defaultSendTimeoutMs: number;\n  readonly defaultSubscribeTimeoutMs: number;\n  readonly defaultRpcTimeoutMs: number;\n  readonly defaultQueueReceiveTimeoutMs: number;\n  readonly defaultQueuePollTimeoutMs: number;\n}\n\n/**\n * Apply sensible defaults to user-provided options, producing a\n * fully-resolved, internally-immutable configuration object.\n *\n * TLS defaults to `false` for localhost addresses, `true` for remote.\n */\nexport function applyDefaults(options: ClientOptions): ResolvedClientOptions {\n  return {\n    address: options.address,\n    clientId: options.clientId ?? randomUUID(),\n    credentials: options.credentials ?? undefined,\n    tls: resolveTlsDefault(options),\n    keepalive: {\n      timeMs: 10_000,\n      timeoutMs: 5_000,\n      permitWithoutCalls: true,\n      ...options.keepalive,\n    },\n    retry: {\n      maxRetries: 3,\n      initialBackoffMs: 500,\n      maxBackoffMs: 30_000,\n      multiplier: 2.0,\n      jitter: 'full' as const,\n      ...options.retry,\n    },\n    reconnect: {\n      maxAttempts: -1,\n      initialDelayMs: 500,\n      maxDelayMs: 30_000,\n      multiplier: 2.0,\n      jitter: 'full' as const,\n      ...options.reconnect,\n    },\n    connectionTimeoutMs:\n      options.connectionTimeoutSeconds != null\n        ? options.connectionTimeoutSeconds * 1000\n        : DEFAULT_CONNECTION_TIMEOUT_MS,\n    maxReceiveMessageSize: options.maxReceiveMessageSize ?? DEFAULT_MAX_MESSAGE_SIZE,\n    maxSendMessageSize: options.maxSendMessageSize ?? DEFAULT_MAX_MESSAGE_SIZE,\n    waitForReady: options.waitForReady ?? true,\n    logger: options.logger ?? noopLogger,\n    tracerProvider: options.tracerProvider ?? undefined,\n    meterProvider: options.meterProvider ?? undefined,\n    reconnectBufferSize: options.reconnectBufferSize ?? DEFAULT_RECONNECT_BUFFER_SIZE,\n    reconnectBufferMode: options.reconnectBufferMode ?? 'error',\n    maxConcurrentRetries: options.maxConcurrentRetries ?? DEFAULT_MAX_CONCURRENT_RETRIES,\n    defaultSendTimeoutMs:\n      options.defaultSendTimeoutSeconds != null\n        ? options.defaultSendTimeoutSeconds * 1000\n        : DEFAULT_SEND_TIMEOUT_MS,\n    defaultSubscribeTimeoutMs:\n      options.defaultSubscribeTimeoutSeconds != null\n        ? options.defaultSubscribeTimeoutSeconds * 1000\n        : DEFAULT_SUBSCRIBE_TIMEOUT_MS,\n    defaultRpcTimeoutMs:\n      options.defaultRpcTimeoutSeconds != null\n        ? options.defaultRpcTimeoutSeconds * 1000\n        : DEFAULT_RPC_TIMEOUT_MS,\n    defaultQueueReceiveTimeoutMs:\n      options.defaultQueueReceiveTimeoutSeconds != null\n        ? options.defaultQueueReceiveTimeoutSeconds * 1000\n        : DEFAULT_QUEUE_RECEIVE_TIMEOUT_MS,\n    defaultQueuePollTimeoutMs:\n      options.defaultQueuePollTimeoutSeconds != null\n        ? options.defaultQueuePollTimeoutSeconds * 1000\n        : DEFAULT_QUEUE_POLL_TIMEOUT_MS,\n  };\n}\n\nfunction resolveTlsDefault(options: ClientOptions): boolean | TlsOptions {\n  if (options.tls !== undefined) return options.tls;\n  return isLocalhost(options.address) ? false : true;\n}\n\nfunction isLocalhost(address: string): boolean {\n  let host: string;\n  if (address.startsWith('[')) {\n    const closingBracket = address.indexOf(']');\n    host = closingBracket > 0 ? address.slice(0, closingBracket + 1) : address;\n  } else {\n    const lastColon = address.lastIndexOf(':');\n    host = lastColon > 0 ? address.slice(0, lastColon) : address;\n  }\n  host = host.toLowerCase();\n  return host === 'localhost' || host === '127.0.0.1' || host === '::1' || host === '[::1]';\n}\n","/** @internal — SDK ↔ protobuf message conversion */\n\nimport { randomUUID } from 'node:crypto';\nimport { kubemq } from '../../protos/kubemq.js';\nimport type { EventMessage } from '../../messages/events.js';\nimport type { EventReceived } from '../../messages/events.js';\nimport type {\n  EventStoreMessage,\n  EventStoreReceived,\n  EventStoreResult,\n  EventStoreSubscription,\n} from '../../messages/events-store.js';\nimport type {\n  QueueMessage,\n  ReceivedQueueMessage,\n  QueueSendResult,\n  QueuePollRequest,\n  QueueStreamOptions,\n} from '../../messages/queues.js';\nimport type { BatchSendResult } from '../../messages/queues.js';\nimport type { CommandMessage, CommandReceived, CommandResponse } from '../../messages/commands.js';\nimport type { QueryMessage, QueryReceived, QueryResponse } from '../../messages/queries.js';\nimport type { ServerInfo } from '../../client.js';\nimport { normalizeBody } from '../utils/body.js';\nimport { KubeMQError, ErrorCode } from '../../errors.js';\n\n// ─── Helper: Record<string,string> → Map<string,string> ─────────────\n\n// L2 fix: avoid Map allocation when tags are empty/undefined\nfunction toTagsMap(tags?: Record<string, string>): Map<string, string> {\n  if (!tags) return new Map<string, string>();\n  const keys = Object.keys(tags);\n  if (keys.length === 0) return new Map<string, string>();\n  const map = new Map<string, string>();\n  for (const [k, v] of Object.entries(tags)) {\n    map.set(k, v);\n  }\n  return map;\n}\n\nfunction fromTagsMap(\n  tags: Map<string, string> | Record<string, string> | undefined | null,\n): Record<string, string> {\n  if (!tags) return {};\n  if (tags instanceof Map) {\n    const result: Record<string, string> = {};\n    tags.forEach((v, k) => {\n      result[k] = v;\n    });\n    return result;\n  }\n  return { ...tags };\n}\n\nfunction bodyBytes(body: unknown): Uint8Array {\n  if (body === undefined || body === null) return new Uint8Array(0);\n  if (typeof body === 'string') return normalizeBody(body);\n  if (body instanceof Uint8Array) return body;\n  if (Buffer.isBuffer(body)) return normalizeBody(body);\n  return new Uint8Array(0);\n}\n\n// ─── SDK → Proto ─────────────────────────────────────────────────────\n\nexport function toProtoEvent(\n  msg: EventMessage | EventStoreMessage,\n  clientId: string,\n  store: boolean,\n): kubemq.Event {\n  return new kubemq.Event({\n    EventID: msg.id ?? randomUUID(),\n    ClientID: msg.clientId ?? clientId,\n    Channel: msg.channel,\n    Metadata: msg.metadata ?? '',\n    Body: msg.body !== undefined ? bodyBytes(msg.body) : new Uint8Array(0),\n    Store: store,\n    Tags: toTagsMap(msg.tags),\n  });\n}\n\nexport function toProtoSubscribeEvents(\n  channel: string,\n  group: string | undefined,\n  clientId: string,\n): kubemq.Subscribe {\n  return new kubemq.Subscribe({\n    SubscribeTypeData: kubemq.Subscribe.SubscribeType.Events,\n    ClientID: clientId,\n    Channel: channel,\n    Group: group ?? '',\n  });\n}\n\nexport function toProtoSubscribeEventsStore(\n  sub: EventStoreSubscription,\n  clientId: string,\n): kubemq.Subscribe {\n  return new kubemq.Subscribe({\n    SubscribeTypeData: kubemq.Subscribe.SubscribeType.EventsStore,\n    ClientID: clientId,\n    Channel: sub.channel,\n    Group: sub.group ?? '',\n    EventsStoreTypeData: sub.startFrom as unknown as kubemq.Subscribe.EventsStoreType,\n    EventsStoreTypeValue: sub.startValue ?? 0,\n  });\n}\n\nexport function toProtoSubscribeCommands(\n  channel: string,\n  group: string | undefined,\n  clientId: string,\n): kubemq.Subscribe {\n  return new kubemq.Subscribe({\n    SubscribeTypeData: kubemq.Subscribe.SubscribeType.Commands,\n    ClientID: clientId,\n    Channel: channel,\n    Group: group ?? '',\n  });\n}\n\nexport function toProtoSubscribeQueries(\n  channel: string,\n  group: string | undefined,\n  clientId: string,\n): kubemq.Subscribe {\n  return new kubemq.Subscribe({\n    SubscribeTypeData: kubemq.Subscribe.SubscribeType.Queries,\n    ClientID: clientId,\n    Channel: channel,\n    Group: group ?? '',\n  });\n}\n\nexport function toProtoRequest(\n  msg: CommandMessage | QueryMessage,\n  clientId: string,\n  type: 'Command' | 'Query',\n): kubemq.Request {\n  const req = new kubemq.Request({\n    RequestID: msg.id ?? randomUUID(),\n    RequestTypeData:\n      type === 'Command' ? kubemq.Request.RequestType.Command : kubemq.Request.RequestType.Query,\n    ClientID: msg.clientId ?? clientId,\n    Channel: msg.channel,\n    Metadata: msg.metadata ?? '',\n    Body: msg.body !== undefined ? bodyBytes(msg.body) : new Uint8Array(0),\n    Timeout: msg.timeoutInSeconds * 1000,\n    Tags: toTagsMap(msg.tags),\n  });\n\n  if (type === 'Query') {\n    const queryMsg = msg as QueryMessage;\n    if (queryMsg.cacheKey) req.CacheKey = queryMsg.cacheKey;\n    if (queryMsg.cacheTtlInSeconds) req.CacheTTL = queryMsg.cacheTtlInSeconds;\n  }\n\n  const msgRecord = msg as unknown as Record<string, unknown>;\n  if (msgRecord.span) req.Span = msgRecord.span as Uint8Array;\n\n  return req;\n}\n\nexport function toProtoResponse(\n  resp: CommandResponse | QueryResponse,\n  clientId: string,\n): kubemq.Response {\n  const pbResp = new kubemq.Response({\n    ClientID: resp.clientId ?? clientId,\n    RequestID: resp.id,\n    ReplyChannel: resp.replyChannel,\n    Executed: resp.executed,\n    Error: resp.error ?? '',\n    Tags: toTagsMap(resp.tags),\n    Timestamp: resp.timestamp ? resp.timestamp.getTime() : Date.now(),\n  });\n\n  const queryResp = resp as QueryResponse;\n  if (queryResp.metadata) pbResp.Metadata = queryResp.metadata;\n  if (queryResp.body) pbResp.Body = queryResp.body;\n\n  const respRecord = resp as unknown as Record<string, unknown>;\n  if (respRecord.span) pbResp.Span = respRecord.span as Uint8Array;\n\n  return pbResp;\n}\n\nexport function toProtoQueueMessage(msg: QueueMessage, clientId: string): kubemq.QueueMessage {\n  const pbMsg = new kubemq.QueueMessage({\n    MessageID: msg.id ?? randomUUID(),\n    ClientID: msg.clientId ?? clientId,\n    Channel: msg.channel,\n    Metadata: msg.metadata ?? '',\n    Body: msg.body !== undefined ? bodyBytes(msg.body) : new Uint8Array(0),\n    Tags: toTagsMap(msg.tags),\n  });\n\n  if (msg.policy) {\n    pbMsg.Policy = new kubemq.QueueMessagePolicy({\n      ExpirationSeconds: msg.policy.expirationSeconds ?? 0,\n      DelaySeconds: msg.policy.delaySeconds ?? 0,\n      MaxReceiveCount: msg.policy.maxReceiveCount ?? 0,\n      MaxReceiveQueue: msg.policy.maxReceiveQueue ?? '',\n    });\n  }\n\n  return pbMsg;\n}\n\nexport function toProtoReceiveQueueRequest(\n  req: QueuePollRequest,\n  clientId: string,\n): kubemq.ReceiveQueueMessagesRequest {\n  return new kubemq.ReceiveQueueMessagesRequest({\n    RequestID: randomUUID(),\n    ClientID: clientId,\n    Channel: req.channel,\n    MaxNumberOfMessages: req.maxMessages ?? 1,\n    WaitTimeSeconds: req.waitTimeoutSeconds,\n    IsPeak: false,\n  });\n}\n\nexport function toProtoBatchRequest(\n  messages: kubemq.QueueMessage[],\n): kubemq.QueueMessagesBatchRequest {\n  return new kubemq.QueueMessagesBatchRequest({\n    BatchID: randomUUID(),\n    Messages: messages,\n  });\n}\n\n// ─── Proto → SDK ─────────────────────────────────────────────────────\n/* eslint-disable @typescript-eslint/no-unnecessary-condition */\n// int64 fields can be Long/BigInt at runtime despite TS declaring number — Number() is needed.\n/* eslint-disable @typescript-eslint/no-unnecessary-type-conversion */\n\nexport function fromProtoPingResult(result: kubemq.PingResult): ServerInfo {\n  return {\n    host: result.Host,\n    version: result.Version,\n    serverStartTime: Number(result.ServerStartTime),\n    serverUpTime: Number(result.ServerUpTimeSeconds),\n  };\n}\n\nexport function fromProtoResult(result: kubemq.Result, operation: string): void {\n  if (!result.Sent) {\n    throw new KubeMQError({\n      code: ErrorCode.Fatal,\n      message: result.Error || 'Event send failed',\n      operation,\n      isRetryable: false,\n    });\n  }\n}\n\nexport function fromProtoEventStoreResult(result: kubemq.Result): EventStoreResult {\n  return {\n    id: result.EventID,\n    sent: result.Sent,\n    error: result.Error || '',\n  };\n}\n\nexport function fromProtoReceivedEvent(data: kubemq.EventReceive): EventReceived {\n  return {\n    id: data.EventID,\n    channel: data.Channel,\n    timestamp: new Date(Number(data.Timestamp) / 1_000_000),\n    body: data.Body instanceof Uint8Array ? data.Body : new Uint8Array(0),\n    metadata: data.Metadata,\n    tags: fromTagsMap(data.Tags),\n  };\n}\n\nexport function fromProtoReceivedEventStore(data: kubemq.EventReceive): EventStoreReceived {\n  return {\n    id: data.EventID,\n    channel: data.Channel,\n    timestamp: new Date(Number(data.Timestamp) / 1_000_000),\n    body: data.Body instanceof Uint8Array ? data.Body : new Uint8Array(0),\n    metadata: data.Metadata,\n    tags: fromTagsMap(data.Tags),\n    sequence: Number(data.Sequence),\n  };\n}\n\nexport function fromProtoReceivedCommand(data: kubemq.Request): CommandReceived {\n  return {\n    id: data.RequestID,\n    channel: data.Channel,\n    fromClientId: data.ClientID,\n    timestamp: new Date(),\n    body: data.Body instanceof Uint8Array ? data.Body : new Uint8Array(0),\n    metadata: data.Metadata,\n    replyChannel: data.ReplyChannel,\n    tags: fromTagsMap(data.Tags),\n  };\n}\n\nexport function fromProtoReceivedQuery(data: kubemq.Request): QueryReceived {\n  return {\n    id: data.RequestID,\n    channel: data.Channel,\n    fromClientId: data.ClientID,\n    timestamp: new Date(),\n    body: data.Body instanceof Uint8Array ? data.Body : new Uint8Array(0),\n    metadata: data.Metadata,\n    replyChannel: data.ReplyChannel,\n    tags: fromTagsMap(data.Tags),\n  };\n}\n\nexport function fromProtoCommandResponse(data: kubemq.Response): CommandResponse {\n  return {\n    id: data.RequestID,\n    replyChannel: data.ReplyChannel,\n    clientId: data.ClientID || undefined,\n    executed: data.Executed,\n    error: data.Error || undefined,\n    metadata: data.Metadata || undefined,\n    body: data.Body instanceof Uint8Array && data.Body.length > 0 ? data.Body : undefined,\n    tags: fromTagsMap(data.Tags),\n    timestamp: data.Timestamp ? new Date(Number(data.Timestamp)) : undefined,\n  };\n}\n\nexport function fromProtoQueryResponse(data: kubemq.Response): QueryResponse {\n  return {\n    id: data.RequestID,\n    replyChannel: data.ReplyChannel,\n    clientId: data.ClientID || undefined,\n    executed: data.Executed,\n    error: data.Error || undefined,\n    metadata: data.Metadata || undefined,\n    body: data.Body instanceof Uint8Array && data.Body.length > 0 ? data.Body : undefined,\n    tags: fromTagsMap(data.Tags),\n    timestamp: data.Timestamp ? new Date(Number(data.Timestamp)) : undefined,\n    cacheHit: data.CacheHit,\n  };\n}\n\nexport function fromProtoQueueSendResult(\n  result: kubemq.SendQueueMessageResult,\n  operation: string,\n): QueueSendResult {\n  if (result.IsError) {\n    throw new KubeMQError({\n      code: ErrorCode.Fatal,\n      message: result.Error || 'Queue send failed',\n      operation,\n      isRetryable: false,\n    });\n  }\n  return {\n    messageId: result.MessageID,\n    sentAt: new Date(Number(result.SentAt) / 1e6),\n    expirationAt: result.ExpirationAt ? new Date(Number(result.ExpirationAt) / 1e6) : undefined,\n    delayedTo: result.DelayedTo ? new Date(Number(result.DelayedTo) / 1e6) : undefined,\n  };\n}\n\nexport function fromProtoBatchResponse(\n  response: kubemq.QueueMessagesBatchResponse,\n): BatchSendResult {\n  const results = (response.Results || []).map((r, index) => ({\n    index,\n    messageId: r.IsError ? undefined : r.MessageID || undefined,\n    error: r.IsError\n      ? new KubeMQError({\n          code: ErrorCode.Fatal,\n          message: r.Error || 'Batch item failed',\n          operation: 'sendQueueMessagesBatch',\n          isRetryable: false,\n        })\n      : undefined,\n  }));\n\n  const successCount = results.filter((r) => !r.error).length;\n  return {\n    results,\n    successCount,\n    failureCount: results.length - successCount,\n  };\n}\n\nexport function fromProtoReceivedQueueMessage(\n  msg: kubemq.QueueMessage,\n): Omit<ReceivedQueueMessage, 'ack' | 'nack' | 'reQueue'> {\n  const attrs = msg.Attributes;\n  return {\n    id: msg.MessageID,\n    channel: msg.Channel,\n    fromClientId: msg.ClientID,\n    body: msg.Body instanceof Uint8Array ? msg.Body : new Uint8Array(0),\n    metadata: msg.Metadata,\n    tags: fromTagsMap(msg.Tags),\n    timestamp: attrs ? new Date(Number(attrs.Timestamp) / 1_000_000) : new Date(),\n    sequence: attrs ? Number(attrs.Sequence) : 0,\n    receiveCount: attrs ? attrs.ReceiveCount : 0,\n    isReRouted: attrs ? attrs.ReRouted : false,\n    reRouteFromQueue: attrs?.ReRoutedFromQueue || undefined,\n    expiredAt: attrs?.ExpirationAt ? new Date(Number(attrs.ExpirationAt) / 1e6) : undefined,\n    delayedTo: attrs?.DelayedTo ? new Date(Number(attrs.DelayedTo) / 1e6) : undefined,\n  };\n}\n\nexport function fromProtoReceiveQueueResponse(\n  response: kubemq.ReceiveQueueMessagesResponse,\n  operation: string,\n): Omit<ReceivedQueueMessage, 'ack' | 'nack' | 'reQueue'>[] {\n  if (response.IsError) {\n    throw new KubeMQError({\n      code: ErrorCode.Fatal,\n      message: response.Error || 'Queue receive failed',\n      operation,\n      isRetryable: false,\n    });\n  }\n  return (response.Messages || []).map(fromProtoReceivedQueueMessage);\n}\n\nexport function toProtoQueuesUpstreamRequest(\n  msgs: QueueMessage[],\n  clientId: string,\n): kubemq.QueuesUpstreamRequest {\n  return new kubemq.QueuesUpstreamRequest({\n    RequestID: randomUUID(),\n    Messages: msgs.map((m) => toProtoQueueMessage(m, clientId)),\n  });\n}\n\nexport function fromProtoQueuesUpstreamResponse(\n  response: kubemq.QueuesUpstreamResponse,\n  _operation: string,\n): { requestId: string; results: QueueSendResult[]; isError: boolean; error?: string } {\n  return {\n    requestId: response.RefRequestID,\n    results: (response.Results || []).map((r) => ({\n      messageId: r.MessageID,\n      sentAt: new Date(Number(r.SentAt) / 1e6),\n      expirationAt: r.ExpirationAt ? new Date(Number(r.ExpirationAt) / 1e6) : undefined,\n      delayedTo: r.DelayedTo ? new Date(Number(r.DelayedTo) / 1e6) : undefined,\n    })),\n    isError: response.IsError,\n    error: response.Error || undefined,\n  };\n}\n\nexport function toProtoQueuesDownstreamRequest(\n  opts: QueueStreamOptions,\n  clientId: string,\n): kubemq.QueuesDownstreamRequest {\n  const req = new kubemq.QueuesDownstreamRequest({\n    RequestID: randomUUID(),\n    ClientID: clientId,\n    Channel: opts.channel,\n    MaxItems: opts.maxMessages ?? 1,\n    WaitTimeout: (opts.waitTimeoutSeconds ?? 5) * 1000,\n    AutoAck: opts.autoAck ?? false,\n    RequestTypeData: 1,\n  });\n  if (opts.metadata) {\n    const map = new Map<string, string>();\n    for (const [k, v] of Object.entries(opts.metadata)) {\n      map.set(k, v);\n    }\n    req.Metadata = map;\n  }\n  return req;\n}\n\nexport { fromTagsMap, toTagsMap };\n","/** @internal */\n\nimport type { Subscription } from '../../messages/subscription.js';\nimport type { StreamHandle } from './transport.js';\nimport type { Logger } from '../../logger.js';\n\n/**\n * Wraps a transport-level StreamHandle to implement the public\n * Subscription interface with isActive tracking and clean cancel.\n *\n * The rebind() method supports reconnection (MAJ-R2): removes old\n * listeners before attaching to a new stream.\n */\nexport class GrpcSubscriptionHandle implements Subscription {\n  private _isActive = true;\n  private _stream: StreamHandle<never, unknown>;\n  private readonly logger: Logger;\n  private readonly operationName: string;\n\n  constructor(stream: StreamHandle<never, unknown>, logger: Logger, operationName: string) {\n    this._stream = stream;\n    this.logger = logger;\n    this.operationName = operationName;\n    this.attachLifecycleListeners(stream);\n  }\n\n  get isActive(): boolean {\n    return this._isActive;\n  }\n\n  cancel(): void {\n    if (!this._isActive) return;\n    this._isActive = false;\n    this._stream.cancel();\n    this.logger.debug('Subscription cancelled', { operation: this.operationName });\n  }\n\n  /**\n   * Replace the underlying stream after a successful reconnection.\n   * H2 fix: removes old listeners to prevent ghost callbacks and memory leaks.\n   */\n  rebind(newStream: StreamHandle<never, unknown>): void {\n    // H2 fix: remove all listeners from old stream before cancelling\n    this._stream.removeAllListeners();\n    this._stream.cancel();\n    this._stream = newStream;\n    this._isActive = true;\n    this.attachLifecycleListeners(newStream);\n  }\n\n  private attachLifecycleListeners(stream: StreamHandle<never, unknown>): void {\n    stream.onEnd(() => {\n      this._isActive = false;\n    });\n    stream.onError(() => {\n      this._isActive = false;\n    });\n  }\n}\n","/** @internal — gRPC status → KubeMQError mapping, not part of public API */\n\nimport type { RawTransportError } from '../transport/transport.js';\nimport {\n  type KubeMQError,\n  type KubeMQErrorOptions,\n  ConnectionError,\n  AuthenticationError,\n  AuthorizationError,\n  ValidationError,\n  KubeMQTimeoutError,\n  TransientError,\n  ThrottlingError,\n  NotFoundError,\n  FatalError,\n  CancellationError,\n  ErrorCode,\n} from '../../errors.js';\n\n// ─── gRPC Status Constants (decoupled from @grpc/grpc-js) ───────────\n\nconst Status = {\n  OK: 0,\n  CANCELLED: 1,\n  UNKNOWN: 2,\n  INVALID_ARGUMENT: 3,\n  DEADLINE_EXCEEDED: 4,\n  NOT_FOUND: 5,\n  ALREADY_EXISTS: 6,\n  PERMISSION_DENIED: 7,\n  RESOURCE_EXHAUSTED: 8,\n  FAILED_PRECONDITION: 9,\n  ABORTED: 10,\n  OUT_OF_RANGE: 11,\n  UNIMPLEMENTED: 12,\n  INTERNAL: 13,\n  UNAVAILABLE: 14,\n  DATA_LOSS: 15,\n  UNAUTHENTICATED: 16,\n} as const;\n\n// ─── Suggestion Map ─────────────────────────────────────────────────\n\nexport const SUGGESTIONS: Readonly<Record<ErrorCode, string>> = {\n  [ErrorCode.ConnectionTimeout]: 'Check server connectivity and firewall rules.',\n  [ErrorCode.AuthFailed]: 'Verify your auth token is valid and not expired.',\n  [ErrorCode.ValidationFailed]:\n    'Check the request parameters — channel name may be empty or body missing.',\n  [ErrorCode.Unavailable]: 'Server is temporarily unavailable. The SDK will retry automatically.',\n  [ErrorCode.Timeout]: 'Operation timed out. Consider increasing the timeout value.',\n  [ErrorCode.Throttled]: 'Server is rate-limiting requests. Reduce send rate or increase backoff.',\n  [ErrorCode.NotFound]: 'The target channel or queue does not exist. Verify the channel name.',\n  [ErrorCode.PermissionDenied]:\n    'You do not have permission for this operation. Check your credentials and ACLs.',\n  [ErrorCode.Fatal]: 'An unrecoverable server error occurred. Contact your KubeMQ administrator.',\n  [ErrorCode.Cancelled]: 'The operation was cancelled.',\n  [ErrorCode.BufferFull]: 'Message buffer is full. Wait for reconnection or increase buffer size.',\n  [ErrorCode.StreamBroken]: 'The stream was broken. The SDK will attempt to reconnect.',\n  [ErrorCode.ClientClosed]: 'The client has been closed. Create a new client instance.',\n  [ErrorCode.NotImplemented]: 'This feature is not implemented in the current server version.',\n  [ErrorCode.ConfigurationError]:\n    'Check your client configuration — TLS certificates or connection settings may be invalid.',\n  [ErrorCode.ConnectionNotReady]:\n    'Connection is not ready yet. Wait for the client to connect or check server availability.',\n  [ErrorCode.RetryExhausted]: 'All retry attempts have been exhausted. Check server health.',\n};\n\n// ─── Map Context ─────────────────────────────────────────────────────\n\nexport interface MapContext {\n  operation: string;\n  channel?: string;\n  serverAddress?: string;\n  localSignalAborted?: boolean;\n}\n\n// ─── mapGrpcError ────────────────────────────────────────────────────\n\n/**\n * Map a transport-layer error to the appropriate KubeMQError subclass.\n * The original error is preserved via `cause` for debugging.\n */\nexport function mapGrpcError(err: RawTransportError, ctx: MapContext): KubeMQError {\n  const baseOpts: KubeMQErrorOptions = {\n    message: err.details || err.message,\n    operation: ctx.operation,\n    channel: ctx.channel,\n    cause: err,\n    statusCode: err.code,\n    serverAddress: ctx.serverAddress,\n  };\n\n  switch (err.code) {\n    case Status.OK:\n      throw new Error('mapGrpcError called with OK status');\n\n    case Status.CANCELLED:\n      if (ctx.localSignalAborted) {\n        return new CancellationError({\n          ...baseOpts,\n          suggestion: SUGGESTIONS[ErrorCode.Cancelled],\n        });\n      }\n      return new TransientError({\n        ...baseOpts,\n        suggestion: 'Server cancelled the request. The SDK will retry.',\n      });\n\n    case Status.UNKNOWN:\n      return new TransientError({\n        ...baseOpts,\n        suggestion: 'Unknown error from server or proxy. Will retry at most once.',\n      });\n\n    case Status.INVALID_ARGUMENT:\n      return new ValidationError({\n        ...baseOpts,\n        suggestion: SUGGESTIONS[ErrorCode.ValidationFailed],\n      });\n\n    case Status.DEADLINE_EXCEEDED:\n      return new KubeMQTimeoutError({\n        ...baseOpts,\n        suggestion: SUGGESTIONS[ErrorCode.Timeout],\n      });\n\n    case Status.NOT_FOUND:\n      return new NotFoundError({\n        ...baseOpts,\n        suggestion: SUGGESTIONS[ErrorCode.NotFound],\n      });\n\n    case Status.ALREADY_EXISTS:\n      return new ValidationError({\n        ...baseOpts,\n        suggestion: 'Resource already exists. Use a different name or check existing resources.',\n      });\n\n    case Status.PERMISSION_DENIED:\n      return new AuthorizationError({\n        ...baseOpts,\n        suggestion: SUGGESTIONS[ErrorCode.PermissionDenied],\n      });\n\n    case Status.RESOURCE_EXHAUSTED:\n      return new ThrottlingError({\n        ...baseOpts,\n        suggestion: SUGGESTIONS[ErrorCode.Throttled],\n      });\n\n    case Status.FAILED_PRECONDITION:\n      return new ValidationError({\n        ...baseOpts,\n        suggestion: 'State precondition not met. Check the operation prerequisites.',\n      });\n\n    case Status.ABORTED:\n      return new TransientError({\n        ...baseOpts,\n        suggestion: 'Transaction conflict. The SDK will retry.',\n      });\n\n    case Status.OUT_OF_RANGE:\n      return new ValidationError({\n        ...baseOpts,\n        suggestion: 'Iterator or pagination boundary exceeded.',\n      });\n\n    case Status.UNIMPLEMENTED:\n      return new FatalError({\n        ...baseOpts,\n        code: ErrorCode.NotImplemented,\n        suggestion: 'This feature is not supported by the server. Check server version.',\n      });\n\n    case Status.INTERNAL: {\n      // Server-side command/query timeouts arrive as INTERNAL with \"timeout\" in message.\n      const msg = (err.details || err.message || '').toLowerCase();\n      if (msg.includes('timeout') || msg.includes('deadline exceeded')) {\n        return new KubeMQTimeoutError({\n          ...baseOpts,\n          suggestion: SUGGESTIONS[ErrorCode.Timeout],\n        });\n      }\n      return new FatalError({\n        ...baseOpts,\n        suggestion: SUGGESTIONS[ErrorCode.Fatal],\n      });\n    }\n\n    case Status.UNAVAILABLE:\n      return new ConnectionError({\n        ...baseOpts,\n        code: ErrorCode.Unavailable,\n        suggestion: SUGGESTIONS[ErrorCode.Unavailable],\n      });\n\n    case Status.DATA_LOSS:\n      return new FatalError({\n        ...baseOpts,\n        suggestion: 'Unrecoverable data loss. Contact your KubeMQ administrator.',\n      });\n\n    case Status.UNAUTHENTICATED:\n      return new AuthenticationError({\n        ...baseOpts,\n        suggestion: SUGGESTIONS[ErrorCode.AuthFailed],\n      });\n\n    default:\n      return new FatalError({\n        ...baseOpts,\n        suggestion: `Unknown gRPC status code: ${String(err.code)}`,\n      });\n  }\n}\n\n// ─── Handler Error Wrapping ─────────────────────────────────────────\n\nimport { HandlerError } from '../../errors.js';\n\n/**\n * Wrap a user-provided message handler so that exceptions are caught\n * and reported via onError instead of killing the stream.\n */\nexport function wrapHandler<T>(\n  handler: (msg: T) => void,\n  onError: (err: KubeMQError) => void,\n): (msg: T) => void {\n  return (msg: T) => {\n    try {\n      handler(msg);\n    } catch (err: unknown) {\n      const handlerError = new HandlerError({\n        message: `Message handler threw: ${err instanceof Error ? err.message : String(err)}`,\n        operation: 'messageHandler',\n        cause: err instanceof Error ? err : undefined,\n        suggestion: 'Fix the exception in your message handler function.',\n      });\n      onError(handlerError);\n    }\n  };\n}\n\n/**\n * Resolve the error handler: use the user-provided callback, or fall\n * back to logging at ERROR level.\n */\nexport function resolveErrorHandler(\n  onError: ((err: KubeMQError) => void) | undefined,\n  logger: { error(msg: string, fields?: Record<string, unknown>): void },\n): (err: KubeMQError) => void {\n  if (onError) return onError;\n  return (err) => {\n    logger.error('Unhandled subscription error (no onError callback registered)', {\n      code: err.code,\n      message: err.message,\n      operation: err.operation,\n      channel: err.channel,\n    });\n  };\n}\n","/**\n * Lightweight async semaphore for callback concurrency control.\n * Implements the p-limit pattern inline — no external dependencies.\n */\nexport class AsyncSemaphore {\n  private permits: number;\n  private readonly waiters: (() => void)[] = [];\n\n  constructor(maxConcurrency: number) {\n    if (maxConcurrency < 1) {\n      throw new RangeError(`maxConcurrency must be >= 1, got ${String(maxConcurrency)}`);\n    }\n    this.permits = maxConcurrency;\n  }\n\n  /**\n   * Acquire a permit. Resolves immediately if available,\n   * otherwise waits until one is released.\n   */\n  async acquire(): Promise<void> {\n    if (this.permits > 0) {\n      this.permits--;\n      return;\n    }\n    return new Promise<void>((resolve) => {\n      this.waiters.push(resolve);\n    });\n  }\n\n  /** Release a permit. Wakes the oldest waiting acquirer if any. */\n  release(): void {\n    const next = this.waiters.shift();\n    if (next) {\n      next();\n    } else {\n      this.permits++;\n    }\n  }\n\n  /** Execute an async function with semaphore-controlled concurrency. */\n  async run<T>(fn: () => T | Promise<T>): Promise<T> {\n    await this.acquire();\n    try {\n      return await fn();\n    } finally {\n      this.release();\n    }\n  }\n\n  /** Number of tasks currently waiting for a permit. */\n  get waiting(): number {\n    return this.waiters.length;\n  }\n\n  /** Number of available permits. */\n  get available(): number {\n    return this.permits;\n  }\n}\n","import { AsyncSemaphore } from './semaphore.js';\nimport { HandlerError, ErrorCode, type KubeMQError } from '../../errors.js';\nimport type { Logger } from '../../logger.js';\n\nexport interface CallbackDispatcherOptions {\n  maxConcurrent: number;\n  /** Maximum number of messages waiting in the semaphore queue before triggering backpressure. Default: 1000. */\n  maxQueueDepth?: number;\n  /**\n   * If true, drop messages when queue depth exceeds maxQueueDepth instead of\n   * calling onHighWater (which pauses the stream). Default: false.\n   */\n  dropOnHighWater?: boolean;\n  logger: Logger;\n  onError: (err: KubeMQError) => void;\n  /** Called when the internal queue depth reaches maxQueueDepth — pause the source stream. */\n  onHighWater?: () => void;\n  /** Called when the internal queue depth drops below maxQueueDepth/2 — resume the source stream. */\n  onLowWater?: () => void;\n}\n\n/**\n * Dispatches subscription callbacks with configurable concurrency.\n *\n * Default concurrency = 1 ensures sequential processing (Node.js event loop\n * natural behavior preserved). Higher concurrency enables parallel processing\n * at the cost of message ordering.\n *\n * C3 fix: Added high/low water mark backpressure to prevent unbounded queue growth\n * when the gRPC stream delivers messages faster than the handler can process them.\n *\n * @remarks\n * `this.active++` is in synchronous position (before the async callback\n * starts) to prevent a race condition where `drain()` resolves before\n * the callback has been scheduled.\n */\nexport class CallbackDispatcher<T> {\n  private readonly semaphore: AsyncSemaphore;\n  private readonly logger: Logger;\n  private readonly onError: (err: KubeMQError) => void;\n  private readonly maxQueueDepth: number;\n  private readonly onHighWater?: () => void;\n  private readonly onLowWater?: () => void;\n  private readonly _dropOnHighWater: boolean;\n  private active = 0;\n  private _closed = false;\n  private _paused = false;\n  private _dropCount = 0;\n  private drainResolvers: (() => void)[] = [];\n\n  constructor(opts: CallbackDispatcherOptions) {\n    this.semaphore = new AsyncSemaphore(opts.maxConcurrent);\n    this.logger = opts.logger;\n    this.onError = opts.onError;\n    this.maxQueueDepth = opts.maxQueueDepth ?? 1000;\n    this._dropOnHighWater = opts.dropOnHighWater ?? false;\n    this.onHighWater = opts.onHighWater;\n    this.onLowWater = opts.onLowWater;\n  }\n\n  /**\n   * Dispatch a message to the handler with concurrency control.\n   * Handler exceptions are caught and forwarded to onError — they never\n   * terminate the subscription (GS-01 REQ-ERR-9).\n   */\n  dispatch(handler: (msg: T) => void | Promise<void>, msg: T): void {\n    if (this._closed) return;\n\n    // C3 fix: check high water mark — either drop or pause\n    if (this.semaphore.waiting >= this.maxQueueDepth) {\n      if (this._dropOnHighWater) {\n        this._dropCount++;\n        return; // silently drop — do not pause stream\n      }\n      if (!this._paused && this.onHighWater) {\n        this._paused = true;\n        this.onHighWater();\n      }\n    }\n\n    // CRIT-R2: increment synchronously before any async work\n    this.active++;\n\n    const run = async (): Promise<void> => {\n      try {\n        await this.semaphore.run(async () => {\n          await handler(msg);\n        });\n      } catch (err: unknown) {\n        const handlerErr = new HandlerError({\n          code: ErrorCode.Fatal,\n          message: `Message handler threw: ${err instanceof Error ? err.message : String(err)}`,\n          operation: 'messageHandler',\n          isRetryable: false,\n          cause: err instanceof Error ? err : undefined,\n          suggestion: 'Fix the exception in your message handler function.',\n        });\n        this.logger.error('Subscription callback error', {\n          error: handlerErr.message,\n        });\n        this.onError(handlerErr);\n      } finally {\n        this.active--;\n\n        // C3 fix: check low water mark and signal resume\n        if (this._paused && this.onLowWater && this.semaphore.waiting < this.maxQueueDepth / 2) {\n          this._paused = false;\n          this.onLowWater();\n        }\n\n        if (this.active === 0) {\n          for (const resolve of this.drainResolvers.splice(0)) {\n            resolve();\n          }\n        }\n      }\n    };\n\n    void run();\n  }\n\n  /**\n   * Wait for all in-flight callbacks to complete.\n   * Resolves immediately if no callbacks are active.\n   * Used during graceful shutdown (REQ-CONC-5).\n   */\n  async drain(): Promise<void> {\n    if (this.active === 0) return;\n    return new Promise<void>((resolve) => {\n      this.drainResolvers.push(resolve);\n    });\n  }\n\n  get inFlightCount(): number {\n    return this.active;\n  }\n\n  get isClosed(): boolean {\n    return this._closed;\n  }\n\n  /** Number of messages dropped due to dropOnHighWater mode. */\n  get dropCount(): number {\n    return this._dropCount;\n  }\n\n  close(): void {\n    this._closed = true;\n    // Resolve any pending drain() waiters so they don't hang\n    for (const resolve of this.drainResolvers.splice(0)) {\n      resolve();\n    }\n  }\n}\n","/**\n * @internal — Abstract base class for shared bidi streaming senders.\n *\n * Provides: bounded queue, setImmediate-based drain loop with write\n * backpressure, transport state integration (no self-reconnect),\n * deadline sweep, AbortSignal support, error handler fan-out, and\n * observability stats.\n *\n * Subclasses implement openStream(), extractPendingKey(), handleResponse().\n */\nimport type { StreamHandle } from '../transport/transport.js';\nimport { ConnectionState } from '../transport/connection-state.js';\nimport {\n  BufferFullError,\n  SenderDisconnectedError,\n  SenderClosedError,\n  KubeMQTimeoutError,\n  CancellationError,\n  KubeMQError,\n  ErrorCode,\n} from '../../errors.js';\nimport type { Logger } from '../../logger.js';\n\n// gRPC status codes used for error differentiation\nconst GRPC_CANCELLED = 1;\nconst GRPC_PERMISSION_DENIED = 7;\nconst GRPC_UNAUTHENTICATED = 16;\n\nexport type SenderStreamState = 'initializing' | 'connected' | 'reconnecting' | 'closed';\n\nexport interface SenderStats {\n  queueDepth: number;\n  pendingAcks: number;\n  streamState: SenderStreamState;\n  reconnectionCount: number;\n}\n\nexport interface BaseSenderOptions {\n  maxQueueSize: number;\n  logger: Logger;\n  clientId: string;\n  closeTimeoutMs?: number;\n}\n\nexport interface QueueItem<TReq> {\n  request: TReq;\n  resolve?: (value: unknown) => void;\n  reject?: (err: Error) => void;\n  deadline?: Date;\n  signal?: AbortSignal;\n  abortHandler?: () => void;\n}\n\nexport abstract class BaseStreamingSender<TReq, TRes, TPendingKey> {\n  protected readonly logger: Logger;\n  protected readonly clientId: string;\n  protected readonly maxQueueSize: number;\n  protected readonly closeTimeoutMs: number;\n\n  protected stream: StreamHandle<TReq, TRes> | null = null;\n  protected queue: QueueItem<TReq>[] = [];\n  protected pendingMap = new Map<\n    TPendingKey,\n    { resolve: (value: unknown) => void; reject: (err: Error) => void; deadline?: Date }\n  >();\n  protected errorHandlers = new Set<(err: Error) => void>();\n\n  protected _streamState: SenderStreamState = 'initializing';\n  protected _closed = false;\n  protected _drainScheduled = false;\n  protected _drainPaused = false;\n  protected _reconnectionCount = 0;\n  protected _sweepInterval: ReturnType<typeof setInterval> | null = null;\n\n  // Transport state listener — stored for cleanup\n  private _stateChangeHandler: ((state: ConnectionState) => void) | null = null;\n  private _transportOn:\n    | ((event: 'stateChange', handler: (state: ConnectionState) => void) => void)\n    | null = null;\n  private _transportOff:\n    | ((event: 'stateChange', handler: (state: ConnectionState) => void) => void)\n    | null = null;\n  private _transportDuplexStream: (<TW, TR>(method: string) => StreamHandle<TW, TR>) | null = null;\n\n  constructor(opts: BaseSenderOptions) {\n    this.logger = opts.logger;\n    this.clientId = opts.clientId;\n    this.maxQueueSize = opts.maxQueueSize;\n    this.closeTimeoutMs = opts.closeTimeoutMs ?? 5000;\n  }\n\n  /** Subclass provides the gRPC method name to open the bidi stream. */\n  protected abstract grpcMethod(): string;\n\n  /** Extract the pending-map key from a request (for storing before write). */\n  protected abstract extractRequestKey(request: TReq): TPendingKey | null;\n\n  /** Extract the pending-map key from a response (for matching ACKs). */\n  protected abstract extractResponseKey(response: TRes): TPendingKey | null;\n\n  /** Return true if the response indicates success. */\n  protected abstract isResponseSuccess(response: TRes): boolean;\n\n  /** Extract an error message from a failed response. */\n  protected abstract responseErrorMessage(response: TRes): string;\n\n  /**\n   * Subscribe to transport state changes and optionally open the stream.\n   * Must be called once after construction.\n   */\n  start(transport: {\n    on(event: 'stateChange', handler: (state: ConnectionState) => void): void;\n    off(event: 'stateChange', handler: (state: ConnectionState) => void): void;\n    duplexStream<TW, TR>(method: string): StreamHandle<TW, TR>;\n    readonly state: ConnectionState;\n  }): void {\n    this._transportOn = transport.on.bind(transport);\n    this._transportOff = transport.off.bind(transport);\n    this._transportDuplexStream = transport.duplexStream.bind(transport);\n\n    this._stateChangeHandler = (state: ConnectionState) => {\n      this._handleStateChange(state);\n    };\n    this._transportOn('stateChange', this._stateChangeHandler);\n\n    // Start deadline sweep\n    this._sweepInterval = setInterval(() => {\n      this._sweepExpiredPending();\n    }, 1000);\n    if (typeof this._sweepInterval === 'object' && 'unref' in this._sweepInterval) {\n      this._sweepInterval.unref();\n    }\n\n    // If transport is already READY, open stream now\n    if (transport.state === ConnectionState.READY) {\n      this._openStream();\n    }\n  }\n\n  /** Enqueue a request. Returns a Promise for tracked items, void for fire-and-forget. */\n  protected enqueue(\n    request: TReq,\n    tracked: boolean,\n    deadline?: Date,\n    signal?: AbortSignal,\n  ): Promise<TRes> | undefined {\n    if (this._closed) {\n      throw new SenderClosedError({\n        message: 'Sender is closed',\n        operation: 'send',\n      });\n    }\n\n    if (signal?.aborted) {\n      throw new CancellationError({\n        message: 'Send cancelled',\n        operation: 'send',\n      });\n    }\n\n    if (!tracked) {\n      // Fire-and-forget: reject immediately if queue full\n      if (this.queue.length >= this.maxQueueSize) {\n        throw new BufferFullError({\n          message: 'Send queue is full. Reduce send rate or increase maxQueueSize.',\n          operation: 'send',\n          isRetryable: false,\n        });\n      }\n      const item: QueueItem<TReq> = { request };\n      this.queue.push(item);\n      this._scheduleDrain();\n      return undefined;\n    }\n\n    // Tracked: return a Promise\n    return new Promise<TRes>((resolve, reject) => {\n      if (this.queue.length >= this.maxQueueSize) {\n        reject(\n          new BufferFullError({\n            message: 'Send queue is full. Reduce send rate or increase maxQueueSize.',\n            operation: 'send',\n            isRetryable: false,\n          }),\n        );\n        return;\n      }\n\n      const item: QueueItem<TReq> = {\n        request,\n        resolve: resolve as (value: unknown) => void,\n        reject,\n        deadline,\n        signal,\n      };\n\n      // Wire AbortSignal for in-queue cancellation\n      if (signal) {\n        item.abortHandler = () => {\n          const idx = this.queue.indexOf(item);\n          if (idx !== -1) {\n            this.queue.splice(idx, 1);\n            reject(\n              new CancellationError({\n                message: 'Send cancelled',\n                operation: 'send',\n              }),\n            );\n          }\n          // If not in queue (already written), signal is ignored — deadline governs.\n        };\n        signal.addEventListener('abort', item.abortHandler, { once: true });\n      }\n\n      this.queue.push(item);\n      this._scheduleDrain();\n    });\n  }\n\n  registerErrorHandler(handler: (err: Error) => void): () => void {\n    this.errorHandlers.add(handler);\n    return () => {\n      this.errorHandlers.delete(handler);\n    };\n  }\n\n  getStats(): SenderStats {\n    return {\n      queueDepth: this.queue.length,\n      pendingAcks: this.pendingMap.size,\n      streamState: this._streamState,\n      reconnectionCount: this._reconnectionCount,\n    };\n  }\n\n  private _closePromise: Promise<void> | null = null;\n\n  /** Issue 4 fix: concurrent close() calls share the same teardown promise. */\n  close(timeoutMs?: number): Promise<void> {\n    this._closePromise ??= this._doClose(timeoutMs);\n    return this._closePromise;\n  }\n\n  private async _doClose(timeoutMs?: number): Promise<void> {\n    this._closed = true;\n    this._streamState = 'closed';\n    this._drainPaused = false;\n\n    if (this._sweepInterval) clearInterval(this._sweepInterval);\n    this._sweepInterval = null;\n\n    if (this._stateChangeHandler && this._transportOff) {\n      this._transportOff('stateChange', this._stateChangeHandler);\n    }\n\n    // Reject all queued items — don't attempt to flush to stream to avoid\n    // backpressure issues and dangling promises from tracked items not\n    // entering pendingMap.\n    const closeErr = new SenderClosedError({\n      message: 'Sender closed with pending messages',\n      operation: 'send',\n    });\n    for (const item of this.queue) {\n      this._cleanupItemSignal(item);\n      item.reject?.(closeErr);\n    }\n    this.queue = [];\n\n    // Wait for pending acks up to timeout, then reject remaining.\n    const deadline = Date.now() + (timeoutMs ?? this.closeTimeoutMs);\n    const remaining = Math.max(0, deadline - Date.now());\n    if (this.pendingMap.size > 0 && remaining > 0) {\n      await new Promise<void>((resolve) => {\n        const timer = setTimeout(resolve, remaining);\n        if (typeof timer === 'object' && 'unref' in timer) timer.unref();\n\n        const checkDone = (): void => {\n          if (this.pendingMap.size === 0) {\n            clearTimeout(timer);\n            resolve();\n          }\n        };\n\n        // Wrap each pending entry so settlement triggers a drain check\n        for (const [key, entry] of this.pendingMap) {\n          const origResolve = entry.resolve;\n          const origReject = entry.reject;\n          this.pendingMap.set(key, {\n            ...entry,\n            resolve: (v: unknown) => {\n              origResolve(v);\n              checkDone();\n            },\n            reject: (e: Error) => {\n              origReject(e);\n              checkDone();\n            },\n          });\n        }\n      });\n    }\n\n    // Reject any still-pending\n    for (const [, entry] of this.pendingMap) {\n      entry.reject(\n        new SenderClosedError({\n          message: 'Sender closed with pending acks',\n          operation: 'send',\n        }),\n      );\n    }\n    this.pendingMap.clear();\n\n    // Close the stream\n    try {\n      this.stream?.end();\n    } catch {\n      /* ignore */\n    }\n    this.stream = null;\n  }\n\n  // ── Internal ──\n\n  private _openStream(): void {\n    if (this._closed || !this._transportDuplexStream) return;\n\n    try {\n      this.stream = this._transportDuplexStream<TReq, TRes>(this.grpcMethod());\n    } catch {\n      // Transport may not be ready — will retry on next READY state\n      this._streamState = 'reconnecting';\n      return;\n    }\n\n    this._streamState = 'connected';\n    this._drainPaused = false;\n\n    this.stream.onData((response: TRes) => {\n      const key = this.extractResponseKey(response);\n      if (key === null) return;\n      const entry = this.pendingMap.get(key);\n      if (!entry) return; // Late ACK after deadline expiry — silently ignored\n      this.pendingMap.delete(key);\n\n      if (this.isResponseSuccess(response)) {\n        entry.resolve(response);\n      } else {\n        entry.reject(\n          new KubeMQError({\n            code: ErrorCode.Fatal,\n            message: this.responseErrorMessage(response),\n            operation: this.grpcMethod(),\n            isRetryable: false,\n          }),\n        );\n      }\n    });\n\n    this.stream.onError((err: Error) => {\n      this._handleStreamError(err);\n    });\n    this.stream.onEnd(() => {\n      this._handleStreamEnd();\n    });\n\n    // Drain any queued items\n    this._scheduleDrain();\n  }\n\n  private _handleStreamError(err: Error): void {\n    if (this._closed) return;\n\n    const code = (err as { code?: number }).code;\n\n    // Permanent errors — close sender\n    if (code === GRPC_PERMISSION_DENIED || code === GRPC_UNAUTHENTICATED) {\n      this._rejectAllPending(err);\n      this._closed = true;\n      this._streamState = 'closed';\n      this.stream = null;\n      this._drainPaused = false;\n      this._emitError(err);\n      return;\n    }\n\n    // Cancelled — intentional, no reconnect\n    if (code === GRPC_CANCELLED) return;\n\n    // Transient errors (UNAVAILABLE, RESOURCE_EXHAUSTED, etc.) — reject pending, preserve queue\n    this._rejectAllPending(\n      new SenderDisconnectedError({\n        message: `Stream error: ${err.message}`,\n        operation: 'send',\n        cause: err,\n      }),\n    );\n    this.stream = null;\n    this._drainPaused = false;\n    this._streamState = 'reconnecting';\n    this._emitError(err);\n    // Transport's ReconnectionManager will emit READY when reconnected\n  }\n\n  private _handleStreamEnd(): void {\n    if (this._closed) return;\n    this._rejectAllPending(\n      new SenderDisconnectedError({\n        message: 'Stream ended by server',\n        operation: 'send',\n      }),\n    );\n    this.stream = null;\n    this._drainPaused = false;\n    this._streamState = 'reconnecting';\n  }\n\n  private _handleStateChange(state: ConnectionState): void {\n    if (this._closed) return;\n\n    if (state === ConnectionState.RECONNECTING) {\n      this._rejectAllPending(\n        new SenderDisconnectedError({\n          message: 'Transport reconnecting',\n          operation: 'send',\n        }),\n      );\n      this.stream = null;\n      this._drainPaused = false;\n      this._streamState = 'reconnecting';\n    } else if (state === ConnectionState.READY) {\n      this._reconnectionCount++;\n      this._openStream();\n    } else if (state === ConnectionState.CLOSED) {\n      this._rejectAllPending(\n        new SenderClosedError({\n          message: 'Transport closed',\n          operation: 'send',\n        }),\n      );\n      this.stream = null;\n      this._streamState = 'closed';\n      this._closed = true;\n    }\n  }\n\n  /**\n   * Drain synchronously when possible (stream connected + no backpressure).\n   * Only defers to setImmediate when called from contexts where sync drain\n   * is unsafe (backpressure resume, reconnection).\n   */\n  protected _scheduleDrain(): void {\n    if (this._drainPaused || this._closed) return;\n    // Drain synchronously — this avoids the 1-tick latency of setImmediate\n    // which was causing 2x throughput regression. The onData handler (ACK\n    // processing) runs in a separate event loop callback, so synchronous\n    // drain does not starve it.\n    this._drain();\n  }\n\n  private _scheduleDrainDeferred(): void {\n    if (this._drainScheduled || this._drainPaused || this._closed) return;\n    this._drainScheduled = true;\n    setImmediate(() => {\n      this._drainScheduled = false;\n      this._drain();\n    });\n  }\n\n  private static readonly DRAIN_BATCH_SIZE = 64;\n\n  private _drain(): void {\n    if (!this.stream || this._closed) return;\n\n    let written = 0;\n    while (this.queue.length > 0) {\n      const item = this.queue[0];\n      if (!item) break;\n\n      // Check deadline before writing\n      if (item.deadline && Date.now() > item.deadline.getTime()) {\n        this.queue.shift();\n        this._cleanupItemSignal(item);\n        item.reject?.(\n          new KubeMQTimeoutError({\n            message: 'Send deadline expired while queued',\n            operation: 'send',\n          }),\n        );\n        continue;\n      }\n\n      // Check abort signal\n      if (item.signal?.aborted) {\n        this.queue.shift();\n        this._cleanupItemSignal(item);\n        item.reject?.(\n          new CancellationError({\n            message: 'Send cancelled',\n            operation: 'send',\n          }),\n        );\n        continue;\n      }\n\n      // Remove from queue before writing\n      this.queue.shift();\n      this._cleanupItemSignal(item);\n\n      // Track in pendingMap if this item has resolve/reject (before write, for response matching)\n      if (item.resolve && item.reject) {\n        const key = this.extractRequestKey(item.request);\n        if (key !== null) {\n          this.pendingMap.set(key, {\n            resolve: item.resolve,\n            reject: item.reject,\n            deadline: item.deadline,\n          });\n        }\n      }\n\n      // Write to stream\n      const ok = this.stream.write(item.request);\n\n      if (!ok) {\n        // Backpressure: pause drain, re-register one-shot onDrain handler\n        this._drainPaused = true;\n        this.stream.onDrain(() => {\n          this._drainPaused = false;\n          this._scheduleDrainDeferred();\n        });\n        return;\n      }\n\n      written++;\n      if (written >= BaseStreamingSender.DRAIN_BATCH_SIZE && this.queue.length > 0) {\n        this._scheduleDrainDeferred();\n        return;\n      }\n    }\n  }\n\n  private _sweepExpiredPending(): void {\n    const now = Date.now();\n    for (const [key, entry] of this.pendingMap) {\n      if (entry.deadline && now > entry.deadline.getTime()) {\n        this.pendingMap.delete(key);\n        entry.reject(\n          new KubeMQTimeoutError({\n            message: 'Send deadline expired waiting for ACK',\n            operation: 'send',\n          }),\n        );\n      }\n    }\n  }\n\n  private _rejectAllPending(err: Error): void {\n    for (const [, entry] of this.pendingMap) {\n      entry.reject(err);\n    }\n    this.pendingMap.clear();\n  }\n\n  private _emitError(err: Error): void {\n    for (const handler of this.errorHandlers) {\n      try {\n        handler(err);\n      } catch {\n        /* ignore handler errors */\n      }\n    }\n  }\n\n  private _cleanupItemSignal(item: QueueItem<TReq>): void {\n    if (item.signal && item.abortHandler) {\n      item.signal.removeEventListener('abort', item.abortHandler);\n      item.abortHandler = undefined;\n    }\n  }\n}\n","/**\n * @internal — Shared bidi streaming sender for events (fire-and-forget + store).\n *\n * Single persistent SendEventsStream per client. All channels share one stream.\n * Mirrors Python SDK's AsyncEventSender architecture.\n */\nimport { randomUUID } from 'node:crypto';\nimport { BaseStreamingSender } from './base-streaming-sender.js';\nimport type { BaseSenderOptions } from './base-streaming-sender.js';\nimport type { kubemq } from '../../protos/kubemq.js';\n\nexport type AsyncEventSenderOptions = BaseSenderOptions;\n\nexport class AsyncEventSender extends BaseStreamingSender<kubemq.Event, kubemq.Result, string> {\n  protected grpcMethod(): string {\n    return 'SendEventsStream';\n  }\n\n  protected extractRequestKey(request: kubemq.Event): string | null {\n    if (!request.Store) return null;\n    // Ensure store events always have an EventID for pending-map tracking\n    if (!request.EventID) request.EventID = randomUUID();\n    return request.EventID;\n  }\n\n  protected extractResponseKey(response: kubemq.Result): string | null {\n    return response.EventID || null;\n  }\n\n  protected isResponseSuccess(response: kubemq.Result): boolean {\n    return response.Sent ? true : false;\n  }\n\n  protected responseErrorMessage(response: kubemq.Result): string {\n    return response.Error || 'Event store send failed';\n  }\n\n  /**\n   * Send a store event. Returns a Promise that resolves when the server ACKs.\n   */\n  sendStore(event: kubemq.Event, deadline?: Date): Promise<kubemq.Result> {\n    // enqueue with tracked=true always returns a Promise\n    const p = this.enqueue(event, true, deadline);\n    if (!p) throw new Error('unreachable: tracked enqueue returned undefined');\n    return p;\n  }\n\n  /**\n   * Send a fire-and-forget event. Returns void.\n   * Throws BufferFullError if the queue is at capacity.\n   */\n  sendFireAndForget(event: kubemq.Event): void {\n    void this.enqueue(event, false);\n  }\n}\n","/**\n * @internal — Shared bidi streaming sender for queue upstream messages.\n *\n * Single persistent QueuesUpstream stream per client. All channels share one stream.\n * Mirrors Python SDK's AsyncUpstreamSender architecture.\n */\nimport { BaseStreamingSender } from './base-streaming-sender.js';\nimport type { BaseSenderOptions } from './base-streaming-sender.js';\nimport type { kubemq } from '../../protos/kubemq.js';\n\nexport interface AsyncUpstreamSenderOptions extends BaseSenderOptions {\n  /** Default send timeout in ms if no per-call deadline is provided. Default: 2000. */\n  sendTimeoutMs?: number;\n}\n\nexport class AsyncUpstreamSender extends BaseStreamingSender<\n  kubemq.QueuesUpstreamRequest,\n  kubemq.QueuesUpstreamResponse,\n  string\n> {\n  private readonly sendTimeoutMs: number;\n\n  constructor(opts: AsyncUpstreamSenderOptions) {\n    super(opts);\n    this.sendTimeoutMs = opts.sendTimeoutMs ?? 2000;\n  }\n\n  protected grpcMethod(): string {\n    return 'QueuesUpstream';\n  }\n\n  protected extractRequestKey(request: kubemq.QueuesUpstreamRequest): string | null {\n    return request.RequestID || null;\n  }\n\n  protected extractResponseKey(response: kubemq.QueuesUpstreamResponse): string | null {\n    return response.RefRequestID || null;\n  }\n\n  protected isResponseSuccess(response: kubemq.QueuesUpstreamResponse): boolean {\n    return !response.IsError;\n  }\n\n  protected responseErrorMessage(response: kubemq.QueuesUpstreamResponse): string {\n    return response.Error || 'Queue upstream send failed';\n  }\n\n  /**\n   * Send queue messages via the shared upstream stream.\n   * Returns a Promise that resolves when the server ACKs.\n   */\n  send(\n    request: kubemq.QueuesUpstreamRequest,\n    deadline?: Date,\n  ): Promise<kubemq.QueuesUpstreamResponse> {\n    const effectiveDeadline = deadline ?? new Date(Date.now() + this.sendTimeoutMs);\n    const p = this.enqueue(request, true, effectiveDeadline);\n    if (!p) throw new Error('unreachable: tracked enqueue returned undefined');\n    return p;\n  }\n}\n","/**\n * Runtime Node.js version assertion.\n *\n * Called once during KubeMQClient.create() to fail fast if the Node.js\n * runtime is below the minimum supported version.\n *\n * @internal\n */\n\nconst MIN_NODE_MAJOR = 20;\nconst MIN_NODE_MINOR = 11;\n\n/**\n * Throws if the current Node.js version is below the SDK minimum.\n * Silently succeeds on non-Node runtimes (Deno, Bun) where\n * `process.version` may be missing or synthetic.\n */\nexport function assertNodeVersion(): void {\n  if (typeof process === 'undefined' || typeof process.version !== 'string') {\n    return;\n  }\n\n  const match = /^v(\\d+)\\.(\\d+)/.exec(process.version);\n  if (!match) return;\n\n  const major = Number(match[1]);\n  const minor = Number(match[2]);\n\n  if (major < MIN_NODE_MAJOR || (major === MIN_NODE_MAJOR && minor < MIN_NODE_MINOR)) {\n    throw new Error(\n      `kubemq-js requires Node.js >= ${String(MIN_NODE_MAJOR)}.${String(MIN_NODE_MINOR)}.0. ` +\n        `Detected ${process.version}. ` +\n        'See COMPATIBILITY.md for supported versions.',\n    );\n  }\n}\n","/** @internal — retry engine, not part of public API */\n\nimport type { RetryPolicy } from '../../options.js';\nimport type { Logger } from '../../logger.js';\nimport {\n  KubeMQError,\n  RetryExhaustedError,\n  KubeMQTimeoutError,\n  CancellationError,\n} from '../../errors.js';\n\n// ─── Operation Type & Idempotency ────────────────────────────────────\n\nexport type OperationType =\n  | 'events'\n  | 'eventsStore'\n  | 'queueSend'\n  | 'queueReceive'\n  | 'command'\n  | 'query'\n  | 'subscribe';\n\nconst IDEMPOTENT_OPERATIONS: ReadonlySet<OperationType> = new Set([\n  'events',\n  'eventsStore',\n  'subscribe',\n]);\n\n// ─── Retry Throttle ──────────────────────────────────────────────────\n\nexport interface RetryThrottle {\n  tryAcquire(): boolean;\n  release(): void;\n}\n\nexport function createRetryThrottle(maxConcurrent: number): RetryThrottle {\n  let active = 0;\n  return {\n    tryAcquire(): boolean {\n      if (maxConcurrent <= 0) return true;\n      if (active >= maxConcurrent) return false;\n      active++;\n      return true;\n    },\n    release(): void {\n      if (active > 0) active--;\n    },\n  };\n}\n\nexport function createUnlimitedThrottle(): RetryThrottle {\n  return {\n    tryAcquire: () => true,\n    release: () => {\n      /* noop */\n    },\n  };\n}\n\n// ─── Backoff Computation ─────────────────────────────────────────────\n\nexport function computeBackoffMs(attempt: number, policy: Readonly<RetryPolicy>): number {\n  const exponential = Math.min(\n    policy.maxBackoffMs,\n    policy.initialBackoffMs * Math.pow(policy.multiplier, attempt),\n  );\n\n  switch (policy.jitter) {\n    case 'full':\n      return Math.random() * exponential;\n    case 'equal': {\n      const half = exponential / 2;\n      return half + Math.random() * half;\n    }\n    case 'none':\n      return exponential;\n  }\n}\n\n// ─── Retry Context ───────────────────────────────────────────────────\n\nexport interface RetryContext {\n  operation: string;\n  operationType: OperationType;\n  channel?: string;\n  serverAddress?: string;\n}\n\n// ─── Signal Resolution ──────────────────────────────────────────────\n\n/**\n * Compose an AbortSignal from OperationOptions and a default timeout.\n * Used by client-layer methods to create a unified signal for withRetry.\n *\n * L1 fix: prefer reusing caller's signal when available to reduce\n * AbortSignal.timeout() timer allocations under high throughput.\n */\nexport function resolveSignal(\n  defaultTimeoutMs: number,\n  opts?: { signal?: AbortSignal; timeout?: number },\n): AbortSignal {\n  if (opts?.signal && opts.timeout != null) {\n    return AbortSignal.any([opts.signal, AbortSignal.timeout(opts.timeout)]);\n  }\n  if (opts?.signal) return opts.signal;\n  if (opts?.timeout != null) return AbortSignal.timeout(opts.timeout);\n  if (defaultTimeoutMs <= 0) return new AbortController().signal;\n  return AbortSignal.timeout(defaultTimeoutMs);\n}\n\n/**\n * Resolve an AbortSignal only when the caller provides an explicit signal or timeout.\n * Returns `undefined` for the default-timeout-only case so callers can use a\n * gRPC deadline instead, avoiding OS timer allocations on the hot path.\n */\nexport function resolveSignalOptional(\n  opts?: { signal?: AbortSignal; timeout?: number },\n): AbortSignal | undefined {\n  if (opts?.signal && opts.timeout != null) {\n    return AbortSignal.any([opts.signal, AbortSignal.timeout(opts.timeout)]);\n  }\n  if (opts?.signal) return opts.signal;\n  if (opts?.timeout != null) return AbortSignal.timeout(opts.timeout);\n  return undefined;\n}\n\n/**\n * Compute a gRPC deadline Date for the given timeout configuration.\n * Used alongside resolveSignalOptional to avoid AbortSignal.timeout()\n * allocations when only the default timeout applies.\n */\nexport function resolveDeadline(\n  defaultTimeoutMs: number,\n  opts?: { timeout?: number },\n): Date {\n  const timeoutMs = opts?.timeout ?? defaultTimeoutMs;\n  return new Date(Date.now() + (timeoutMs > 0 ? timeoutMs : 30_000));\n}\n\n// ─── Sleep with AbortSignal ─────────────────────────────────────────\n\nfunction sleep(ms: number, signal?: AbortSignal): Promise<void> {\n  return new Promise((resolve, reject) => {\n    if (signal?.aborted) {\n      reject(signal.reason instanceof Error ? signal.reason : new Error(String(signal.reason)));\n      return;\n    }\n    const timer = setTimeout(resolve, ms);\n    if (typeof timer === 'object' && 'unref' in timer) {\n      timer.unref();\n    }\n    if (signal) {\n      const onAbort = () => {\n        clearTimeout(timer);\n        reject(signal.reason instanceof Error ? signal.reason : new Error(String(signal.reason)));\n      };\n      signal.addEventListener('abort', onAbort, { once: true });\n    }\n  });\n}\n\n// ─── Retry Hooks ─────────────────────────────────────────────────────\n\nexport interface RetryHooks {\n  onRetry?: (attempt: number, error: Error) => void;\n  onExhausted?: () => void;\n}\n\n// ─── withRetry ───────────────────────────────────────────────────────\n\n/**\n * Execute `fn` with automatic retry for retryable errors.\n *\n * - Non-retryable errors surface immediately.\n * - DEADLINE_EXCEEDED on non-idempotent operations is never retried.\n * - UNKNOWN status: at most 1 retry regardless of policy.\n * - Concurrent retries are throttled via `throttle`.\n */\nexport async function withRetry<T>(\n  fn: (signal: AbortSignal) => Promise<T>,\n  policy: Readonly<RetryPolicy>,\n  ctx: RetryContext,\n  logger: Logger,\n  throttle: RetryThrottle,\n  parentSignal?: AbortSignal,\n  hooks?: RetryHooks,\n): Promise<T> {\n  // Fast path: when no retries are configured, skip retry loop overhead\n  // but preserve error semantics (non-retryable errors pass through,\n  // retryable errors become RetryExhaustedError).\n  if (policy.maxRetries === 0) {\n    const t0 = Date.now();\n    try {\n      return await fn(parentSignal ?? new AbortController().signal);\n    } catch (err: unknown) {\n      const error = err instanceof Error ? err : new Error(String(err));\n      if (!(error instanceof KubeMQError) || !error.isRetryable) {\n        throw error;\n      }\n      hooks?.onExhausted?.();\n      throw new RetryExhaustedError({\n        message: `${ctx.operation} failed after 0 retries`,\n        operation: ctx.operation,\n        channel: ctx.channel,\n        serverAddress: ctx.serverAddress,\n        cause: error,\n        suggestion: 'Increase maxRetries or check server health.',\n        attempts: 0,\n        totalDuration: Date.now() - t0,\n        lastError: error,\n      });\n    }\n  }\n\n  const startTime = Date.now();\n  let lastError: Error | undefined;\n  const fallbackSignal = parentSignal ?? new AbortController().signal;\n\n  for (let attempt = 0; attempt <= policy.maxRetries; attempt++) {\n    try {\n      parentSignal?.throwIfAborted();\n      return await fn(fallbackSignal);\n    } catch (err: unknown) {\n      if (parentSignal?.aborted) {\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n        const reason = parentSignal.reason;\n        if (reason instanceof DOMException && reason.name === 'TimeoutError') {\n          throw new KubeMQTimeoutError({\n            message: `${ctx.operation} timed out`,\n            operation: ctx.operation,\n            channel: ctx.channel,\n            cause: reason,\n            suggestion: 'Increase the timeout value.',\n          });\n        }\n        throw new CancellationError({\n          message: `${ctx.operation} cancelled`,\n          operation: ctx.operation,\n          channel: ctx.channel,\n          cause: reason instanceof Error ? reason : undefined,\n        });\n      }\n\n      lastError = err instanceof Error ? err : new Error(String(err));\n\n      if (!(lastError instanceof KubeMQError)) {\n        throw lastError;\n      }\n\n      if (!lastError.isRetryable) {\n        throw lastError;\n      }\n\n      // DEADLINE_EXCEEDED on non-idempotent operations: don't auto-retry\n      if (\n        lastError instanceof KubeMQTimeoutError &&\n        !IDEMPOTENT_OPERATIONS.has(ctx.operationType)\n      ) {\n        throw new KubeMQTimeoutError({\n          message: lastError.message,\n          operation: lastError.operation,\n          channel: lastError.channel,\n          cause: lastError.cause instanceof Error ? lastError.cause : undefined,\n          statusCode: lastError.statusCode,\n          serverAddress: lastError.serverAddress,\n          suggestion: 'Request may have been processed by the server. Check before retrying.',\n        });\n      }\n\n      // UNKNOWN status: cap at 1 retry regardless of policy\n      if (lastError.statusCode === 2 && attempt >= 1) {\n        throw lastError;\n      }\n\n      if (attempt >= policy.maxRetries) {\n        break;\n      }\n\n      if (!throttle.tryAcquire()) {\n        logger.warn('Retry throttled — concurrent retry limit reached', {\n          operation: ctx.operation,\n          channel: ctx.channel,\n          attempt,\n        });\n        throw lastError;\n      }\n\n      try {\n        const backoffMs = computeBackoffMs(attempt, policy);\n        logger.debug('Retrying operation', {\n          operation: ctx.operation,\n          channel: ctx.channel,\n          attempt: attempt + 1,\n          maxRetries: policy.maxRetries,\n          backoffMs: Math.round(backoffMs),\n        });\n        hooks?.onRetry?.(attempt + 1, lastError);\n        await sleep(backoffMs, parentSignal);\n      } finally {\n        throttle.release();\n      }\n    }\n  }\n\n  hooks?.onExhausted?.();\n  throw new RetryExhaustedError({\n    message: `${ctx.operation} failed after ${String(policy.maxRetries)} retries`,\n    operation: ctx.operation,\n    channel: ctx.channel,\n    serverAddress: ctx.serverAddress,\n    cause: lastError,\n    suggestion: 'Increase maxRetries or check server health.',\n    attempts: policy.maxRetries,\n    totalDuration: Date.now() - startTime,\n    lastError: lastError ?? new Error('Unknown error'),\n  });\n}\n","// OTel messaging semantic conventions v1.27.0\n// All attribute KEYS and metric names defined as constants.\n\n// ─── Semantic Convention Attribute Constants ────────────────────────\n\nexport const MESSAGING_SYSTEM = 'messaging.system' as const;\nexport const MESSAGING_SYSTEM_VALUE = 'kubemq' as const;\nexport const MESSAGING_OPERATION_NAME = 'messaging.operation.name' as const;\nexport const MESSAGING_OPERATION_TYPE = 'messaging.operation.type' as const;\nexport const MESSAGING_DESTINATION_NAME = 'messaging.destination.name' as const;\nexport const MESSAGING_MESSAGE_ID = 'messaging.message.id' as const;\nexport const MESSAGING_CLIENT_ID = 'messaging.client.id' as const;\nexport const MESSAGING_CONSUMER_GROUP_NAME = 'messaging.consumer.group.name' as const;\nexport const MESSAGING_BATCH_MESSAGE_COUNT = 'messaging.batch.message_count' as const;\nexport const MESSAGING_MESSAGE_BODY_SIZE = 'messaging.message.body.size' as const;\nexport const SERVER_ADDRESS = 'server.address' as const;\nexport const SERVER_PORT = 'server.port' as const;\nexport const ERROR_TYPE = 'error.type' as const;\n\n// ─── Operation Names ────────────────────────────────────────────────\n\nexport const OP_PUBLISH = 'publish' as const;\nexport const OP_PROCESS = 'process' as const;\nexport const OP_RECEIVE = 'receive' as const;\nexport const OP_SETTLE = 'settle' as const;\nexport const OP_SEND = 'send' as const;\n\n// ─── Metric Names ───────────────────────────────────────────────────\n\nexport const METRIC_OPERATION_DURATION = 'messaging.client.operation.duration' as const;\nexport const METRIC_SENT_MESSAGES = 'messaging.client.sent.messages' as const;\nexport const METRIC_CONSUMED_MESSAGES = 'messaging.client.consumed.messages' as const;\nexport const METRIC_CONNECTION_COUNT = 'messaging.client.connection.count' as const;\nexport const METRIC_RECONNECTIONS = 'messaging.client.reconnections' as const;\nexport const METRIC_RETRY_ATTEMPTS = 'kubemq.client.retry.attempts' as const;\nexport const METRIC_RETRY_EXHAUSTED = 'kubemq.client.retry.exhausted' as const;\n\n// ─── Histogram Bucket Boundaries ────────────────────────────────────\n\nexport const DURATION_HISTOGRAM_BOUNDARIES = [\n  0.001, 0.0025, 0.005, 0.01, 0.025, 0.05, 0.075, 0.1, 0.25, 0.5, 0.75, 1, 2.5, 5, 7.5, 10, 30, 60,\n] as const;\n\n// ─── Error Type Metric Values ───────────────────────────────────────\n\nexport const ERROR_TYPE_MAP: Readonly<Record<string, string>> = {\n  Transient: 'transient',\n  Timeout: 'timeout',\n  Throttling: 'throttling',\n  Authentication: 'authentication',\n  Authorization: 'authorization',\n  Validation: 'validation',\n  NotFound: 'not_found',\n  Fatal: 'fatal',\n  Cancellation: 'cancellation',\n  Backpressure: 'backpressure',\n} as const;\n\n// ─── Span Event Names ───────────────────────────────────────────────\n\nexport const SPAN_EVENT_RETRY = 'retry' as const;\nexport const SPAN_EVENT_DEAD_LETTERED = 'message.dead_lettered' as const;\n\n// ─── Instrumentation Scope ──────────────────────────────────────────\n\nexport const INSTRUMENTATION_SCOPE_NAME = 'kubemq-js' as const;\n","import type { Logger } from '../../logger.js';\nimport type { KubeMQError } from '../../errors.js';\nimport {\n  INSTRUMENTATION_SCOPE_NAME,\n  MESSAGING_SYSTEM,\n  MESSAGING_SYSTEM_VALUE,\n  MESSAGING_OPERATION_NAME,\n  MESSAGING_OPERATION_TYPE,\n  MESSAGING_DESTINATION_NAME,\n  MESSAGING_MESSAGE_ID,\n  MESSAGING_CLIENT_ID,\n  MESSAGING_CONSUMER_GROUP_NAME,\n  MESSAGING_BATCH_MESSAGE_COUNT,\n  MESSAGING_MESSAGE_BODY_SIZE,\n  SERVER_ADDRESS,\n  SERVER_PORT,\n  ERROR_TYPE,\n  SPAN_EVENT_RETRY,\n  ERROR_TYPE_MAP,\n} from '../telemetry/attributes.js';\n\ntype OtelApi = typeof import('@opentelemetry/api');\ntype Tracer = import('@opentelemetry/api').Tracer;\ntype Span = import('@opentelemetry/api').Span;\ntype SpanKind = import('@opentelemetry/api').SpanKind;\ntype Context = import('@opentelemetry/api').Context;\n\nexport type OperationKind = 'publish' | 'process' | 'receive' | 'settle' | 'send';\n\nexport interface SpanConfig {\n  operationName: OperationKind;\n  channel: string;\n  spanKind: SpanKind;\n  clientId: string;\n  serverAddress: string;\n  serverPort: number;\n  messageId?: string;\n  consumerGroup?: string;\n  bodySize?: number;\n  batchCount?: number;\n}\n\n/**\n * Span configuration table (per GS REQ-OBS-1):\n *\n * | Operation                    | Span Kind | Span Name Format     |\n * |------------------------------|-----------|----------------------|\n * | Publish/Send (Events, ES, Q) | PRODUCER  | publish {channel}    |\n * | Subscribe callback           | CONSUMER  | process {channel}    |\n * | Queue Receive (pull)         | CONSUMER  | receive {channel}    |\n * | Queue Ack/Reject/Requeue     | CONSUMER  | settle {channel}     |\n * | Command/Query send           | CLIENT    | send {channel}       |\n * | Command/Query response       | SERVER    | process {channel}    |\n */\n\nexport class TelemetryMiddleware {\n  private tracer: Tracer | undefined;\n  private api: OtelApi | undefined;\n\n  constructor(\n    private readonly logger: Logger,\n    private readonly sdkVersion: string,\n  ) {}\n\n  async lazyLoadApi(tracerProvider?: unknown): Promise<void> {\n    if (this.api) return;\n    try {\n      this.api = await import('@opentelemetry/api');\n      const provider = tracerProvider as import('@opentelemetry/api').TracerProvider | undefined;\n      this.tracer = (provider ?? this.api.trace.getTracerProvider()).getTracer(\n        INSTRUMENTATION_SCOPE_NAME,\n        this.sdkVersion,\n      );\n      this.logger.debug('OpenTelemetry tracing initialized', {\n        scope: INSTRUMENTATION_SCOPE_NAME,\n        version: this.sdkVersion,\n      });\n    } catch {\n      this.logger.debug('OpenTelemetry API not available — tracing disabled');\n      this.api = undefined;\n      this.tracer = undefined;\n    }\n  }\n\n  get isEnabled(): boolean {\n    return this.tracer !== undefined;\n  }\n\n  startSpan(config: SpanConfig, parentContext?: Context): Span | undefined {\n    if (!this.tracer || !this.api) return undefined;\n\n    const spanName = `${config.operationName} ${config.channel}`;\n    const ctx = parentContext ?? this.api.context.active();\n\n    const span = this.tracer.startSpan(\n      spanName,\n      {\n        kind: config.spanKind,\n        attributes: {\n          [MESSAGING_SYSTEM]: MESSAGING_SYSTEM_VALUE,\n          [MESSAGING_OPERATION_NAME]: config.operationName,\n          [MESSAGING_OPERATION_TYPE]: config.operationName,\n          [MESSAGING_DESTINATION_NAME]: config.channel,\n          [MESSAGING_CLIENT_ID]: config.clientId,\n          [SERVER_ADDRESS]: config.serverAddress,\n          [SERVER_PORT]: config.serverPort,\n        },\n      },\n      ctx,\n    );\n\n    if (span.isRecording()) {\n      if (config.messageId) {\n        span.setAttribute(MESSAGING_MESSAGE_ID, config.messageId);\n      }\n      if (config.consumerGroup) {\n        span.setAttribute(MESSAGING_CONSUMER_GROUP_NAME, config.consumerGroup);\n      }\n      if (config.bodySize !== undefined) {\n        span.setAttribute(MESSAGING_MESSAGE_BODY_SIZE, config.bodySize);\n      }\n      if (config.batchCount !== undefined) {\n        span.setAttribute(MESSAGING_BATCH_MESSAGE_COUNT, config.batchCount);\n      }\n    }\n\n    return span;\n  }\n\n  endSpan(span: Span | undefined, error?: KubeMQError): void {\n    if (!span || !this.api) return;\n\n    if (error) {\n      span.setStatus({\n        code: this.api.SpanStatusCode.ERROR,\n        message: error.message,\n      });\n      if (span.isRecording()) {\n        const errorTypeValue = ERROR_TYPE_MAP[error.category] ?? 'fatal';\n        span.setAttribute(ERROR_TYPE, errorTypeValue);\n      }\n    } else {\n      span.setStatus({ code: this.api.SpanStatusCode.OK });\n    }\n\n    span.end();\n  }\n\n  addRetryEvent(\n    span: Span | undefined,\n    attempt: number,\n    delaySeconds: number,\n    errorType: string,\n  ): void {\n    if (!span?.isRecording()) return;\n\n    span.addEvent(SPAN_EVENT_RETRY, {\n      'retry.attempt': attempt,\n      'retry.delay_seconds': delaySeconds,\n      [ERROR_TYPE]: errorType,\n    });\n  }\n\n  getApi(): OtelApi | undefined {\n    return this.api;\n  }\n\n  getContext(): Context | undefined {\n    return this.api?.context.active();\n  }\n}\n","import type { Logger } from '../../logger.js';\nimport {\n  INSTRUMENTATION_SCOPE_NAME,\n  MESSAGING_SYSTEM,\n  MESSAGING_SYSTEM_VALUE,\n  MESSAGING_OPERATION_NAME,\n  MESSAGING_DESTINATION_NAME,\n  ERROR_TYPE,\n  METRIC_OPERATION_DURATION,\n  METRIC_SENT_MESSAGES,\n  METRIC_CONSUMED_MESSAGES,\n  METRIC_CONNECTION_COUNT,\n  METRIC_RECONNECTIONS,\n  METRIC_RETRY_ATTEMPTS,\n  METRIC_RETRY_EXHAUSTED,\n  DURATION_HISTOGRAM_BOUNDARIES,\n} from '../telemetry/attributes.js';\n\ntype OtelApi = typeof import('@opentelemetry/api');\ntype Meter = import('@opentelemetry/api').Meter;\ntype Counter = import('@opentelemetry/api').Counter;\ntype UpDownCounter = import('@opentelemetry/api').UpDownCounter;\ntype Histogram = import('@opentelemetry/api').Histogram;\n\nexport interface CardinalityConfig {\n  maxChannelNames: number;\n  channelAllowlist: Set<string>;\n}\n\nexport interface MetricAttributes {\n  operationName: string;\n  channel?: string;\n  errorType?: string;\n}\n\nexport class MetricsMiddleware {\n  private meter: Meter | undefined;\n  private api: OtelApi | undefined;\n\n  private operationDuration: Histogram | undefined;\n  private sentMessages: Counter | undefined;\n  private consumedMessages: Counter | undefined;\n  private connectionCount: UpDownCounter | undefined;\n  private reconnections: Counter | undefined;\n  private retryAttempts: Counter | undefined;\n  private retryExhausted: Counter | undefined;\n\n  private seenChannels = new Set<string>();\n  private cardinalityWarned = false;\n\n  constructor(\n    private readonly logger: Logger,\n    private readonly sdkVersion: string,\n    private readonly cardinalityConfig: CardinalityConfig = {\n      maxChannelNames: 100,\n      channelAllowlist: new Set(),\n    },\n  ) {}\n\n  async lazyLoadApi(meterProvider?: unknown): Promise<void> {\n    if (this.api) return;\n    try {\n      this.api = await import('@opentelemetry/api');\n      const provider = meterProvider as import('@opentelemetry/api').MeterProvider | undefined;\n      this.meter = (provider ?? this.api.metrics.getMeterProvider()).getMeter(\n        INSTRUMENTATION_SCOPE_NAME,\n        this.sdkVersion,\n      );\n      this.initInstruments();\n      this.logger.debug('OpenTelemetry metrics initialized', {\n        scope: INSTRUMENTATION_SCOPE_NAME,\n        version: this.sdkVersion,\n      });\n    } catch {\n      this.logger.debug('OpenTelemetry API not available — metrics disabled');\n      this.api = undefined;\n      this.meter = undefined;\n    }\n  }\n\n  private initInstruments(): void {\n    if (!this.meter) return;\n\n    this.operationDuration = this.meter.createHistogram(METRIC_OPERATION_DURATION, {\n      description: 'Duration of each messaging operation',\n      unit: 's',\n      advice: {\n        explicitBucketBoundaries: [...DURATION_HISTOGRAM_BOUNDARIES],\n      },\n    });\n\n    this.sentMessages = this.meter.createCounter(METRIC_SENT_MESSAGES, {\n      description: 'Total messages sent',\n      unit: '{message}',\n    });\n\n    this.consumedMessages = this.meter.createCounter(METRIC_CONSUMED_MESSAGES, {\n      description: 'Total messages consumed',\n      unit: '{message}',\n    });\n\n    this.connectionCount = this.meter.createUpDownCounter(METRIC_CONNECTION_COUNT, {\n      description: 'Active connections',\n      unit: '{connection}',\n    });\n\n    this.reconnections = this.meter.createCounter(METRIC_RECONNECTIONS, {\n      description: 'Reconnection attempts',\n      unit: '{attempt}',\n    });\n\n    this.retryAttempts = this.meter.createCounter(METRIC_RETRY_ATTEMPTS, {\n      description: 'Retry attempts',\n      unit: '{attempt}',\n    });\n\n    this.retryExhausted = this.meter.createCounter(METRIC_RETRY_EXHAUSTED, {\n      description: 'Retries exhausted',\n      unit: '{attempt}',\n    });\n  }\n\n  get isEnabled(): boolean {\n    return this.meter !== undefined;\n  }\n\n  private resolveAttributes(attrs: MetricAttributes): Record<string, string> {\n    const result: Record<string, string> = {\n      [MESSAGING_SYSTEM]: MESSAGING_SYSTEM_VALUE,\n      [MESSAGING_OPERATION_NAME]: attrs.operationName,\n    };\n\n    if (attrs.channel) {\n      const include = this.shouldIncludeChannel(attrs.channel);\n      if (include) {\n        result[MESSAGING_DESTINATION_NAME] = attrs.channel;\n      }\n    }\n\n    if (attrs.errorType) {\n      result[ERROR_TYPE] = attrs.errorType;\n    }\n\n    return result;\n  }\n\n  private shouldIncludeChannel(channel: string): boolean {\n    if (this.cardinalityConfig.channelAllowlist.has(channel)) {\n      return true;\n    }\n\n    if (this.seenChannels.has(channel)) {\n      return true;\n    }\n\n    if (this.seenChannels.size < this.cardinalityConfig.maxChannelNames) {\n      this.seenChannels.add(channel);\n      return true;\n    }\n\n    if (!this.cardinalityWarned) {\n      this.cardinalityWarned = true;\n      this.logger.warn(\n        'Metric cardinality threshold exceeded — omitting channel name from new metric series',\n        {\n          threshold: this.cardinalityConfig.maxChannelNames,\n          uniqueChannels: this.seenChannels.size,\n        },\n      );\n    }\n\n    return false;\n  }\n\n  // ─── Recording Methods ──────────────────────────────────────────\n\n  recordOperationDuration(durationSeconds: number, attrs: MetricAttributes): void {\n    this.operationDuration?.record(durationSeconds, this.resolveAttributes(attrs));\n  }\n\n  recordMessageSent(attrs: MetricAttributes, count = 1): void {\n    this.sentMessages?.add(count, this.resolveAttributes(attrs));\n  }\n\n  recordMessageConsumed(attrs: MetricAttributes, count = 1): void {\n    this.consumedMessages?.add(count, this.resolveAttributes(attrs));\n  }\n\n  recordConnectionChange(delta: 1 | -1): void {\n    this.connectionCount?.add(delta, {\n      [MESSAGING_SYSTEM]: MESSAGING_SYSTEM_VALUE,\n    });\n  }\n\n  recordReconnectionAttempt(): void {\n    this.reconnections?.add(1, {\n      [MESSAGING_SYSTEM]: MESSAGING_SYSTEM_VALUE,\n    });\n  }\n\n  recordRetryAttempt(attrs: MetricAttributes): void {\n    this.retryAttempts?.add(1, this.resolveAttributes(attrs));\n  }\n\n  recordRetryExhausted(attrs: MetricAttributes): void {\n    this.retryExhausted?.add(1, this.resolveAttributes(attrs));\n  }\n}\n","import { randomUUID } from 'node:crypto';\nimport type {\n  ClientOptions,\n  OperationOptions,\n  SubscriptionOptions,\n  CloseOptions,\n  RetryPolicy,\n} from './options.js';\nimport type { EventMessage, EventReceived, EventsSubscription } from './messages/events.js';\nimport { EventStoreStartPosition } from './messages/events-store.js';\nimport type {\n  EventStoreMessage,\n  EventStoreReceived,\n  EventStoreResult,\n  EventStoreSubscription,\n  EventStoreStreamHandle,\n} from './messages/events-store.js';\nimport type { EventStreamHandle } from './messages/events.js';\nimport type {\n  QueueMessage,\n  ReceivedQueueMessage,\n  QueuePollRequest,\n  QueueSendResult,\n  BatchSendResult,\n  QueueStreamOptions,\n  QueueStreamMessage,\n  QueueStreamHandle,\n  QueueUpstreamHandle,\n  QueueUpstreamResult,\n  QueueBatch,\n} from './messages/queues.js';\nimport type {\n  CommandMessage,\n  CommandResponse,\n  CommandSubscription,\n  CommandReceived,\n} from './messages/commands.js';\nimport type {\n  QueryMessage,\n  QueryResponse,\n  QuerySubscription,\n  QueryReceived,\n} from './messages/queries.js';\nimport type { Subscription } from './messages/subscription.js';\nimport { ConnectionState } from './internal/transport/connection-state.js';\nimport type { ConnectionEventMap } from './internal/transport/typed-emitter.js';\nimport { GrpcTransport } from './internal/transport/grpc-transport.js';\nimport type { TransportCallOptions, StreamHandle } from './internal/transport/transport.js';\nimport { validateClientOptions } from './internal/config-validator.js';\nimport { applyDefaults } from './internal/config-defaults.js';\nimport type { ResolvedClientOptions } from './internal/config-defaults.js';\nimport {\n  validateEventMessage,\n  validateEventStoreMessage,\n  validateQueueMessage,\n  validateCommandMessage,\n  validateQueryMessage,\n  validateQueuePollRequest,\n  validateSubscription,\n  validateEventStoreSubscription,\n  validateResponseMessage,\n} from './internal/validation/message-validator.js';\nimport {\n  NotImplementedError,\n  ValidationError,\n  TransientError,\n  ErrorCode,\n  KubeMQError,\n} from './errors.js';\nimport {\n  toProtoEvent,\n  toProtoRequest,\n  toProtoResponse,\n  toProtoQueueMessage,\n  toProtoSubscribeEvents,\n  toProtoSubscribeEventsStore,\n  toProtoSubscribeCommands,\n  toProtoSubscribeQueries,\n  toProtoReceiveQueueRequest,\n  toProtoBatchRequest,\n  toProtoQueuesDownstreamRequest,\n  fromProtoPingResult,\n  fromProtoResult,\n  fromProtoEventStoreResult,\n  fromProtoReceivedEvent,\n  fromProtoReceivedEventStore,\n  fromProtoReceivedCommand,\n  fromProtoReceivedQuery,\n  fromProtoCommandResponse,\n  fromProtoQueryResponse,\n  fromProtoBatchResponse,\n  fromProtoReceiveQueueResponse,\n  toProtoQueuesUpstreamRequest,\n  fromProtoQueuesUpstreamResponse,\n  fromTagsMap,\n  toTagsMap,\n} from './internal/protocol/marshaller.js';\nimport { GrpcSubscriptionHandle } from './internal/transport/subscription-handle.js';\nimport { mapGrpcError } from './internal/middleware/error-mapper.js';\nimport type { RawTransportError } from './internal/transport/transport.js';\nimport type { ChannelType, ChannelInfo } from './internal/protocol/channel-ops.js';\n// eslint-disable-next-line no-restricted-imports -- client implementation requires proto types\nimport { kubemq } from './protos/kubemq.js';\nimport { CallbackDispatcher } from './internal/concurrency/callback-dispatcher.js';\nimport { AsyncEventSender } from './internal/streaming/async-event-sender.js';\nimport { AsyncUpstreamSender } from './internal/streaming/async-upstream-sender.js';\nimport { SenderClosedError } from './errors.js';\nimport { assertNodeVersion } from './internal/runtime-check.js';\nimport { withRetry, createRetryThrottle, resolveSignal, resolveSignalOptional, resolveDeadline } from './internal/middleware/retry.js';\nimport type { RetryThrottle, OperationType, RetryHooks } from './internal/middleware/retry.js';\nimport { TelemetryMiddleware } from './internal/middleware/telemetry.js';\nimport type { OperationKind, SpanConfig } from './internal/middleware/telemetry.js';\nimport { MetricsMiddleware } from './internal/middleware/metrics.js';\n\nexport type { ChannelType, ChannelInfo };\nexport type { ChannelStats } from './internal/protocol/channel-ops.js';\n\n/**\n * Information about the connected KubeMQ server, returned by {@link KubeMQClient.ping}.\n *\n * @see {@link KubeMQClient.ping}\n */\nexport interface ServerInfo {\n  /** Hostname or IP address of the server. */\n  host: string;\n  /** Server software version string. */\n  version: string;\n  /** Unix timestamp (seconds) when the server process started. */\n  serverStartTime: number;\n  /** Server uptime in seconds. */\n  serverUpTime: number;\n}\n\nfunction validateChannelName(channel: string, operation: string): void {\n  if (!channel || channel.trim().length === 0) {\n    throw new ValidationError({\n      code: ErrorCode.ValidationFailed,\n      message: 'Channel name must not be empty',\n      operation,\n      isRetryable: false,\n      suggestion: 'Provide a non-empty channel name',\n    });\n  }\n}\n\n/**\n * KubeMQ client for all messaging patterns.\n *\n * @remarks\n * **Async safety:** Safe for concurrent use from multiple async operations.\n * A single `KubeMQClient` instance should be shared across the application.\n * All methods are async and non-blocking. Concurrent calls to publish, send,\n * and subscribe methods are safe — the client serializes access to the\n * underlying gRPC channel internally.\n *\n * @remarks\n * **Lifecycle:** Create via `KubeMQClient.create()`, close via `close()` or\n * `await using`. Do not create multiple clients to the same server unless\n * you need isolated connection lifecycles.\n */\nexport class KubeMQClient implements AsyncDisposable {\n  readonly #options: Readonly<ClientOptions>;\n  readonly #resolved: ResolvedClientOptions;\n  readonly #transport: GrpcTransport;\n  readonly #activeDispatchers = new Set<CallbackDispatcher<unknown>>();\n  readonly #retryPolicy: Readonly<RetryPolicy>;\n  readonly #retryThrottle: RetryThrottle;\n  readonly #telemetry: TelemetryMiddleware;\n  readonly #metrics: MetricsMiddleware;\n  #eventSenderPromise: Promise<AsyncEventSender> | null = null;\n  #upstreamSenderPromise: Promise<AsyncUpstreamSender> | null = null;\n  #closing = false;\n  #closePromise: Promise<void> | null = null;\n\n  private constructor(\n    options: ClientOptions,\n    resolved: ResolvedClientOptions,\n    transport: GrpcTransport,\n  ) {\n    this.#options = Object.freeze({ ...options });\n    this.#resolved = resolved;\n    this.#transport = transport;\n    this.#retryPolicy = resolved.retry;\n    this.#retryThrottle = createRetryThrottle(resolved.maxConcurrentRetries);\n\n    const sdkVersion = '3.0.0';\n    this.#telemetry = new TelemetryMiddleware(resolved.logger, sdkVersion);\n    this.#metrics = new MetricsMiddleware(resolved.logger, sdkVersion);\n  }\n\n  /** @internal — test-only factory that accepts any Transport-compatible object. */\n  static _createForTesting(\n    options: ClientOptions,\n    resolved: ResolvedClientOptions,\n    transport: GrpcTransport,\n  ): KubeMQClient {\n    return new KubeMQClient(options, resolved, transport);\n  }\n\n  // ─── Shared Streaming Senders (lazy init) ───\n\n  #getEventSender(): Promise<AsyncEventSender> {\n    if (this.#closing)\n      throw new SenderClosedError({ message: 'Client is closing', operation: 'send' });\n    if (!this.#eventSenderPromise) {\n      this.#eventSenderPromise = Promise.resolve().then(() => {\n        const sender = new AsyncEventSender({\n          maxQueueSize: 10_000,\n          logger: this.#resolved.logger,\n          clientId: this.clientId,\n        });\n        sender.start(this.#transport);\n        return sender;\n      });\n    }\n    return this.#eventSenderPromise;\n  }\n\n  #getUpstreamSender(): Promise<AsyncUpstreamSender> {\n    if (this.#closing)\n      throw new SenderClosedError({ message: 'Client is closing', operation: 'send' });\n    if (!this.#upstreamSenderPromise) {\n      this.#upstreamSenderPromise = Promise.resolve().then(() => {\n        const sender = new AsyncUpstreamSender({\n          maxQueueSize: 10_000,\n          logger: this.#resolved.logger,\n          clientId: this.clientId,\n        });\n        sender.start(this.#transport);\n        return sender;\n      });\n    }\n    return this.#upstreamSenderPromise;\n  }\n\n  /** The raw user-provided options (frozen). */\n  get options(): Readonly<ClientOptions> {\n    return this.#options;\n  }\n\n  /** Auto-generated or user-provided client identifier. */\n  get clientId(): string {\n    return this.#resolved.clientId;\n  }\n\n  /** The server address this client connects to. */\n  get address(): string {\n    return this.#resolved.address;\n  }\n\n  /** Current connection state. */\n  get state(): ConnectionState {\n    return this.#transport.state;\n  }\n\n  /** Stats from the shared event sender (if initialized). */\n  async getEventSenderStats(): Promise<\n    import('./internal/streaming/base-streaming-sender.js').SenderStats | null\n  > {\n    if (!this.#eventSenderPromise) return null;\n    const sender = await this.#eventSenderPromise.catch(() => null);\n    return sender?.getStats() ?? null;\n  }\n\n  /** Stats from the shared queue upstream sender (if initialized). */\n  async getUpstreamSenderStats(): Promise<\n    import('./internal/streaming/base-streaming-sender.js').SenderStats | null\n  > {\n    if (!this.#upstreamSenderPromise) return null;\n    const sender = await this.#upstreamSenderPromise.catch(() => null);\n    return sender?.getStats() ?? null;\n  }\n\n  /**\n   * Async factory — validates config, applies defaults, creates\n   * transport, and connects before returning a ready client.\n   *\n   * @param options - Client configuration. Only `address` is required.\n   * @returns A connected, ready-to-use client instance.\n   * @throws {@link ConfigurationError} If `options` contain invalid values.\n   * @throws {@link ConnectionError} If the initial connection fails.\n   * @throws {@link AuthenticationError} If credentials are rejected during connect.\n   *\n   * @see {@link ClientOptions}\n   */\n  static async create(options: ClientOptions): Promise<KubeMQClient> {\n    assertNodeVersion();\n    validateClientOptions(options);\n    const resolved = Object.freeze(applyDefaults(options));\n    const transport = new GrpcTransport(options);\n    await transport.connect();\n    const client = new KubeMQClient(options, resolved, transport);\n    await client.#telemetry.lazyLoadApi(options.tracerProvider);\n    await client.#metrics.lazyLoadApi(options.meterProvider);\n\n    transport.on('stateChange', (state: ConnectionState) => {\n      if (state === ConnectionState.READY) {\n        client.#metrics.recordConnectionChange(1);\n      } else if (state === ConnectionState.CLOSED) {\n        client.#metrics.recordConnectionChange(-1);\n      } else if (state === ConnectionState.RECONNECTING) {\n        client.#metrics.recordReconnectionAttempt();\n      }\n    });\n\n    return client;\n  }\n\n  // ─── Connection Events ───\n\n  /**\n   * Register a listener for a connection lifecycle event.\n   *\n   * @param event - Event name from {@link ConnectionEventMap}.\n   * @param listener - Callback invoked when the event fires.\n   * @returns `this` for chaining.\n   *\n   * @see {@link ConnectionEventMap}\n   * @see {@link KubeMQClient.off}\n   */\n  on<K extends keyof ConnectionEventMap>(event: K, listener: ConnectionEventMap[K]): this {\n    this.#transport.getStateMachine().on(event, listener);\n    return this;\n  }\n\n  /**\n   * Remove a previously registered connection event listener.\n   *\n   * @param event - Event name from {@link ConnectionEventMap}.\n   * @param listener - The exact listener function reference to remove.\n   * @returns `this` for chaining.\n   *\n   * @see {@link ConnectionEventMap}\n   * @see {@link KubeMQClient.on}\n   */\n  off<K extends keyof ConnectionEventMap>(event: K, listener: ConnectionEventMap[K]): this {\n    this.#transport.getStateMachine().off(event, listener);\n    return this;\n  }\n\n  // ─── Events ───\n\n  /**\n   * Send a fire-and-forget event to a channel.\n   *\n   * @example\n   * ```typescript\n   * const client = await KubeMQClient.create({ address: 'localhost:50000' });\n   * await client.sendEvent({\n   *   channel: 'events.notifications',\n   *   body: new TextEncoder().encode('user signed up'),\n   *   metadata: 'signup',\n   *   tags: { userId: '42' },\n   * });\n   * ```\n   *\n   * @param msg - The event message to send.\n   * @param opts - Optional timeout and cancellation overrides.\n   * @throws {@link ValidationError} If the message fails validation (e.g. empty channel).\n   * @throws {@link ClientClosedError} If the client has been closed.\n   * @throws {@link KubeMQTimeoutError} If the operation exceeds the configured timeout.\n   * @throws {@link CancellationError} If cancelled via `opts.signal`.\n   * @throws {@link RetryExhaustedError} If all retry attempts fail.\n   *\n   * @see {@link createEventMessage}\n   * @see {@link subscribeToEvents}\n   */\n  async sendEvent(msg: EventMessage, _opts?: OperationOptions): Promise<void> {\n    this.#transport.ensureNotClosed('sendEvent');\n    validateEventMessage(msg, 'sendEvent');\n    const pbEvent = toProtoEvent(msg, this.clientId, false);\n    const span = this.#startSpan('publish', msg.channel, 3, {\n      messageId: msg.id,\n      bodySize: msg.body?.length,\n    });\n    const t0 = performance.now();\n\n    try {\n      const sender = await this.#getEventSender();\n      sender.sendFireAndForget(pbEvent);\n      this.#metrics.recordMessageSent({ operationName: 'sendEvent', channel: msg.channel });\n      this.#telemetry.endSpan(span);\n    } catch (err) {\n      this.#telemetry.endSpan(span, err instanceof KubeMQError ? err : undefined);\n      throw err;\n    } finally {\n      this.#metrics.recordOperationDuration((performance.now() - t0) / 1000, {\n        operationName: 'sendEvent',\n        channel: msg.channel,\n      });\n    }\n  }\n\n  /**\n   * Send a persistent event to an event-store channel.\n   *\n   * @param msg - The event-store message to send.\n   * @param opts - Optional timeout and cancellation overrides.\n   * @returns The send result with event ID and delivery status.\n   * @throws {@link ValidationError} If the message fails validation.\n   * @throws {@link ClientClosedError} If the client has been closed.\n   * @throws {@link KubeMQTimeoutError} If the operation exceeds the configured timeout.\n   * @throws {@link CancellationError} If cancelled via `opts.signal`.\n   * @throws {@link RetryExhaustedError} If all retry attempts fail.\n   *\n   * @see {@link createEventStoreMessage}\n   * @see {@link subscribeToEventsStore}\n   * @see {@link EventStoreResult}\n   */\n  async sendEventStore(msg: EventStoreMessage, opts?: OperationOptions): Promise<EventStoreResult> {\n    this.#transport.ensureNotClosed('sendEventStore');\n    validateEventStoreMessage(msg, 'sendEventStore');\n    const pbEvent = toProtoEvent(msg, this.clientId, true);\n    const timeoutMs = opts?.timeout ?? this.#resolved.defaultSendTimeoutMs;\n    const deadline = new Date(Date.now() + timeoutMs);\n    const span = this.#startSpan('publish', msg.channel, 3, {\n      messageId: msg.id,\n      bodySize: msg.body?.length,\n    });\n    const t0 = performance.now();\n\n    try {\n      const sender = await this.#getEventSender();\n      const result = await sender.sendStore(pbEvent, deadline);\n      fromProtoResult(result, 'sendEventStore');\n      const storeResult = fromProtoEventStoreResult(result);\n      this.#metrics.recordMessageSent({ operationName: 'sendEventStore', channel: msg.channel });\n      this.#telemetry.endSpan(span);\n      return storeResult;\n    } catch (err) {\n      this.#telemetry.endSpan(span, err instanceof KubeMQError ? err : undefined);\n      throw err;\n    } finally {\n      this.#metrics.recordOperationDuration((performance.now() - t0) / 1000, {\n        operationName: 'sendEventStore',\n        channel: msg.channel,\n      });\n    }\n  }\n\n  /**\n   * Subscribe to real-time events on a channel.\n   *\n   * @example\n   * ```typescript\n   * const client = await KubeMQClient.create({ address: 'localhost:50000' });\n   * const sub = client.subscribeToEvents({\n   *   channel: 'events.notifications',\n   *   group: 'worker-group',\n   *   onEvent: (event) => {\n   *     console.log(`Received: ${event.id} on ${event.channel}`);\n   *   },\n   *   onError: (err) => console.error(err),\n   * });\n   *\n   * // Later, cancel the subscription:\n   * sub.cancel();\n   * ```\n   *\n   * @param sub - Subscription request with channel, optional group, and callbacks.\n   * @param opts - Optional concurrency, timeout, and cancellation overrides.\n   * @returns A {@link Subscription} handle to cancel the subscription.\n   * @throws {@link ValidationError} If the subscription request is invalid.\n   * @throws {@link ClientClosedError} If the client has been closed.\n   *\n   * @see {@link sendEvent}\n   * @see {@link Subscription}\n   * @see {@link EventsSubscription}\n   */\n  subscribeToEvents(sub: EventsSubscription, opts?: SubscriptionOptions): Subscription {\n    this.#transport.ensureNotClosed('subscribeToEvents');\n    validateSubscription(sub, 'subscribeToEvents', true);\n\n    // C3 fix: currentStream reference for backpressure pause/resume\n    let currentStream: StreamHandle<never, kubemq.EventReceive> | undefined;\n\n    const dispatcher = new CallbackDispatcher<EventReceived>({\n      maxConcurrent: opts?.maxConcurrentCallbacks ?? 20,\n      maxQueueDepth: opts?.maxQueueDepth,\n      dropOnHighWater: opts?.dropOnHighWater,\n      logger: this.#resolved.logger,\n      onError: sub.onError,\n      onHighWater: () => currentStream?.pause(),\n      onLowWater: () => currentStream?.resume(),\n    });\n    this.#activeDispatchers.add(dispatcher);\n\n    const subId = randomUUID();\n    const tracker = this.#transport.getSubscriptionTracker();\n\n    const createAndAttachStream = () => {\n      const pbSubscribe = toProtoSubscribeEvents(sub.channel, sub.group, this.clientId);\n      const s = this.#transport.serverStream<kubemq.Subscribe, kubemq.EventReceive>(\n        'SubscribeToEvents',\n        pbSubscribe,\n      );\n      currentStream = s;\n      s.onData((data: kubemq.EventReceive) => {\n        const msg = fromProtoReceivedEvent(data);\n        this.#metrics.recordMessageConsumed({\n          operationName: 'subscribeToEvents',\n          channel: sub.channel,\n        });\n        dispatcher.dispatch((m) => {\n          const span = this.#startSpan('process', sub.channel, 4, { messageId: m.id });\n          try {\n            sub.onEvent(m);\n            this.#telemetry.endSpan(span);\n          } catch (err) {\n            this.#telemetry.endSpan(span, err instanceof KubeMQError ? err : undefined);\n            throw err;\n          }\n        }, msg);\n      });\n      s.onError((err: Error) => {\n        const mapped = this.#mapStreamError(err, 'subscribeToEvents', sub.channel);\n        sub.onError(mapped);\n      });\n      return s;\n    };\n\n    const stream = createAndAttachStream();\n    const handle = new GrpcSubscriptionHandle(stream, this.#resolved.logger, 'subscribeToEvents');\n\n    tracker.register({\n      id: subId,\n      pattern: 'events',\n      channel: sub.channel,\n      group: sub.group,\n      resubscribe: () => {\n        const newStream = createAndAttachStream();\n        handle.rebind(newStream);\n      },\n    });\n\n    const originalCancel = handle.cancel.bind(handle);\n    handle.cancel = () => {\n      tracker.unregister(subId);\n      originalCancel();\n      dispatcher.close();\n      this.#activeDispatchers.delete(dispatcher);\n    };\n\n    if (opts?.signal) {\n      opts.signal.addEventListener(\n        'abort',\n        () => {\n          handle.cancel();\n        },\n        { once: true },\n      );\n    }\n\n    return handle;\n  }\n\n  /**\n   * Subscribe to persistent events on an event-store channel.\n   *\n   * @remarks\n   * Automatically resumes from the last received sequence on reconnection.\n   *\n   * @param sub - Subscription request with channel, start position, and callbacks.\n   * @param opts - Optional concurrency, timeout, and cancellation overrides.\n   * @returns A {@link Subscription} handle to cancel the subscription.\n   * @throws {@link ValidationError} If the subscription request is invalid.\n   * @throws {@link ClientClosedError} If the client has been closed.\n   *\n   * @see {@link sendEventStore}\n   * @see {@link Subscription}\n   * @see {@link EventStoreSubscription}\n   * @see {@link EventStoreStartPosition}\n   */\n  subscribeToEventsStore(sub: EventStoreSubscription, opts?: SubscriptionOptions): Subscription {\n    this.#transport.ensureNotClosed('subscribeToEventsStore');\n    validateEventStoreSubscription(sub, 'subscribeToEventsStore');\n\n    // C3 fix: currentStream reference for backpressure pause/resume\n    let currentStream: StreamHandle<never, kubemq.EventReceive> | undefined;\n\n    const dispatcher = new CallbackDispatcher<EventStoreReceived>({\n      maxConcurrent: opts?.maxConcurrentCallbacks ?? 20,\n      maxQueueDepth: opts?.maxQueueDepth,\n      dropOnHighWater: opts?.dropOnHighWater,\n      logger: this.#resolved.logger,\n      onError: sub.onError,\n      onHighWater: () => currentStream?.pause(),\n      onLowWater: () => currentStream?.resume(),\n    });\n    this.#activeDispatchers.add(dispatcher);\n\n    const subId = randomUUID();\n    const tracker = this.#transport.getSubscriptionTracker();\n\n    const createAndAttachStream = () => {\n      const tracked = tracker.get(subId);\n      let effectiveSub: EventStoreSubscription = sub;\n      if (tracked?.lastSequence != null) {\n        effectiveSub = {\n          ...sub,\n          startFrom: EventStoreStartPosition.StartAtSequence,\n          startValue: tracked.lastSequence + 1,\n        };\n      }\n      const pbSubscribe = toProtoSubscribeEventsStore(effectiveSub, this.clientId);\n      const s = this.#transport.serverStream<kubemq.Subscribe, kubemq.EventReceive>(\n        'SubscribeToEvents',\n        pbSubscribe,\n      );\n      currentStream = s;\n      s.onData((data: kubemq.EventReceive) => {\n        const msg = fromProtoReceivedEventStore(data);\n        tracker.updateSequence(subId, msg.sequence);\n        this.#metrics.recordMessageConsumed({\n          operationName: 'subscribeToEventsStore',\n          channel: sub.channel,\n        });\n        dispatcher.dispatch((m) => {\n          const span = this.#startSpan('process', sub.channel, 4, { messageId: m.id });\n          try {\n            sub.onEvent(m);\n            this.#telemetry.endSpan(span);\n          } catch (err) {\n            this.#telemetry.endSpan(span, err instanceof KubeMQError ? err : undefined);\n            throw err;\n          }\n        }, msg);\n      });\n      s.onError((err: Error) => {\n        const mapped = this.#mapStreamError(err, 'subscribeToEventsStore', sub.channel);\n        sub.onError(mapped);\n      });\n      return s;\n    };\n\n    const stream = createAndAttachStream();\n    const handle = new GrpcSubscriptionHandle(\n      stream,\n      this.#resolved.logger,\n      'subscribeToEventsStore',\n    );\n\n    tracker.register({\n      id: subId,\n      pattern: 'events-store',\n      channel: sub.channel,\n      group: sub.group,\n      resubscribe: () => {\n        const newStream = createAndAttachStream();\n        handle.rebind(newStream);\n      },\n    });\n\n    const originalCancel = handle.cancel.bind(handle);\n    handle.cancel = () => {\n      tracker.unregister(subId);\n      originalCancel();\n      dispatcher.close();\n      this.#activeDispatchers.delete(dispatcher);\n    };\n\n    if (opts?.signal) {\n      opts.signal.addEventListener(\n        'abort',\n        () => {\n          handle.cancel();\n        },\n        { once: true },\n      );\n    }\n\n    return handle;\n  }\n\n  // ─── Queues ───\n\n  /**\n   * Send a message to a queue channel.\n   *\n   * @example\n   * ```typescript\n   * const client = await KubeMQClient.create({ address: 'localhost:50000' });\n   * const result = await client.sendQueueMessage({\n   *   channel: 'queues.orders',\n   *   body: new TextEncoder().encode(JSON.stringify({ orderId: 123 })),\n   *   tags: { priority: 'high' },\n   *   policy: { expirationSeconds: 3600 },\n   * });\n   * console.log(`Sent message ${result.messageId} at ${result.sentAt}`);\n   * ```\n   *\n   * @param msg - The queue message to send.\n   * @param opts - Optional timeout and cancellation overrides.\n   * @returns The send result with message ID and timestamps.\n   * @throws {@link ValidationError} If the message fails validation.\n   * @throws {@link ClientClosedError} If the client has been closed.\n   * @throws {@link KubeMQTimeoutError} If the operation exceeds the configured timeout.\n   * @throws {@link CancellationError} If cancelled via `opts.signal`.\n   * @throws {@link RetryExhaustedError} If all retry attempts fail.\n   *\n   * @see {@link createQueueMessage}\n   * @see {@link receiveQueueMessages}\n   * @see {@link QueueSendResult}\n   */\n  async sendQueueMessage(msg: QueueMessage, opts?: OperationOptions): Promise<QueueSendResult> {\n    this.#transport.ensureNotClosed('sendQueueMessage');\n    validateQueueMessage(msg, 'sendQueueMessage');\n    const timeoutMs = opts?.timeout ?? this.#resolved.defaultSendTimeoutMs;\n    const deadline = new Date(Date.now() + timeoutMs);\n    const span = this.#startSpan('publish', msg.channel, 3, {\n      messageId: msg.id,\n      bodySize: msg.body?.length,\n    });\n    const t0 = performance.now();\n\n    try {\n      const sender = await this.#getUpstreamSender();\n      const upstreamReq = toProtoQueuesUpstreamRequest([msg], this.clientId);\n      const response = await sender.send(upstreamReq, deadline);\n      const parsed = fromProtoQueuesUpstreamResponse(response, 'sendQueueMessage');\n      const result = parsed.results[0] ?? { messageId: msg.id ?? '', sentAt: new Date() };\n      this.#metrics.recordMessageSent({ operationName: 'sendQueueMessage', channel: msg.channel });\n      this.#telemetry.endSpan(span);\n      return result;\n    } catch (err) {\n      this.#telemetry.endSpan(span, err instanceof KubeMQError ? err : undefined);\n      throw err;\n    } finally {\n      this.#metrics.recordOperationDuration((performance.now() - t0) / 1000, {\n        operationName: 'sendQueueMessage',\n        channel: msg.channel,\n      });\n    }\n  }\n\n  /**\n   * Send multiple queue messages in a single batch request.\n   *\n   * @param msgs - Array of queue messages to send. Must contain at least one message.\n   * @param opts - Optional timeout and cancellation overrides.\n   * @returns Batch result with per-message outcomes and aggregate counts.\n   * @throws {@link ValidationError} If the array is empty or any message fails validation.\n   * @throws {@link ClientClosedError} If the client has been closed.\n   * @throws {@link KubeMQTimeoutError} If the operation exceeds the configured timeout.\n   * @throws {@link RetryExhaustedError} If all retry attempts fail.\n   *\n   * @see {@link sendQueueMessage}\n   * @see {@link BatchSendResult}\n   */\n  async sendQueueMessagesBatch(\n    msgs: QueueMessage[],\n    opts?: OperationOptions,\n  ): Promise<BatchSendResult> {\n    this.#transport.ensureNotClosed('sendQueueMessagesBatch');\n    // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- defensive: JS callers may pass null\n    if (!msgs || msgs.length === 0) {\n      throw new ValidationError({\n        code: ErrorCode.ValidationFailed,\n        message: 'Messages array is required and must not be empty',\n        operation: 'sendQueueMessagesBatch',\n        isRetryable: false,\n      });\n    }\n    if (msgs.length === 0) {\n      throw new ValidationError({\n        code: ErrorCode.ValidationFailed,\n        message: 'Batch must contain at least one message',\n        operation: 'sendQueueMessagesBatch',\n        isRetryable: false,\n      });\n    }\n    for (const msg of msgs) {\n      validateQueueMessage(msg, 'sendQueueMessagesBatch');\n    }\n    const pbMsgs = msgs.map((m) => toProtoQueueMessage(m, this.clientId));\n    const batchReq = toProtoBatchRequest(pbMsgs);\n    const signal = resolveSignal(this.#resolved.defaultSendTimeoutMs, opts);\n\n    const channel = msgs[0]?.channel;\n    const span = this.#startSpan('publish', channel ?? '', 3, { batchCount: msgs.length });\n    const t0 = performance.now();\n\n    try {\n      const result = await withRetry(\n        async (sig) => {\n          const response = await this.#transport.unaryCall<\n            kubemq.QueueMessagesBatchRequest,\n            kubemq.QueueMessagesBatchResponse\n          >('SendQueueMessagesBatch', batchReq, { signal: sig });\n          return fromProtoBatchResponse(response);\n        },\n        this.#retryPolicy,\n        {\n          operation: 'sendQueueMessagesBatch',\n          operationType: 'queueSend',\n          channel,\n          serverAddress: this.address,\n        },\n        this.#resolved.logger,\n        this.#retryThrottle,\n        signal,\n        this.#retryHooks('sendQueueMessagesBatch', channel),\n      );\n      this.#metrics.recordMessageSent(\n        { operationName: 'sendQueueMessagesBatch', channel },\n        msgs.length,\n      );\n      this.#telemetry.endSpan(span);\n      return result;\n    } catch (err) {\n      this.#telemetry.endSpan(span, err instanceof KubeMQError ? err : undefined);\n      throw err;\n    } finally {\n      this.#metrics.recordOperationDuration((performance.now() - t0) / 1000, {\n        operationName: 'sendQueueMessagesBatch',\n        channel,\n      });\n    }\n  }\n\n  /**\n   * Receive (poll) messages from a queue channel.\n   *\n   * @example\n   * ```typescript\n   * const client = await KubeMQClient.create({ address: 'localhost:50000' });\n   * const messages = await client.receiveQueueMessages({\n   *   channel: 'queues.orders',\n   *   maxMessages: 10,\n   *   waitTimeoutSeconds: 5,\n   * });\n   * for (const msg of messages) {\n   *   console.log(`Processing ${msg.id}: ${new TextDecoder().decode(msg.body)}`);\n   *   await msg.ack();\n   * }\n   * ```\n   *\n   * @param req - Poll parameters including channel, max messages, and wait timeout.\n   * @param opts - Optional timeout and cancellation overrides.\n   * @returns Array of received messages with `ack()` / `nack()` methods.\n   * @throws {@link ValidationError} If the poll request is invalid.\n   * @throws {@link ClientClosedError} If the client has been closed.\n   * @throws {@link KubeMQTimeoutError} If the operation exceeds the configured timeout.\n   * @throws {@link RetryExhaustedError} If all retry attempts fail.\n   *\n   * @see {@link sendQueueMessage}\n   * @see {@link streamQueueMessages}\n   * @see {@link QueuePollRequest}\n   * @see {@link ReceivedQueueMessage}\n   */\n  async receiveQueueMessages(\n    req: QueuePollRequest,\n    opts?: OperationOptions,\n  ): Promise<ReceivedQueueMessage[]> {\n    this.#transport.ensureNotClosed('receiveQueueMessages');\n    validateQueuePollRequest(req, 'receiveQueueMessages');\n    const pbReq = toProtoReceiveQueueRequest(req, this.clientId);\n    const signal = resolveSignal(this.#resolved.defaultQueueReceiveTimeoutMs, opts);\n\n    const span = this.#startSpan('receive', req.channel, 4);\n    const t0 = performance.now();\n\n    let rawMessages: Awaited<ReturnType<typeof fromProtoReceiveQueueResponse>>;\n    try {\n      rawMessages = await withRetry(\n        async (sig) => {\n          const response = await this.#transport.unaryCall<\n            kubemq.ReceiveQueueMessagesRequest,\n            kubemq.ReceiveQueueMessagesResponse\n          >('ReceiveQueueMessages', pbReq, { signal: sig });\n          return fromProtoReceiveQueueResponse(response, 'receiveQueueMessages');\n        },\n        this.#retryPolicy,\n        {\n          operation: 'receiveQueueMessages',\n          operationType: 'queueReceive',\n          channel: req.channel,\n          serverAddress: this.address,\n        },\n        this.#resolved.logger,\n        this.#retryThrottle,\n        signal,\n        this.#retryHooks('receiveQueueMessages', req.channel),\n      );\n      this.#metrics.recordMessageConsumed(\n        { operationName: 'receiveQueueMessages', channel: req.channel },\n        rawMessages.length,\n      );\n      this.#telemetry.endSpan(span);\n    } catch (err) {\n      this.#telemetry.endSpan(span, err instanceof KubeMQError ? err : undefined);\n      throw err;\n    } finally {\n      this.#metrics.recordOperationDuration((performance.now() - t0) / 1000, {\n        operationName: 'receiveQueueMessages',\n        channel: req.channel,\n      });\n    }\n\n    return rawMessages.map((raw) => ({\n      ...raw,\n      ack: async () => {\n        /* auto-acked by simple receive API */\n      },\n      nack: async () => {\n        /* no-op for simple receive API */\n      },\n      reQueue: (_channel: string) => {\n        throw new NotImplementedError({\n          code: ErrorCode.NotImplemented,\n          message: 'reQueue is not supported via simple receive — use the streaming queue API',\n          operation: 'reQueue',\n          isRetryable: false,\n          suggestion: 'Use QueuesDownstream streaming for per-message requeue',\n        });\n      },\n    }));\n  }\n\n  /**\n   * Open a streaming queue consumer for transactional message processing.\n   *\n   * @remarks\n   * Uses a bidirectional gRPC stream for low-latency, transactional\n   * message consumption with per-message or batch ack/reject/requeue.\n   *\n   * @param opts - Stream options including channel and auto-ack behavior.\n   * @returns A {@link QueueStreamHandle} for receiving and settling messages.\n   * @throws {@link ValidationError} If the channel name is empty.\n   * @throws {@link ClientClosedError} If the client has been closed.\n   *\n   * @see {@link receiveQueueMessages}\n   * @see {@link consumeQueue}\n   * @see {@link QueueStreamHandle}\n   * @see {@link QueueStreamOptions}\n   */\n  streamQueueMessages(opts: QueueStreamOptions): QueueStreamHandle {\n    this.#transport.ensureNotClosed('streamQueueMessages');\n    validateChannelName(opts.channel, 'streamQueueMessages');\n\n    let stream = this.#transport.duplexStream<\n      kubemq.QueuesDownstreamRequest,\n      kubemq.QueuesDownstreamResponse\n    >('QueuesDownstream');\n\n    let active = true;\n    let msgHandler: ((msgs: QueueStreamMessage[]) => void) | undefined;\n    let errHandler: ((err: Error) => void) | undefined;\n    let closeHandler: (() => void) | undefined;\n    // Design: single active transaction at a time. scheduleRePoll() ensures\n    // sequential Get → Settle → Get flow. Concurrent transactions are not supported.\n    let activeTransactionId: string | undefined;\n    let lastResponseMetadata: Record<string, string> = {};\n    // burn-in bug 3: tracks whether a bulk settlement (ackAll/reQueueAll/ackRange)\n    // has already scheduled a re-poll, so per-message onMessageSettled won't double-poll.\n    let bulkSettled = false;\n\n    const clientId = this.clientId;\n    const tracker = this.#transport.getSubscriptionTracker();\n\n    const writeDownstream = (reqType: number, extra?: Partial<Record<string, unknown>>) => {\n      if (!active) return;\n      /* eslint-disable @typescript-eslint/no-unsafe-argument, @typescript-eslint/no-explicit-any */\n      const req = new kubemq.QueuesDownstreamRequest({\n        RequestID: randomUUID(),\n        ClientID: clientId,\n        Channel: opts.channel,\n        RequestTypeData: reqType,\n        RefTransactionId: activeTransactionId ?? '',\n        ...extra,\n      } as any);\n      /* eslint-enable @typescript-eslint/no-unsafe-argument, @typescript-eslint/no-explicit-any */\n      stream.write(req);\n    };\n\n    const scheduleRePoll = () => {\n      if (!active) return;\n      // Use setTimeout(0) instead of queueMicrotask so that close() (which sets\n      // active=false via a microtask/await continuation) runs before the re-poll.\n      // With queueMicrotask, a nack() → close() sequence would re-poll before the\n      // close fires, re-acquiring the nacked message in a new transaction.\n      setTimeout(() => {\n        if (!active) return;\n        const rePoll = toProtoQueuesDownstreamRequest(opts, clientId);\n        stream.write(rePoll);\n      }, 0);\n    };\n\n    const attachStreamHandlers = () => {\n      /* eslint-disable @typescript-eslint/no-unsafe-enum-comparison, @typescript-eslint/no-unnecessary-condition */\n      stream.onData((data: kubemq.QueuesDownstreamResponse) => {\n        if (data.RequestTypeData === 11) {\n          active = false;\n          activeTransactionId = undefined;\n          stream.end();\n          if (closeHandler) closeHandler();\n          return;\n        }\n\n        if (!active || data.IsError) {\n          if (data.IsError && errHandler) {\n            errHandler(new Error(data.Error || 'Queue downstream error'));\n          }\n          return;\n        }\n\n        // Only process Get responses (type 1). Settlement confirmations (types 2-7)\n        // carry zero messages and must be discarded — otherwise batchSize=0 triggers\n        // a premature scheduleRePoll() while the prior transaction is still open,\n        // causing broker re-deliveries. Go/Python/Java all filter here.\n        if (data.RequestTypeData !== 0 && data.RequestTypeData !== 1) {\n          return;\n        }\n\n        activeTransactionId = data.TransactionId;\n        bulkSettled = false; // reset for new batch\n        if (data.Metadata instanceof Map) {\n          const md: Record<string, string> = {};\n          data.Metadata.forEach((v, k) => {\n            md[k] = v;\n          });\n          lastResponseMetadata = md;\n        }\n\n        // C2 fix: per-message settled flag + batch completion tracker\n        const rawMessages = data.Messages || [];\n        const batchSize = rawMessages.length;\n        let settledCount = 0;\n\n        const onMessageSettled = () => {\n          settledCount++;\n          // Skip if a bulk settlement (ackAll/ackRange/reQueueAll) already handled re-poll\n          if (bulkSettled) return;\n          if (settledCount === batchSize) {\n            // All messages in the batch are settled — clear transaction and re-poll\n            activeTransactionId = undefined;\n            scheduleRePoll();\n          }\n        };\n\n        /* eslint-disable @typescript-eslint/no-unnecessary-condition, @typescript-eslint/no-unnecessary-type-conversion */\n        const messages: QueueStreamMessage[] = rawMessages.map((msg) => {\n          const attrs = msg.Attributes;\n          let msgSettled = false; // per-message flag (C2 fix)\n          return {\n            id: msg.MessageID,\n            channel: msg.Channel,\n            body: msg.Body instanceof Uint8Array ? msg.Body : new Uint8Array(0),\n            metadata: msg.Metadata,\n            tags: fromTagsMap(msg.Tags),\n            timestamp: attrs ? new Date(Number(attrs.Timestamp) / 1_000_000) : new Date(),\n            sequence: attrs ? Number(attrs.Sequence) : 0,\n            receiveCount: attrs ? attrs.ReceiveCount : 0,\n            md5OfBody: attrs?.MD5OfBody || undefined,\n            isReRouted: attrs?.ReRouted ?? false,\n            reRouteFromQueue: attrs?.ReRoutedFromQueue || undefined,\n            expiredAt: attrs?.ExpirationAt ? new Date(Number(attrs.ExpirationAt) / 1e6) : undefined,\n            delayedTo: attrs?.DelayedTo ? new Date(Number(attrs.DelayedTo) / 1e6) : undefined,\n            ack() {\n              // H3 fix: silently ignore settlement in autoAck mode\n              if (opts.autoAck) return;\n              if (!active || msgSettled) return;\n              msgSettled = true;\n              // C1 fix: use AckRange (3) instead of AckAll (2)\n              stream.write(\n                new kubemq.QueuesDownstreamRequest({\n                  RequestID: randomUUID(),\n                  ClientID: clientId,\n                  Channel: opts.channel,\n                  RequestTypeData: 3,\n                  RefTransactionId: data.TransactionId,\n                  SequenceRange: [Number(attrs?.Sequence ?? 0)],\n                }),\n              );\n              onMessageSettled();\n            },\n            nack() {\n              if (opts.autoAck) return;\n              if (!active || msgSettled) return;\n              msgSettled = true;\n              // C1 fix: use NAckRange (5) instead of NAckAll (4)\n              stream.write(\n                new kubemq.QueuesDownstreamRequest({\n                  RequestID: randomUUID(),\n                  ClientID: clientId,\n                  Channel: opts.channel,\n                  RequestTypeData: 5,\n                  RefTransactionId: data.TransactionId,\n                  SequenceRange: [Number(attrs?.Sequence ?? 0)],\n                }),\n              );\n              onMessageSettled();\n            },\n            reQueue(targetChannel: string) {\n              if (opts.autoAck) return;\n              if (!active || msgSettled) return;\n              msgSettled = true;\n              // C1 fix: use ReQueueRange (7) instead of ReQueueAll (6)\n              stream.write(\n                new kubemq.QueuesDownstreamRequest({\n                  RequestID: randomUUID(),\n                  ClientID: clientId,\n                  ReQueueChannel: targetChannel,\n                  RequestTypeData: 7,\n                  RefTransactionId: data.TransactionId,\n                  SequenceRange: [Number(attrs?.Sequence ?? 0)],\n                }),\n              );\n              onMessageSettled();\n            },\n          };\n        });\n\n        /* eslint-enable @typescript-eslint/no-unnecessary-condition, @typescript-eslint/no-unnecessary-type-conversion */\n        if (messages.length > 0 && msgHandler) {\n          msgHandler(messages);\n        }\n\n        // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- active is mutated in callbacks\n        if (active && opts.autoAck) {\n          scheduleRePoll();\n        }\n        // For manual-ack mode: re-poll on empty-batch responses (server timeout with no messages).\n        // Without this, the stream would go idle after an empty response since onMessageSettled\n        // is never called when batchSize=0.\n        // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- active is mutated in callbacks\n        if (active && !opts.autoAck && batchSize === 0) {\n          scheduleRePoll();\n        }\n      });\n      /* eslint-enable @typescript-eslint/no-unsafe-enum-comparison */\n\n      stream.onError((err: Error) => {\n        if (!active) return;\n        active = false;\n        if (errHandler) errHandler(err);\n      });\n\n      stream.onEnd(() => {\n        if (!active) return;\n        active = false;\n        if (closeHandler) closeHandler();\n      });\n    };\n\n    attachStreamHandlers();\n\n    const pbReq = toProtoQueuesDownstreamRequest(opts, this.clientId);\n    stream.write(pbReq);\n\n    const subId = randomUUID();\n    tracker.register({\n      id: subId,\n      pattern: 'queue-stream',\n      channel: opts.channel,\n      resubscribe: () => {\n        if (!active) return;\n        // Clean up old stream listeners to prevent memory leak (burn-in bug 2)\n        try { stream.removeAllListeners(); } catch { /* ignore */ }\n        activeTransactionId = undefined;\n        stream = this.#transport.duplexStream<\n          kubemq.QueuesDownstreamRequest,\n          kubemq.QueuesDownstreamResponse\n        >('QueuesDownstream');\n        attachStreamHandlers();\n        const rePoll = toProtoQueuesDownstreamRequest(opts, clientId);\n        stream.write(rePoll);\n      },\n    });\n\n    return {\n      get isActive() {\n        return active;\n      },\n      get responseMetadata() {\n        return lastResponseMetadata;\n      },\n      onMessages(handler) {\n        msgHandler = handler;\n      },\n      onError(handler) {\n        errHandler = handler;\n      },\n      onClose(handler) {\n        closeHandler = handler;\n      },\n      ackAll() {\n        writeDownstream(2);\n        bulkSettled = true;\n        activeTransactionId = undefined;\n        scheduleRePoll();\n      },\n      nackAll() {\n        writeDownstream(4);\n      },\n      reQueueAll(channel: string) {\n        writeDownstream(6, { ReQueueChannel: channel });\n        bulkSettled = true;\n        activeTransactionId = undefined;\n        scheduleRePoll();\n      },\n      ackRange(sequences: number[]) {\n        writeDownstream(3, { SequenceRange: sequences });\n        bulkSettled = true;\n        activeTransactionId = undefined;\n        scheduleRePoll();\n      },\n      nackRange(sequences: number[]) {\n        writeDownstream(5, { SequenceRange: sequences });\n      },\n      reQueueRange(channel: string, sequences: number[]) {\n        writeDownstream(7, { ReQueueChannel: channel, SequenceRange: sequences });\n        scheduleRePoll();\n      },\n      getActiveOffsets(): Promise<number[]> {\n        // H1 fix: server never responds to ActiveOffsets (type 8) — throw instead of hanging\n        throw new NotImplementedError({\n          code: ErrorCode.NotImplemented,\n          message: 'ActiveOffsets is not supported by the server',\n          operation: 'getActiveOffsets',\n          isRetryable: false,\n          suggestion: 'This operation is reserved for future use.',\n        });\n      },\n      getTransactionStatus(): Promise<boolean> {\n        // H1 fix: server never responds to TransactionStatus (type 9) — throw instead of hanging\n        throw new NotImplementedError({\n          code: ErrorCode.NotImplemented,\n          message: 'TransactionStatus is not supported by the server',\n          operation: 'getTransactionStatus',\n          isRetryable: false,\n          suggestion: 'This operation is reserved for future use.',\n        });\n      },\n      close() {\n        if (!active) return;\n        active = false;\n        tracker.unregister(subId);\n        stream.write(\n          new kubemq.QueuesDownstreamRequest({\n            RequestID: randomUUID(),\n            ClientID: clientId,\n            Channel: opts.channel,\n            RequestTypeData: 10,\n            RefTransactionId: activeTransactionId ?? '',\n          }),\n        );\n        activeTransactionId = undefined;\n        stream.end();\n      },\n    };\n  }\n\n  /**\n   * Peek at messages in a queue without consuming them.\n   *\n   * @remarks\n   * Returns copies of the messages that remain in the queue.\n   * The `ack()`, `nack()`, and `reQueue()` methods on the returned\n   * messages are no-ops.\n   *\n   * @param req - Poll parameters including channel and max messages.\n   * @param opts - Optional timeout and cancellation overrides.\n   * @returns Array of messages currently in the queue.\n   * @throws {@link ValidationError} If the poll request is invalid.\n   * @throws {@link ClientClosedError} If the client has been closed.\n   * @throws {@link KubeMQTimeoutError} If the operation exceeds the configured timeout.\n   * @throws {@link RetryExhaustedError} If all retry attempts fail.\n   *\n   * @see {@link receiveQueueMessages}\n   * @see {@link QueuePollRequest}\n   */\n  async peekQueueMessages(\n    req: QueuePollRequest,\n    opts?: OperationOptions,\n  ): Promise<ReceivedQueueMessage[]> {\n    this.#transport.ensureNotClosed('peekQueueMessages');\n    validateQueuePollRequest(req, 'peekQueueMessages');\n    const pbReq = toProtoReceiveQueueRequest(req, this.clientId);\n    pbReq.IsPeak = true;\n    const signal = resolveSignal(this.#resolved.defaultQueueReceiveTimeoutMs, opts);\n\n    const span = this.#startSpan('receive', req.channel, 4);\n    const t0 = performance.now();\n\n    let rawMessages: Awaited<ReturnType<typeof fromProtoReceiveQueueResponse>>;\n    try {\n      rawMessages = await withRetry(\n        async (sig) => {\n          const response = await this.#transport.unaryCall<\n            kubemq.ReceiveQueueMessagesRequest,\n            kubemq.ReceiveQueueMessagesResponse\n          >('ReceiveQueueMessages', pbReq, { signal: sig });\n          return fromProtoReceiveQueueResponse(response, 'peekQueueMessages');\n        },\n        this.#retryPolicy,\n        {\n          operation: 'peekQueueMessages',\n          operationType: 'queueSend',\n          channel: req.channel,\n          serverAddress: this.address,\n        },\n        this.#resolved.logger,\n        this.#retryThrottle,\n        signal,\n        this.#retryHooks('peekQueueMessages', req.channel),\n      );\n      this.#telemetry.endSpan(span);\n    } catch (err) {\n      this.#telemetry.endSpan(span, err instanceof KubeMQError ? err : undefined);\n      throw err;\n    } finally {\n      this.#metrics.recordOperationDuration((performance.now() - t0) / 1000, {\n        operationName: 'peekQueueMessages',\n        channel: req.channel,\n      });\n    }\n\n    return rawMessages.map((raw) => ({\n      ...raw,\n      ack: async () => {\n        /* no-op for peek */\n      },\n      nack: async () => {\n        /* no-op for peek */\n      },\n      reQueue: async () => {\n        /* no-op for peek */\n      },\n    }));\n  }\n\n  // ─── RPC Commands ───\n\n  /**\n   * Send an RPC command and wait for a response.\n   *\n   * @example\n   * ```typescript\n   * const client = await KubeMQClient.create({ address: 'localhost:50000' });\n   * const response = await client.sendCommand({\n   *   channel: 'commands.user-service',\n   *   body: new TextEncoder().encode(JSON.stringify({ action: 'disable', userId: '42' })),\n   *   timeoutInSeconds: 5,\n   * });\n   * console.log(`Executed: ${response.executed}`);\n   * ```\n   *\n   * @param msg - The command message including channel, body, and timeout.\n   * @param opts - Optional timeout and cancellation overrides.\n   * @returns The command response indicating whether execution succeeded.\n   * @throws {@link ValidationError} If the command message is invalid.\n   * @throws {@link ClientClosedError} If the client has been closed.\n   * @throws {@link KubeMQTimeoutError} If the operation exceeds the configured timeout.\n   * @throws {@link CancellationError} If cancelled via `opts.signal`.\n   * @throws {@link RetryExhaustedError} If all retry attempts fail.\n   *\n   * @see {@link createCommand}\n   * @see {@link subscribeToCommands}\n   * @see {@link sendCommandResponse}\n   * @see {@link CommandResponse}\n   */\n  async sendCommand(msg: CommandMessage, opts?: OperationOptions): Promise<CommandResponse> {\n    this.#transport.ensureNotClosed('sendCommand');\n    validateCommandMessage(msg, 'sendCommand');\n    const pbReq = toProtoRequest(msg, this.clientId, 'Command');\n    const signal = resolveSignalOptional(opts);\n    const deadline = resolveDeadline(this.#resolved.defaultRpcTimeoutMs, opts);\n    const span = this.#startSpan('send', msg.channel, 2, {\n      messageId: msg.id,\n      bodySize: msg.body?.length,\n    });\n    const t0 = performance.now();\n\n    try {\n      const result = await withRetry(\n        async (sig) => {\n          const response = await this.#transport.unaryCall<kubemq.Request, kubemq.Response>(\n            'SendRequest',\n            pbReq,\n            { signal: signal ? sig : undefined, deadline },\n          );\n          return fromProtoCommandResponse(response);\n        },\n        this.#retryPolicy,\n        {\n          operation: 'sendCommand',\n          operationType: 'command',\n          channel: msg.channel,\n          serverAddress: this.address,\n        },\n        this.#resolved.logger,\n        this.#retryThrottle,\n        signal,\n        this.#retryHooks('sendCommand', msg.channel),\n      );\n      this.#metrics.recordMessageSent({ operationName: 'sendCommand', channel: msg.channel });\n      this.#telemetry.endSpan(span);\n      return result;\n    } catch (err) {\n      const mapped =\n        err instanceof KubeMQError\n          ? err\n          : this.#mapStreamError(err as Error, 'sendCommand', msg.channel);\n      this.#telemetry.endSpan(span, mapped);\n      throw mapped;\n    } finally {\n      this.#metrics.recordOperationDuration((performance.now() - t0) / 1000, {\n        operationName: 'sendCommand',\n        channel: msg.channel,\n      });\n    }\n  }\n\n  /**\n   * Send an RPC query and wait for a response with data.\n   *\n   * @example\n   * ```typescript\n   * const client = await KubeMQClient.create({ address: 'localhost:50000' });\n   * const response = await client.sendQuery({\n   *   channel: 'queries.user-service',\n   *   body: new TextEncoder().encode(JSON.stringify({ userId: '42' })),\n   *   timeoutInSeconds: 5,\n   * });\n   * if (response.executed && response.body) {\n   *   const user = JSON.parse(new TextDecoder().decode(response.body));\n   *   console.log(`User: ${user.name}`);\n   * }\n   * ```\n   *\n   * @param msg - The query message including channel, body, and timeout.\n   * @param opts - Optional timeout and cancellation overrides.\n   * @returns The query response with execution status and optional result body.\n   * @throws {@link ValidationError} If the query message is invalid.\n   * @throws {@link ClientClosedError} If the client has been closed.\n   * @throws {@link KubeMQTimeoutError} If the operation exceeds the configured timeout.\n   * @throws {@link CancellationError} If cancelled via `opts.signal`.\n   * @throws {@link RetryExhaustedError} If all retry attempts fail.\n   *\n   * @see {@link createQuery}\n   * @see {@link subscribeToQueries}\n   * @see {@link sendQueryResponse}\n   * @see {@link QueryResponse}\n   */\n  async sendQuery(msg: QueryMessage, opts?: OperationOptions): Promise<QueryResponse> {\n    this.#transport.ensureNotClosed('sendQuery');\n    validateQueryMessage(msg, 'sendQuery');\n    const pbReq = toProtoRequest(msg, this.clientId, 'Query');\n    const signal = resolveSignalOptional(opts);\n    const deadline = resolveDeadline(this.#resolved.defaultRpcTimeoutMs, opts);\n    const span = this.#startSpan('send', msg.channel, 2, {\n      messageId: msg.id,\n      bodySize: msg.body?.length,\n    });\n    const t0 = performance.now();\n\n    try {\n      const result = await withRetry(\n        async (sig) => {\n          const response = await this.#transport.unaryCall<kubemq.Request, kubemq.Response>(\n            'SendRequest',\n            pbReq,\n            { signal: signal ? sig : undefined, deadline },\n          );\n          return fromProtoQueryResponse(response);\n        },\n        this.#retryPolicy,\n        {\n          operation: 'sendQuery',\n          operationType: 'query',\n          channel: msg.channel,\n          serverAddress: this.address,\n        },\n        this.#resolved.logger,\n        this.#retryThrottle,\n        signal,\n        this.#retryHooks('sendQuery', msg.channel),\n      );\n      this.#metrics.recordMessageSent({ operationName: 'sendQuery', channel: msg.channel });\n      this.#telemetry.endSpan(span);\n      return result;\n    } catch (err) {\n      const mapped =\n        err instanceof KubeMQError\n          ? err\n          : this.#mapStreamError(err as Error, 'sendQuery', msg.channel);\n      this.#telemetry.endSpan(span, mapped);\n      throw mapped;\n    } finally {\n      this.#metrics.recordOperationDuration((performance.now() - t0) / 1000, {\n        operationName: 'sendQuery',\n        channel: msg.channel,\n      });\n    }\n  }\n\n  /**\n   * Subscribe to incoming RPC commands on a channel.\n   *\n   * @param sub - Subscription request with channel, optional group, and command handler.\n   * @param opts - Optional concurrency, timeout, and cancellation overrides.\n   * @returns A {@link Subscription} handle to cancel the subscription.\n   * @throws {@link ValidationError} If the subscription request is invalid.\n   * @throws {@link ClientClosedError} If the client has been closed.\n   *\n   * @see {@link sendCommand}\n   * @see {@link sendCommandResponse}\n   * @see {@link CommandSubscription}\n   * @see {@link Subscription}\n   */\n  subscribeToCommands(sub: CommandSubscription, opts?: SubscriptionOptions): Subscription {\n    this.#transport.ensureNotClosed('subscribeToCommands');\n    validateSubscription(sub, 'subscribeToCommands');\n\n    // C3 fix: currentStream reference for backpressure pause/resume\n    let currentStream: StreamHandle<never, kubemq.Request> | undefined;\n\n    const dispatcher = new CallbackDispatcher<CommandReceived>({\n      maxConcurrent: opts?.maxConcurrentCallbacks ?? 20,\n      maxQueueDepth: opts?.maxQueueDepth,\n      dropOnHighWater: opts?.dropOnHighWater,\n      logger: this.#resolved.logger,\n      onError: sub.onError,\n      onHighWater: () => currentStream?.pause(),\n      onLowWater: () => currentStream?.resume(),\n    });\n    this.#activeDispatchers.add(dispatcher);\n\n    const subId = randomUUID();\n    const tracker = this.#transport.getSubscriptionTracker();\n\n    const createAndAttachStream = () => {\n      const pbSubscribe = toProtoSubscribeCommands(sub.channel, sub.group, this.clientId);\n      const s = this.#transport.serverStream<kubemq.Subscribe, kubemq.Request>(\n        'SubscribeToRequests',\n        pbSubscribe,\n      );\n      currentStream = s;\n      s.onData((data: kubemq.Request) => {\n        const msg = fromProtoReceivedCommand(data);\n        this.#metrics.recordMessageConsumed({\n          operationName: 'subscribeToCommands',\n          channel: sub.channel,\n        });\n        dispatcher.dispatch(async (m) => {\n          const span = this.#startSpan('process', sub.channel, 4, { messageId: m.id });\n          try {\n            await sub.onCommand(m);\n            this.#telemetry.endSpan(span);\n          } catch (err) {\n            this.#telemetry.endSpan(span, err instanceof KubeMQError ? err : undefined);\n            throw err;\n          }\n        }, msg);\n      });\n      s.onError((err: Error) => {\n        const mapped = this.#mapStreamError(err, 'subscribeToCommands', sub.channel);\n        sub.onError(mapped);\n      });\n      return s;\n    };\n\n    const stream = createAndAttachStream();\n    const handle = new GrpcSubscriptionHandle(stream, this.#resolved.logger, 'subscribeToCommands');\n\n    tracker.register({\n      id: subId,\n      pattern: 'commands',\n      channel: sub.channel,\n      group: sub.group,\n      resubscribe: () => {\n        const newStream = createAndAttachStream();\n        handle.rebind(newStream);\n      },\n    });\n\n    const originalCancel = handle.cancel.bind(handle);\n    handle.cancel = () => {\n      tracker.unregister(subId);\n      originalCancel();\n      dispatcher.close();\n      this.#activeDispatchers.delete(dispatcher);\n    };\n\n    if (opts?.signal) {\n      opts.signal.addEventListener(\n        'abort',\n        () => {\n          handle.cancel();\n        },\n        { once: true },\n      );\n    }\n\n    return handle;\n  }\n\n  /**\n   * Subscribe to incoming RPC queries on a channel.\n   *\n   * @param sub - Subscription request with channel, optional group, and query handler.\n   * @param opts - Optional concurrency, timeout, and cancellation overrides.\n   * @returns A {@link Subscription} handle to cancel the subscription.\n   * @throws {@link ValidationError} If the subscription request is invalid.\n   * @throws {@link ClientClosedError} If the client has been closed.\n   *\n   * @see {@link sendQuery}\n   * @see {@link sendQueryResponse}\n   * @see {@link QuerySubscription}\n   * @see {@link Subscription}\n   */\n  subscribeToQueries(sub: QuerySubscription, opts?: SubscriptionOptions): Subscription {\n    this.#transport.ensureNotClosed('subscribeToQueries');\n    validateSubscription(sub, 'subscribeToQueries');\n\n    // C3 fix: currentStream reference for backpressure pause/resume\n    let currentStream: StreamHandle<never, kubemq.Request> | undefined;\n\n    const dispatcher = new CallbackDispatcher<QueryReceived>({\n      maxConcurrent: opts?.maxConcurrentCallbacks ?? 20,\n      maxQueueDepth: opts?.maxQueueDepth,\n      dropOnHighWater: opts?.dropOnHighWater,\n      logger: this.#resolved.logger,\n      onError: sub.onError,\n      onHighWater: () => currentStream?.pause(),\n      onLowWater: () => currentStream?.resume(),\n    });\n    this.#activeDispatchers.add(dispatcher);\n\n    const subId = randomUUID();\n    const tracker = this.#transport.getSubscriptionTracker();\n\n    const createAndAttachStream = () => {\n      const pbSubscribe = toProtoSubscribeQueries(sub.channel, sub.group, this.clientId);\n      const s = this.#transport.serverStream<kubemq.Subscribe, kubemq.Request>(\n        'SubscribeToRequests',\n        pbSubscribe,\n      );\n      currentStream = s;\n      s.onData((data: kubemq.Request) => {\n        const msg = fromProtoReceivedQuery(data);\n        this.#metrics.recordMessageConsumed({\n          operationName: 'subscribeToQueries',\n          channel: sub.channel,\n        });\n        dispatcher.dispatch(async (m) => {\n          const span = this.#startSpan('process', sub.channel, 4, { messageId: m.id });\n          try {\n            await sub.onQuery(m);\n            this.#telemetry.endSpan(span);\n          } catch (err) {\n            this.#telemetry.endSpan(span, err instanceof KubeMQError ? err : undefined);\n            throw err;\n          }\n        }, msg);\n      });\n      s.onError((err: Error) => {\n        const mapped = this.#mapStreamError(err, 'subscribeToQueries', sub.channel);\n        sub.onError(mapped);\n      });\n      return s;\n    };\n\n    const stream = createAndAttachStream();\n    const handle = new GrpcSubscriptionHandle(stream, this.#resolved.logger, 'subscribeToQueries');\n\n    tracker.register({\n      id: subId,\n      pattern: 'queries',\n      channel: sub.channel,\n      group: sub.group,\n      resubscribe: () => {\n        const newStream = createAndAttachStream();\n        handle.rebind(newStream);\n      },\n    });\n\n    const originalCancel = handle.cancel.bind(handle);\n    handle.cancel = () => {\n      tracker.unregister(subId);\n      originalCancel();\n      dispatcher.close();\n      this.#activeDispatchers.delete(dispatcher);\n    };\n\n    if (opts?.signal) {\n      opts.signal.addEventListener(\n        'abort',\n        () => {\n          handle.cancel();\n        },\n        { once: true },\n      );\n    }\n\n    return handle;\n  }\n\n  /**\n   * Send a response to a received RPC command.\n   *\n   * @param resp - The response indicating execution success/failure.\n   * @param opts - Optional timeout and cancellation overrides.\n   * @throws {@link ValidationError} If the response is invalid.\n   * @throws {@link ClientClosedError} If the client has been closed.\n   * @throws {@link KubeMQTimeoutError} If the operation exceeds the configured timeout.\n   * @throws {@link RetryExhaustedError} If all retry attempts fail.\n   *\n   * @see {@link subscribeToCommands}\n   * @see {@link sendCommand}\n   * @see {@link CommandResponse}\n   */\n  async sendCommandResponse(resp: CommandResponse, opts?: OperationOptions): Promise<void> {\n    this.#transport.ensureNotClosed('sendCommandResponse');\n    validateResponseMessage(resp, 'sendCommandResponse');\n    const pbResp = toProtoResponse(resp, this.clientId);\n    const signal = resolveSignalOptional(opts);\n    const deadline = resolveDeadline(this.#resolved.defaultRpcTimeoutMs, opts);\n    const span = this.#startSpan('process', resp.replyChannel, 1);\n    const t0 = performance.now();\n\n    try {\n      await withRetry(\n        async (sig) => {\n          await this.#transport.unaryCall<kubemq.Response, kubemq.Empty>('SendResponse', pbResp, {\n            signal: signal ? sig : undefined,\n            deadline,\n          });\n        },\n        this.#retryPolicy,\n        {\n          operation: 'sendCommandResponse',\n          operationType: 'command',\n          channel: resp.replyChannel,\n          serverAddress: this.address,\n        },\n        this.#resolved.logger,\n        this.#retryThrottle,\n        signal,\n        this.#retryHooks('sendCommandResponse', resp.replyChannel),\n      );\n      this.#telemetry.endSpan(span);\n    } catch (err) {\n      this.#telemetry.endSpan(span, err instanceof KubeMQError ? err : undefined);\n      throw err;\n    } finally {\n      this.#metrics.recordOperationDuration((performance.now() - t0) / 1000, {\n        operationName: 'sendCommandResponse',\n        channel: resp.replyChannel,\n      });\n    }\n  }\n\n  /**\n   * Send a response to a received RPC query.\n   *\n   * @param resp - The response containing result data.\n   * @param opts - Optional timeout and cancellation overrides.\n   * @throws {@link ValidationError} If the response is invalid.\n   * @throws {@link ClientClosedError} If the client has been closed.\n   * @throws {@link KubeMQTimeoutError} If the operation exceeds the configured timeout.\n   * @throws {@link RetryExhaustedError} If all retry attempts fail.\n   *\n   * @see {@link subscribeToQueries}\n   * @see {@link sendQuery}\n   * @see {@link QueryResponse}\n   */\n  async sendQueryResponse(resp: QueryResponse, opts?: OperationOptions): Promise<void> {\n    this.#transport.ensureNotClosed('sendQueryResponse');\n    validateResponseMessage(resp, 'sendQueryResponse');\n    const pbResp = toProtoResponse(resp, this.clientId);\n    const signal = resolveSignalOptional(opts);\n    const deadline = resolveDeadline(this.#resolved.defaultRpcTimeoutMs, opts);\n    const span = this.#startSpan('process', resp.replyChannel, 1);\n    const t0 = performance.now();\n\n    try {\n      await withRetry(\n        async (sig) => {\n          await this.#transport.unaryCall<kubemq.Response, kubemq.Empty>('SendResponse', pbResp, {\n            signal: signal ? sig : undefined,\n            deadline,\n          });\n        },\n        this.#retryPolicy,\n        {\n          operation: 'sendQueryResponse',\n          operationType: 'query',\n          channel: resp.replyChannel,\n          serverAddress: this.address,\n        },\n        this.#resolved.logger,\n        this.#retryThrottle,\n        signal,\n        this.#retryHooks('sendQueryResponse', resp.replyChannel),\n      );\n      this.#telemetry.endSpan(span);\n    } catch (err) {\n      this.#telemetry.endSpan(span, err instanceof KubeMQError ? err : undefined);\n      throw err;\n    } finally {\n      this.#metrics.recordOperationDuration((performance.now() - t0) / 1000, {\n        operationName: 'sendQueryResponse',\n        channel: resp.replyChannel,\n      });\n    }\n  }\n\n  // ─── Fast-path Response Methods ───\n\n  /**\n   * Send a command response directly, bypassing retry and telemetry overhead.\n   *\n   * Use this when responding to high-throughput commands where latency matters\n   * more than retry safety. Responses are idempotent and time-critical — retrying\n   * a late response is worse than dropping it.\n   *\n   * @param resp - The command response to send.\n   * @param opts - Optional timeout override.\n   * @throws {@link ValidationError} If the response is invalid.\n   * @throws {@link ClientClosedError} If the client has been closed.\n   *\n   * @see {@link sendCommandResponse} for the full-featured version with retry and telemetry.\n   */\n  async sendCommandResponseDirect(resp: CommandResponse, opts?: OperationOptions): Promise<void> {\n    this.#transport.ensureNotClosed('sendCommandResponseDirect');\n    validateResponseMessage(resp, 'sendCommandResponseDirect');\n    const pbResp = toProtoResponse(resp, this.clientId);\n    const deadline = resolveDeadline(this.#resolved.defaultRpcTimeoutMs, opts);\n    await this.#transport.unaryCall<kubemq.Response, kubemq.Empty>('SendResponse', pbResp, {\n      deadline,\n      signal: opts?.signal,\n    });\n  }\n\n  /**\n   * Send a query response directly, bypassing retry and telemetry overhead.\n   *\n   * Use this when responding to high-throughput queries where latency matters\n   * more than retry safety. Responses are idempotent and time-critical — retrying\n   * a late response is worse than dropping it.\n   *\n   * @param resp - The query response to send.\n   * @param opts - Optional timeout override.\n   * @throws {@link ValidationError} If the response is invalid.\n   * @throws {@link ClientClosedError} If the client has been closed.\n   *\n   * @see {@link sendQueryResponse} for the full-featured version with retry and telemetry.\n   */\n  async sendQueryResponseDirect(resp: QueryResponse, opts?: OperationOptions): Promise<void> {\n    this.#transport.ensureNotClosed('sendQueryResponseDirect');\n    validateResponseMessage(resp, 'sendQueryResponseDirect');\n    const pbResp = toProtoResponse(resp, this.clientId);\n    const deadline = resolveDeadline(this.#resolved.defaultRpcTimeoutMs, opts);\n    await this.#transport.unaryCall<kubemq.Response, kubemq.Empty>('SendResponse', pbResp, {\n      deadline,\n      signal: opts?.signal,\n    });\n  }\n\n  // ─── Channel Management (REQ-API-2) ───\n\n  /**\n   * Create a channel on the KubeMQ server.\n   *\n   * @param channelName - Name of the channel to create.\n   * @param channelType - The channel type (events, events_store, commands, queries, queues).\n   * @throws {@link ValidationError} If the channel name is empty.\n   * @throws {@link ClientClosedError} If the client has been closed.\n   *\n   * @see {@link deleteChannel}\n   * @see {@link listChannels}\n   * @see {@link ChannelType}\n   */\n  async createChannel(channelName: string, channelType: ChannelType): Promise<void> {\n    this.#transport.ensureNotClosed('createChannel');\n    validateChannelName(channelName, 'createChannel');\n    const pbReq = new kubemq.Request({\n      RequestID: randomUUID(),\n      RequestTypeData: 2,\n      Channel: 'kubemq.cluster.internal.requests',\n      ClientID: this.clientId,\n      Metadata: 'create-channel',\n      Timeout: 10000,\n      Tags: toTagsMap({\n        channel_type: channelType,\n        channel: channelName,\n        client_id: this.clientId,\n      }),\n    });\n    await this.#transport.unaryCall<kubemq.Request, kubemq.Response>(\n      'SendRequest',\n      pbReq,\n      this.#buildCallOptions(),\n    );\n  }\n\n  /**\n   * Delete a channel from the KubeMQ server.\n   *\n   * @param channelName - Name of the channel to delete.\n   * @param channelType - The channel type.\n   * @throws {@link ValidationError} If the channel name is empty.\n   * @throws {@link ClientClosedError} If the client has been closed.\n   *\n   * @see {@link createChannel}\n   * @see {@link listChannels}\n   */\n  async deleteChannel(channelName: string, channelType: ChannelType): Promise<void> {\n    this.#transport.ensureNotClosed('deleteChannel');\n    validateChannelName(channelName, 'deleteChannel');\n    const pbReq = new kubemq.Request({\n      RequestID: randomUUID(),\n      RequestTypeData: 2,\n      Channel: 'kubemq.cluster.internal.requests',\n      ClientID: this.clientId,\n      Metadata: 'delete-channel',\n      Timeout: 10000,\n      Tags: toTagsMap({\n        channel_type: channelType,\n        channel: channelName,\n      }),\n    });\n    await this.#transport.unaryCall<kubemq.Request, kubemq.Response>(\n      'SendRequest',\n      pbReq,\n      this.#buildCallOptions(),\n    );\n  }\n\n  /**\n   * List channels of a given type, with optional name search filter.\n   *\n   * @param channelType - The channel type to list.\n   * @param search - Optional substring filter applied to channel names.\n   * @returns Array of channel metadata and statistics.\n   * @throws {@link ClientClosedError} If the client has been closed.\n   * @throws {@link TransientError} If the server cluster snapshot is not ready.\n   * @throws {@link RetryExhaustedError} If all retry attempts fail.\n   *\n   * @see {@link createChannel}\n   * @see {@link deleteChannel}\n   * @see {@link ChannelInfo}\n   */\n  async listChannels(channelType: ChannelType, search?: string): Promise<ChannelInfo[]> {\n    this.#transport.ensureNotClosed('listChannels');\n    const tags: Record<string, string> = {\n      channel_type: channelType,\n    };\n    if (search) {\n      tags.channel_search = search;\n    }\n\n    const signal = resolveSignal(this.#resolved.defaultSendTimeoutMs);\n    return withRetry(\n      async (sig) => {\n        const pbReq = new kubemq.Request({\n          RequestID: randomUUID(),\n          RequestTypeData: 2,\n          Channel: 'kubemq.cluster.internal.requests',\n          ClientID: this.clientId,\n          Metadata: 'list-channels',\n          Timeout: 10000,\n          Tags: toTagsMap(tags),\n        });\n        const response = await this.#transport.unaryCall<kubemq.Request, kubemq.Response>(\n          'SendRequest',\n          pbReq,\n          { signal: sig },\n        );\n        if (response.Error.includes('cluster snapshot not ready')) {\n          throw new TransientError({\n            code: ErrorCode.Unavailable,\n            message: 'Cluster snapshot not ready yet — the server is still initializing',\n            operation: 'listChannels',\n            isRetryable: true,\n            suggestion:\n              'Retry after a short delay; the cluster needs time to build its snapshot after startup',\n          });\n        }\n        // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n        if (!response.Body || response.Body.length === 0) {\n          return [];\n        }\n        return JSON.parse(new TextDecoder().decode(response.Body)) as ChannelInfo[];\n      },\n      this.#retryPolicy,\n      {\n        operation: 'listChannels',\n        operationType: 'send' as OperationType,\n        channel: channelType,\n        serverAddress: this.address,\n      },\n      this.#resolved.logger,\n      this.#retryThrottle,\n      signal,\n      this.#retryHooks('listChannels', channelType),\n    );\n  }\n\n  /** Convenience alias for `createChannel(name, 'events')`. @see {@link createChannel} */\n  createEventsChannel(name: string): Promise<void> {\n    return this.createChannel(name, 'events');\n  }\n  /** Convenience alias for `createChannel(name, 'events_store')`. @see {@link createChannel} */\n  createEventsStoreChannel(name: string): Promise<void> {\n    return this.createChannel(name, 'events_store');\n  }\n  /** Convenience alias for `createChannel(name, 'commands')`. @see {@link createChannel} */\n  createCommandsChannel(name: string): Promise<void> {\n    return this.createChannel(name, 'commands');\n  }\n  /** Convenience alias for `createChannel(name, 'queries')`. @see {@link createChannel} */\n  createQueriesChannel(name: string): Promise<void> {\n    return this.createChannel(name, 'queries');\n  }\n  /** Convenience alias for `createChannel(name, 'queues')`. @see {@link createChannel} */\n  createQueuesChannel(name: string): Promise<void> {\n    return this.createChannel(name, 'queues');\n  }\n\n  /** Convenience alias for `deleteChannel(name, 'events')`. @see {@link deleteChannel} */\n  deleteEventsChannel(name: string): Promise<void> {\n    return this.deleteChannel(name, 'events');\n  }\n  /** Convenience alias for `deleteChannel(name, 'events_store')`. @see {@link deleteChannel} */\n  deleteEventsStoreChannel(name: string): Promise<void> {\n    return this.deleteChannel(name, 'events_store');\n  }\n  /** Convenience alias for `deleteChannel(name, 'commands')`. @see {@link deleteChannel} */\n  deleteCommandsChannel(name: string): Promise<void> {\n    return this.deleteChannel(name, 'commands');\n  }\n  /** Convenience alias for `deleteChannel(name, 'queries')`. @see {@link deleteChannel} */\n  deleteQueriesChannel(name: string): Promise<void> {\n    return this.deleteChannel(name, 'queries');\n  }\n  /** Convenience alias for `deleteChannel(name, 'queues')`. @see {@link deleteChannel} */\n  deleteQueuesChannel(name: string): Promise<void> {\n    return this.deleteChannel(name, 'queues');\n  }\n\n  /** Convenience alias for `listChannels('events', search)`. @see {@link listChannels} */\n  listEventsChannels(search?: string): Promise<ChannelInfo[]> {\n    return this.listChannels('events', search);\n  }\n  /** Convenience alias for `listChannels('events_store', search)`. @see {@link listChannels} */\n  listEventsStoreChannels(search?: string): Promise<ChannelInfo[]> {\n    return this.listChannels('events_store', search);\n  }\n  /** Convenience alias for `listChannels('commands', search)`. @see {@link listChannels} */\n  listCommandsChannels(search?: string): Promise<ChannelInfo[]> {\n    return this.listChannels('commands', search);\n  }\n  /** Convenience alias for `listChannels('queries', search)`. @see {@link listChannels} */\n  listQueriesChannels(search?: string): Promise<ChannelInfo[]> {\n    return this.listChannels('queries', search);\n  }\n  /** Convenience alias for `listChannels('queues', search)`. @see {@link listChannels} */\n  listQueuesChannels(search?: string): Promise<ChannelInfo[]> {\n    return this.listChannels('queues', search);\n  }\n\n  // ─── Lifecycle ───\n\n  /**\n   * Gracefully close the client, draining in-flight callbacks and transport.\n   *\n   * @remarks\n   * Waits for active subscription callbacks to complete (up to `callbackTimeoutSeconds`),\n   * then closes the gRPC transport. After `close()`, all further operations throw\n   * {@link ClientClosedError}. Also triggered by `await using` (AsyncDisposable).\n   *\n   * @param opts - Optional drain timeouts.\n   * @see {@link CloseOptions}\n   */\n  close(opts?: CloseOptions): Promise<void> {\n    this.#closePromise ??= this.#doClose(opts);\n    return this.#closePromise;\n  }\n\n  async #doClose(opts?: CloseOptions): Promise<void> {\n    // Prevent new sender creation during shutdown\n    this.#closing = true;\n\n    const callbackTimeoutMs =\n      opts?.callbackTimeoutSeconds != null ? opts.callbackTimeoutSeconds * 1000 : 30_000;\n\n    // Drain all active callback dispatchers before transport close\n    if (this.#activeDispatchers.size > 0) {\n      const drainAll = Promise.all(Array.from(this.#activeDispatchers).map((d) => d.drain()));\n      await Promise.race([\n        drainAll,\n        new Promise<void>((resolve) => {\n          const timer = setTimeout(resolve, callbackTimeoutMs);\n          if (typeof timer === 'object' && 'unref' in timer) {\n            timer.unref();\n          }\n        }),\n      ]);\n\n      for (const dispatcher of this.#activeDispatchers) {\n        dispatcher.close();\n      }\n      this.#activeDispatchers.clear();\n    }\n\n    // Shut down shared streaming senders before transport close\n    if (this.#eventSenderPromise) {\n      const sender = await this.#eventSenderPromise.catch(() => null);\n      await sender?.close(5000);\n    }\n    if (this.#upstreamSenderPromise) {\n      const sender = await this.#upstreamSenderPromise.catch(() => null);\n      await sender?.close(5000);\n    }\n\n    await this.#transport.close(\n      opts?.timeoutSeconds != null ? opts.timeoutSeconds * 1000 : undefined,\n    );\n  }\n\n  /**\n   * Ping the server and retrieve server information.\n   *\n   * @param opts - Optional timeout and cancellation overrides.\n   * @returns Server metadata including host, version, and uptime.\n   * @throws {@link ClientClosedError} If the client has been closed.\n   * @throws {@link KubeMQTimeoutError} If the operation exceeds the configured timeout.\n   * @throws {@link RetryExhaustedError} If all retry attempts fail.\n   *\n   * @see {@link ServerInfo}\n   */\n  async ping(opts?: OperationOptions): Promise<ServerInfo> {\n    this.#transport.ensureNotClosed('ping');\n    const signal = resolveSignal(this.#resolved.defaultSendTimeoutMs, opts);\n    const t0 = performance.now();\n\n    try {\n      return await withRetry(\n        async (sig) => {\n          const result = await this.#transport.unaryCall<kubemq.Empty, kubemq.PingResult>(\n            'Ping',\n            new kubemq.Empty(),\n            { signal: sig },\n          );\n          return fromProtoPingResult(result);\n        },\n        this.#retryPolicy,\n        {\n          operation: 'ping',\n          operationType: 'events',\n          serverAddress: this.address,\n        },\n        this.#resolved.logger,\n        this.#retryThrottle,\n        signal,\n        this.#retryHooks('ping'),\n      );\n    } finally {\n      this.#metrics.recordOperationDuration((performance.now() - t0) / 1000, {\n        operationName: 'ping',\n      });\n    }\n  }\n\n  // ─── Queue Ack All / Purge ───\n\n  /**\n   * Acknowledge all pending messages in a queue channel.\n   *\n   * @param channel - Queue channel name.\n   * @param waitTimeSeconds - Seconds to wait for messages to settle. Default: 1.\n   * @param opts - Optional timeout and cancellation overrides.\n   * @returns Number of messages acknowledged.\n   * @throws {@link ValidationError} If the channel name is empty.\n   * @throws {@link ClientClosedError} If the client has been closed.\n   * @throws {@link KubeMQError} If the server reports an error.\n   * @throws {@link RetryExhaustedError} If all retry attempts fail.\n   *\n   * @see {@link purgeQueue}\n   */\n  async ackAllQueueMessages(\n    channel: string,\n    waitTimeSeconds = 1,\n    opts?: OperationOptions,\n  ): Promise<number> {\n    this.#transport.ensureNotClosed('ackAllQueueMessages');\n    validateChannelName(channel, 'ackAllQueueMessages');\n    const pbReq = new kubemq.AckAllQueueMessagesRequest({\n      RequestID: randomUUID(),\n      ClientID: this.clientId,\n      Channel: channel,\n      WaitTimeSeconds: waitTimeSeconds,\n    });\n    const signal = resolveSignal(this.#resolved.defaultSendTimeoutMs, opts);\n\n    const span = this.#startSpan('settle', channel, 4);\n    const t0 = performance.now();\n\n    try {\n      let affected = 0;\n      await withRetry(\n        async (sig) => {\n          const response = await this.#transport.unaryCall<\n            kubemq.AckAllQueueMessagesRequest,\n            kubemq.AckAllQueueMessagesResponse\n          >('AckAllQueueMessages', pbReq, { signal: sig });\n          if (response.IsError) {\n            throw new KubeMQError({\n              code: ErrorCode.Fatal,\n              message: response.Error || 'ackAllQueueMessages failed',\n              operation: 'ackAllQueueMessages',\n              channel,\n              isRetryable: false,\n            });\n          }\n          // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n          affected = response.AffectedMessages ?? 0;\n        },\n        this.#retryPolicy,\n        {\n          operation: 'ackAllQueueMessages',\n          operationType: 'queueSend',\n          channel,\n          serverAddress: this.address,\n        },\n        this.#resolved.logger,\n        this.#retryThrottle,\n        signal,\n        this.#retryHooks('ackAllQueueMessages', channel),\n      );\n      this.#telemetry.endSpan(span);\n      return affected;\n    } catch (err) {\n      this.#telemetry.endSpan(span, err instanceof KubeMQError ? err : undefined);\n      throw err;\n    } finally {\n      this.#metrics.recordOperationDuration((performance.now() - t0) / 1000, {\n        operationName: 'ackAllQueueMessages',\n        channel,\n      });\n    }\n  }\n\n  /**\n   * Purge all pending messages from a queue channel by acknowledging them.\n   *\n   * @param channel - Queue channel name to purge.\n   * @param opts - Optional timeout and cancellation overrides.\n   *\n   * @see {@link ackAllQueueMessages}\n   */\n  async purgeQueue(channel: string, opts?: OperationOptions): Promise<void> {\n    await this.ackAllQueueMessages(channel, 1, opts);\n  }\n\n  // ─── Queue Upstream Stream (GAP-01) ───\n\n  /**\n   * Create a persistent upstream queue stream for high-throughput batch sends.\n   *\n   * @remarks\n   * Keeps a single bidirectional gRPC stream open for multiple send operations,\n   * reducing per-message connection overhead compared to {@link sendQueueMessage}.\n   *\n   * @returns A {@link QueueUpstreamHandle} for sending batches and closing the stream.\n   * @throws {@link ClientClosedError} If the client has been closed.\n   *\n   * @see {@link sendQueueMessage}\n   * @see {@link QueueUpstreamHandle}\n   */\n  createQueueUpstream(): QueueUpstreamHandle {\n    this.#transport.ensureNotClosed('createQueueUpstream');\n\n    let stream = this.#transport.duplexStream<\n      kubemq.QueuesUpstreamRequest,\n      kubemq.QueuesUpstreamResponse\n    >('QueuesUpstream');\n    let active = true;\n    const pending = new Map<\n      string,\n      { resolve: (r: QueueUpstreamResult) => void; reject: (err: Error) => void }\n    >();\n    const clientId = this.clientId;\n    const tracker = this.#transport.getSubscriptionTracker();\n    const subId = randomUUID();\n\n    const attachHandlers = () => {\n      stream.onData((data: kubemq.QueuesUpstreamResponse) => {\n        const p = pending.get(data.RefRequestID);\n        if (p) {\n          pending.delete(data.RefRequestID);\n          const resp = fromProtoQueuesUpstreamResponse(data, 'createQueueUpstream');\n          if (resp.isError) p.reject(new Error(resp.error ?? 'Queue upstream error'));\n          else p.resolve(resp);\n        }\n      });\n      stream.onError((err: Error) => {\n        if (!active) return;\n        for (const [, p] of pending) p.reject(err);\n        pending.clear();\n      });\n      stream.onEnd(() => {\n        if (!active) return;\n        for (const [, p] of pending) p.reject(new Error('Queue upstream stream closed'));\n        pending.clear();\n      });\n    };\n    attachHandlers();\n\n    tracker.register({\n      id: subId,\n      pattern: 'queue-stream',\n      channel: '__upstream__',\n      resubscribe: () => {\n        if (!active) return;\n        // Clean up old stream listeners to prevent memory leak (burn-in bug 1)\n        try { stream.removeAllListeners(); } catch { /* ignore */ }\n        // Reject any in-flight promises so they don't dangle forever\n        for (const [, p] of pending) p.reject(new Error('Queue upstream stream reconnecting'));\n        pending.clear();\n        stream = this.#transport.duplexStream<\n          kubemq.QueuesUpstreamRequest,\n          kubemq.QueuesUpstreamResponse\n        >('QueuesUpstream');\n        attachHandlers();\n      },\n    });\n\n    return {\n      get isActive() {\n        return active;\n      },\n      send(msgs: QueueMessage[]): Promise<QueueUpstreamResult> {\n        if (!active) return Promise.reject(new Error('Queue upstream stream is closed'));\n        const pbReq = toProtoQueuesUpstreamRequest(msgs, clientId);\n        const reqId = pbReq.RequestID;\n        return new Promise<QueueUpstreamResult>((resolve, reject) => {\n          pending.set(reqId, { resolve, reject });\n          stream.write(pbReq);\n        });\n      },\n      close() {\n        if (!active) return;\n        active = false;\n        tracker.unregister(subId);\n        for (const [, p] of pending) p.reject(new Error('Queue upstream closed by client'));\n        pending.clear();\n        stream.end();\n      },\n    };\n  }\n\n  // ─── Consume Queue (GAP-23) ───\n\n  /**\n   * Consume queue messages as an async iterable of batches.\n   *\n   * @remarks\n   * Wraps {@link streamQueueMessages} in a `for await...of`-friendly interface.\n   * Each yielded {@link QueueBatch} must be settled via `ackAll()`, `nackAll()`,\n   * or `reQueueAll()` before the next batch is fetched.\n   *\n   * @param opts - Stream options including channel and auto-ack behavior.\n   * @yields Batches of messages with batch-level settlement methods.\n   *\n   * @see {@link streamQueueMessages}\n   * @see {@link QueueBatch}\n   * @see {@link QueueStreamOptions}\n   */\n  // M2 fix: removed dead while(true) + break outer loop\n  async *consumeQueue(opts: QueueStreamOptions): AsyncIterable<QueueBatch> {\n    const handle = this.streamQueueMessages(opts);\n    try {\n      let batchResolve: ((batch: QueueBatch | null) => void) | undefined;\n      let batchReject: ((err: Error) => void) | undefined;\n      let closed = false;\n\n      handle.onMessages((messages) => {\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-member-access\n        const txnId = String((messages[0] as any)?._transactionId ?? '');\n        const batch: QueueBatch = {\n          messages,\n          transactionId: txnId,\n          ackAll: () => {\n            handle.ackAll();\n          },\n          nackAll: () => {\n            handle.nackAll();\n          },\n          reQueueAll: (ch: string) => {\n            handle.reQueueAll(ch);\n          },\n        };\n        if (batchResolve) {\n          const r = batchResolve;\n          batchResolve = undefined;\n          batchReject = undefined;\n          r(batch);\n        }\n      });\n\n      handle.onError((err) => {\n        closed = true;\n        if (batchReject) {\n          const rej = batchReject;\n          batchResolve = undefined;\n          batchReject = undefined;\n          rej(err);\n        }\n      });\n\n      handle.onClose(() => {\n        closed = true;\n        if (batchResolve) {\n          const r = batchResolve;\n          batchResolve = undefined;\n          batchReject = undefined;\n          r(null);\n        }\n      });\n\n      // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- closed is mutated by async callbacks\n      while (!closed) {\n        const batch = await new Promise<QueueBatch | null>((resolve, reject) => {\n          batchResolve = resolve;\n          batchReject = reject;\n        });\n        if (batch === null) break;\n        yield batch;\n      }\n    } finally {\n      handle.close();\n    }\n  }\n\n  // ─── Event Stream Send (GAP-07) ───\n\n  /**\n   * Create a persistent event publishing stream for high-throughput fire-and-forget events.\n   *\n   * @remarks\n   * Keeps a single gRPC bidirectional stream open. Errors are delivered\n   * asynchronously via the `onError` handler on the returned handle.\n   *\n   * @returns An {@link EventStreamHandle} for sending events and closing the stream.\n   * @throws {@link ClientClosedError} If the client has been closed.\n   *\n   * @see {@link sendEvent}\n   * @see {@link EventStreamHandle}\n   */\n  createEventStream(): EventStreamHandle {\n    this.#transport.ensureNotClosed('createEventStream');\n\n    let stream = this.#transport.duplexStream<kubemq.Event, kubemq.Result>('SendEventsStream');\n    let active = true;\n    let streamReady = true; // JS-1v2: tracks whether the stream is usable\n    let errHandler: ((err: Error) => void) | undefined;\n    const clientId = this.clientId;\n    const tracker = this.#transport.getSubscriptionTracker();\n    const transport = this.#transport;\n    const subId = randomUUID();\n\n    // JS-1v2: drain all pending waiters and mark stream as broken\n    const breakStream = () => {\n      streamReady = false;\n      const staleDrain = drainQueue.splice(0);\n      for (const entry of staleDrain) {\n        entry.reject(new Error('Event stream broken — will auto-reconnect'));\n      }\n      drainListenerAttached = false;\n    };\n\n    // JS-1v2: recreate the stream (used by both self-heal and resubscribe)\n    const recreateStream = () => {\n      try {\n        stream.removeAllListeners();\n      } catch { /* ignore */ }\n      stream = transport.duplexStream<kubemq.Event, kubemq.Result>('SendEventsStream');\n      drainListenerAttached = false;\n      streamReady = true;\n      attachHandlers();\n    };\n\n    // JS-1v2: self-healing — wait for transport READY then recreate stream\n    let healingInProgress = false;\n    const selfHeal = async () => {\n      if (!active || healingInProgress) return;\n      healingInProgress = true;\n      try {\n        // Wait for transport to be READY (poll with backoff)\n        let delay = 500;\n        const maxDelay = 5000;\n        // active/streamReady are closure flags flipped by the stream's onError/onEnd\n        // handlers (and resubscribe/close) during the awaits below. TS's flow analysis\n        // can't model the cross-closure mutation and reports the rechecks as redundant,\n        // but they are load-bearing under async interleaving — do not remove them.\n        // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n        while (active && transport.state !== ConnectionState.READY) {\n          await new Promise<void>((r) => setTimeout(r, delay));\n          delay = Math.min(delay * 1.5, maxDelay);\n        }\n        // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n        if (!active) return;\n        // If resubscribe() already fixed the stream while we were waiting, skip\n        if (streamReady) return;\n        // Small extra delay to let the new gRPC client stabilize\n        await new Promise<void>((r) => setTimeout(r, 500));\n        // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n        if (!active || streamReady) return;\n        recreateStream();\n      } catch {\n        // If stream creation fails, wait and retry\n        healingInProgress = false;\n        // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n        if (active) {\n          await new Promise<void>((r) => setTimeout(r, 1000));\n          void selfHeal();\n        }\n      } finally {\n        healingInProgress = false;\n      }\n    };\n\n    const attachHandlers = () => {\n      stream.onData((result: kubemq.Result) => {\n        if (!result.Sent && errHandler)\n          errHandler(new Error(result.Error || 'Event stream send error'));\n      });\n      stream.onError((err: Error) => {\n        if (!active) return;\n        if (errHandler) errHandler(err);\n        // JS-1v2: break the stream and self-heal\n        breakStream();\n        void selfHeal();\n      });\n      stream.onEnd(() => {\n        // JS-1v2: if the stream ends unexpectedly, treat it like an error\n        if (!active || healingInProgress) return; // already healing or closed\n        breakStream();\n        void selfHeal();\n      });\n    };\n    attachHandlers();\n\n    tracker.register({\n      id: subId,\n      pattern: 'events',\n      channel: '__event-stream__',\n      resubscribe: () => {\n        if (!active) return;\n        breakStream();\n        recreateStream();\n      },\n    });\n\n    const drainQueue: { resolve: () => void; reject: (err: Error) => void }[] = [];\n    let drainListenerAttached = false;\n\n    const ensureDrainListener = () => {\n      if (drainListenerAttached) return;\n      drainListenerAttached = true;\n      stream.onDrain(() => {\n        drainListenerAttached = false;\n        const batch = drainQueue.splice(0);\n        for (const entry of batch) entry.resolve();\n      });\n    };\n\n    return {\n      get isActive() {\n        return active;\n      },\n      send(msg: EventMessage): Promise<void> {\n        if (!active) return Promise.resolve();\n        // JS-1v2: if stream is broken (reconnecting), reject so caller can retry\n        if (!streamReady) return Promise.reject(new Error('Event stream reconnecting'));\n        const ok = stream.write(toProtoEvent(msg, clientId, false));\n        if (ok) return Promise.resolve();\n        return new Promise<void>((resolve, reject) => {\n          drainQueue.push({ resolve, reject });\n          ensureDrainListener();\n        });\n      },\n      onError(handler: (err: Error) => void) {\n        errHandler = handler;\n      },\n      close() {\n        if (!active) return;\n        active = false;\n        tracker.unregister(subId);\n        stream.end();\n      },\n    };\n  }\n\n  /**\n   * Create a persistent event-store publishing stream with delivery confirmation.\n   *\n   * @remarks\n   * Unlike {@link createEventStream}, the `send()` method on the returned handle\n   * returns a `Promise` that resolves when the server confirms persistence.\n   *\n   * @returns An {@link EventStoreStreamHandle} for sending events and closing the stream.\n   * @throws {@link ClientClosedError} If the client has been closed.\n   *\n   * @see {@link sendEventStore}\n   * @see {@link EventStoreStreamHandle}\n   */\n  createEventStoreStream(): EventStoreStreamHandle {\n    this.#transport.ensureNotClosed('createEventStoreStream');\n\n    let stream = this.#transport.duplexStream<kubemq.Event, kubemq.Result>('SendEventsStream');\n    let active = true;\n    let streamReady = true; // JS-1v2: tracks whether the stream is usable\n    let errHandler: ((err: Error) => void) | undefined;\n    const clientId = this.clientId;\n    const tracker = this.#transport.getSubscriptionTracker();\n    const transport = this.#transport;\n    const subId = randomUUID();\n    const pending = new Map<string, { resolve: () => void; reject: (err: Error) => void }>();\n\n    // JS-1v2: reject all pending and mark stream as broken\n    const breakStream = () => {\n      streamReady = false;\n      for (const [, p] of pending) {\n        p.reject(new Error('Event store stream broken — will auto-reconnect'));\n      }\n      pending.clear();\n    };\n\n    // JS-1v2: recreate the stream (used by both self-heal and resubscribe)\n    const recreateStream = () => {\n      try {\n        stream.removeAllListeners();\n      } catch { /* ignore */ }\n      stream = transport.duplexStream<kubemq.Event, kubemq.Result>('SendEventsStream');\n      streamReady = true;\n      attachHandlers();\n    };\n\n    // JS-1v2: self-healing — wait for transport READY then recreate stream\n    let healingInProgress = false;\n    const selfHeal = async () => {\n      if (!active || healingInProgress) return;\n      healingInProgress = true;\n      try {\n        // Wait for transport to be READY (poll with backoff)\n        let delay = 500;\n        const maxDelay = 5000;\n        // active/streamReady are closure flags flipped by the stream's onError/onEnd\n        // handlers (and resubscribe/close) during the awaits below. TS's flow analysis\n        // can't model the cross-closure mutation and reports the rechecks as redundant,\n        // but they are load-bearing under async interleaving — do not remove them.\n        // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n        while (active && transport.state !== ConnectionState.READY) {\n          await new Promise<void>((r) => setTimeout(r, delay));\n          delay = Math.min(delay * 1.5, maxDelay);\n        }\n        // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n        if (!active) return;\n        // If resubscribe() already fixed the stream while we were waiting, skip\n        if (streamReady) return;\n        // Small extra delay to let the new gRPC client stabilize\n        await new Promise<void>((r) => setTimeout(r, 500));\n        // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n        if (!active || streamReady) return;\n        recreateStream();\n      } catch {\n        // If stream creation fails, wait and retry\n        healingInProgress = false;\n        // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n        if (active) {\n          await new Promise<void>((r) => setTimeout(r, 1000));\n          void selfHeal();\n        }\n      } finally {\n        healingInProgress = false;\n      }\n    };\n\n    const attachHandlers = () => {\n      stream.onData((result: kubemq.Result) => {\n        const p = pending.get(result.EventID);\n        if (p) {\n          pending.delete(result.EventID);\n          if (result.Sent) p.resolve();\n          else p.reject(new Error(result.Error || 'Event store stream send failed'));\n        }\n      });\n      stream.onError((err: Error) => {\n        if (!active) return;\n        if (errHandler) errHandler(err);\n        // JS-1v2: break the stream and self-heal\n        breakStream();\n        void selfHeal();\n      });\n      stream.onEnd(() => {\n        // JS-1v2: if the stream ends unexpectedly, treat it like an error\n        if (!active || healingInProgress) return; // already healing or closed\n        breakStream();\n        void selfHeal();\n      });\n    };\n    attachHandlers();\n\n    tracker.register({\n      id: subId,\n      pattern: 'events-store',\n      channel: '__event-store-stream__',\n      resubscribe: () => {\n        if (!active) return;\n        breakStream();\n        recreateStream();\n      },\n    });\n\n    return {\n      get isActive() {\n        return active;\n      },\n      send(msg: EventStoreMessage): Promise<void> {\n        if (!active) return Promise.reject(new Error('Event store stream is closed'));\n        // JS-1v2: if stream is broken (reconnecting), reject so caller can retry\n        if (!streamReady) return Promise.reject(new Error('Event store stream reconnecting'));\n        const pbEvent = toProtoEvent(msg, clientId, true);\n        const eventId = pbEvent.EventID;\n        return new Promise<void>((resolve, reject) => {\n          pending.set(eventId, { resolve, reject });\n          stream.write(pbEvent);\n        });\n      },\n      onError(handler: (err: Error) => void) {\n        errHandler = handler;\n      },\n      close() {\n        if (!active) return;\n        active = false;\n        tracker.unregister(subId);\n        for (const [, p] of pending) p.reject(new Error('Event store stream closed by client'));\n        pending.clear();\n        stream.end();\n      },\n    };\n  }\n\n  // ─── AsyncDisposable ───\n\n  async [Symbol.asyncDispose](): Promise<void> {\n    await this.close();\n  }\n\n  // ─── Internal ───\n\n  #parseServerAddress(): { host: string; port: number } {\n    const addr = this.address;\n    const colonIdx = addr.lastIndexOf(':');\n    if (colonIdx > 0) {\n      const port = Number(addr.slice(colonIdx + 1));\n      return { host: addr.slice(0, colonIdx), port: Number.isFinite(port) ? port : 50000 };\n    }\n    return { host: addr, port: 50000 };\n  }\n\n  #startSpan(\n    operationName: OperationKind,\n    channel: string,\n    spanKind: number,\n    extra?: Partial<Pick<SpanConfig, 'messageId' | 'consumerGroup' | 'bodySize' | 'batchCount'>>,\n  ) {\n    // Fast path: skip config object allocation when telemetry is disabled\n    if (!this.#telemetry.isEnabled) return undefined;\n    const { host, port } = this.#parseServerAddress();\n    return this.#telemetry.startSpan({\n      operationName,\n      channel,\n      spanKind: spanKind,\n      clientId: this.clientId,\n      serverAddress: host,\n      serverPort: port,\n      ...extra,\n    });\n  }\n\n  #retryHooks(operationName: string, channel?: string): RetryHooks {\n    return {\n      onRetry: () => {\n        this.#metrics.recordRetryAttempt({ operationName, channel });\n      },\n      onExhausted: () => {\n        this.#metrics.recordRetryExhausted({ operationName, channel });\n      },\n    };\n  }\n\n  #buildCallOptions(opts?: OperationOptions): TransportCallOptions {\n    const callOpts: TransportCallOptions = {};\n    if (opts?.timeout) {\n      callOpts.deadline = new Date(Date.now() + opts.timeout);\n    }\n    if (opts?.signal) {\n      callOpts.signal = opts.signal;\n    }\n    return callOpts;\n  }\n\n  #mapStreamError(err: Error, operation: string, channel?: string): KubeMQError {\n    const rawErr = err as RawTransportError;\n    if (typeof rawErr.code === 'number' && typeof rawErr.details === 'string') {\n      return mapGrpcError(rawErr, { operation, channel, serverAddress: this.address });\n    }\n    return new KubeMQError({\n      message: err.message,\n      operation,\n      channel,\n      isRetryable: false,\n      cause: err,\n    });\n  }\n}\n","/**\n * UUID generation using Node.js built-in `crypto.randomUUID()`.\n * Eliminates the `uuid` npm package dependency (JS-50).\n *\n * Available globally since Node.js 19 via `globalThis.crypto`.\n * The SDK targets Node.js ≥20, so this is always available.\n *\n * @internal\n */\n\nimport { randomUUID } from 'node:crypto';\n\n/**\n * Generate a cryptographically random UUID v4 string.\n */\nexport function generateId(): string {\n  return randomUUID();\n}\n","/**\n * Send-side message size validation.\n * Prevents accidental OOM from oversized payloads before they reach\n * the gRPC serialization layer.\n *\n * @internal\n */\n\nimport { ValidationError, ErrorCode } from '../../errors.js';\n\n/**\n * Validate that the message body does not exceed the configured maximum\n * send size. Throws `ValidationError` with an actionable suggestion.\n *\n * @param body - The serialized message body\n * @param maxSendMessageSize - Maximum allowed body size in bytes\n * @param operation - The SDK operation name (for error context)\n * @param channel - The target channel name (for error context)\n */\nexport function validateMessageSize(\n  body: Uint8Array,\n  maxSendMessageSize: number,\n  operation: string,\n  channel?: string,\n): void {\n  if (body.byteLength > maxSendMessageSize) {\n    throw new ValidationError({\n      code: ErrorCode.ValidationFailed,\n      message: `Message body size (${String(body.byteLength)} bytes) exceeds maximum send size (${String(maxSendMessageSize)} bytes)`,\n      operation,\n      channel,\n      isRetryable: false,\n      suggestion: `Reduce message body size or increase maxSendMessageSize in ClientOptions (current: ${String(maxSendMessageSize)})`,\n    });\n  }\n}\n","import { randomUUID } from 'node:crypto';\nimport type { KubeMQError } from '../errors.js';\nimport type { MessageBody } from '../internal/utils/body.js';\nimport { normalizeBody } from '../internal/utils/body.js';\nimport { validateEventMessage } from '../internal/validation/message-validator.js';\n\nexport type { MessageBody };\n\n/**\n * Outbound event message.\n *\n * @remarks\n * **Async safety:** Not safe for concurrent modification. Create a new instance\n * per send operation. Do not share outbound message objects between concurrent\n * async operations. Message objects are frozen (`Object.freeze()`) by factory\n * functions — modification after creation throws a `TypeError`.\n */\nexport interface EventMessage {\n  readonly channel: string;\n  readonly body?: MessageBody;\n  readonly metadata?: string;\n  readonly tags?: Record<string, string>;\n  readonly id?: string;\n  readonly clientId?: string;\n}\n\n/**\n * Received event from a subscription.\n *\n * @remarks\n * **Async safety:** Safe to read from multiple async contexts concurrently.\n * Do not modify received message objects — they are shared references from\n * the subscription's delivery pipeline. Fields are readonly.\n */\nexport interface EventReceived {\n  readonly id: string;\n  readonly channel: string;\n  readonly timestamp: Date;\n  readonly body: Uint8Array;\n  readonly metadata: string;\n  readonly tags: Record<string, string>;\n}\n\n/**\n * Subscription request for events.\n *\n * @remarks\n * **Async safety:** Subscription callbacks fire sequentially on the Node.js\n * event loop by default. Opt-in concurrent processing is available via\n * `maxConcurrentCallbacks` in `SubscriptionOptions`. When concurrency > 1,\n * message ordering is NOT guaranteed.\n */\nexport interface EventsSubscription {\n  readonly channel: string;\n  readonly group?: string;\n  readonly onEvent: (event: EventReceived) => void;\n  readonly onError: (err: KubeMQError) => void;\n}\n\n/**\n * Handle for a persistent event publishing stream (fire-and-forget).\n *\n * @remarks\n * Obtained from {@link KubeMQClient.createEventStream}. Keeps a single gRPC\n * bidirectional stream open for high-throughput publishing. The `send()` method\n * is synchronous (fire-and-forget) — errors are delivered asynchronously via\n * the `onError` handler.\n *\n * @see {@link KubeMQClient.createEventStream}\n * @see {@link EventMessage}\n */\nexport interface EventStreamHandle {\n  /** Publish an event over the stream. Returns a Promise that resolves when the write buffer has capacity (backpressure-aware). */\n  send(msg: EventMessage): Promise<void>;\n  /** Register a handler for asynchronous stream errors. */\n  onError(handler: (err: Error) => void): void;\n  /** Close the stream and release resources. */\n  close(): void;\n  /** Whether the stream is still active. */\n  readonly isActive: boolean;\n}\n\n/**\n * Create a validated, frozen EventMessage with defaults applied.\n *\n * - `id` defaults to a random UUID\n * - `metadata` defaults to `''`\n * - `tags` defaults to `{}`\n * - String/Buffer body is normalized to `Uint8Array`\n *\n * @example\n * ```typescript\n * const event = createEventMessage({\n *   channel: 'events.notifications',\n *   body: new TextEncoder().encode('hello world'),\n *   metadata: 'greeting',\n *   tags: { source: 'api' },\n * });\n * await client.sendEvent(event);\n * ```\n */\nexport function createEventMessage(\n  opts: Omit<EventMessage, 'id'> & { id?: string },\n): Readonly<EventMessage> {\n  validateEventMessage(opts, 'createEventMessage');\n\n  const msg: EventMessage = {\n    channel: opts.channel,\n    body: opts.body !== undefined ? normalizeBody(opts.body) : undefined,\n    metadata: opts.metadata ?? '',\n    tags: opts.tags ?? {},\n    id: opts.id ?? randomUUID(),\n    clientId: opts.clientId,\n  };\n\n  return Object.freeze(msg);\n}\n","import { randomUUID } from 'node:crypto';\nimport type { KubeMQError } from '../errors.js';\nimport type { MessageBody } from '../internal/utils/body.js';\nimport { normalizeBody } from '../internal/utils/body.js';\nimport { validateQueueMessage } from '../internal/validation/message-validator.js';\n\n/**\n * Delivery policy for a queue message controlling expiration, delay, and dead-letter behavior.\n *\n * @remarks\n * Attach to a {@link QueueMessage} via the `policy` property.\n * When `maxReceiveCount` is exceeded, the message is routed to `maxReceiveQueue`\n * (dead-letter queue) if specified, otherwise it is discarded.\n *\n * @see {@link QueueMessage}\n * @see {@link KubeMQClient.sendQueueMessage}\n */\nexport interface QueueMessagePolicy {\n  /** Time in seconds after which the message expires and is discarded. */\n  readonly expirationSeconds?: number;\n  /** Delay in seconds before the message becomes visible to consumers. */\n  readonly delaySeconds?: number;\n  /** Maximum number of delivery attempts before dead-lettering. */\n  readonly maxReceiveCount?: number;\n  /** Dead-letter queue channel. Messages exceeding `maxReceiveCount` are routed here. */\n  readonly maxReceiveQueue?: string;\n}\n\n/**\n * Outbound queue message.\n *\n * @remarks\n * **Async safety:** Not safe for concurrent modification. Create a new instance\n * per send operation. Do not share outbound message objects between concurrent\n * async operations. Message objects are frozen (`Object.freeze()`) by factory\n * functions — modification after creation throws a `TypeError`.\n */\nexport interface QueueMessage {\n  readonly channel: string;\n  readonly body?: MessageBody;\n  readonly metadata?: string;\n  readonly tags?: Record<string, string>;\n  readonly policy?: QueueMessagePolicy;\n  readonly id?: string;\n  readonly clientId?: string;\n}\n\n/**\n * Received queue message with acknowledgment methods.\n *\n * @remarks\n * **Async safety:** The `ack()`, `nack()`, and `reQueue()` methods are safe\n * to call from any async context, but each message MUST be acknowledged exactly\n * once. Calling `ack()` after `nack()` (or vice versa) throws a\n * `ValidationError`.\n */\nexport interface ReceivedQueueMessage {\n  readonly id: string;\n  readonly channel: string;\n  readonly fromClientId: string;\n  readonly body: Uint8Array;\n  readonly metadata: string;\n  readonly tags: Record<string, string>;\n  readonly timestamp: Date;\n  readonly sequence: number;\n  readonly receiveCount: number;\n  readonly isReRouted: boolean;\n  readonly reRouteFromQueue?: string;\n  readonly expiredAt?: Date;\n  readonly delayedTo?: Date;\n\n  ack(): Promise<void>;\n  nack(): Promise<void>;\n  reQueue(channel: string): Promise<void>;\n}\n\n/**\n * Request parameters for polling messages from a queue channel.\n *\n * @remarks\n * Used by {@link KubeMQClient.receiveQueueMessages} and\n * {@link KubeMQClient.peekQueueMessages}.\n *\n * @see {@link KubeMQClient.receiveQueueMessages}\n * @see {@link ReceivedQueueMessage}\n */\nexport interface QueuePollRequest {\n  /** Queue channel to poll from. */\n  readonly channel: string;\n  /** Maximum time in seconds to wait for messages before returning an empty result. */\n  readonly waitTimeoutSeconds: number;\n  /** Maximum number of messages to receive in a single poll. Default: 1. */\n  readonly maxMessages?: number;\n  /**\n   * Automatically acknowledge messages upon receipt. Default: `false`.\n   * @remarks **No effect on the unary receive API** — messages are always auto-acked server-side.\n   * Use {@link KubeMQClient.streamQueueMessages} for explicit ack/reject control.\n   */\n  readonly autoAck?: boolean;\n}\n\n/**\n * Result of a successful queue message send operation.\n *\n * @see {@link KubeMQClient.sendQueueMessage}\n * @see {@link QueueMessage}\n */\nexport interface QueueSendResult {\n  /** Server-assigned message ID. */\n  readonly messageId: string;\n  /** Timestamp when the message was persisted by the server. */\n  readonly sentAt: Date;\n  /** When the message will expire, if an expiration policy was set. */\n  readonly expirationAt?: Date;\n  /** When the message becomes visible, if a delay policy was set. */\n  readonly delayedTo?: Date;\n}\n\n/**\n * Result of a batch queue message send operation.\n *\n * @remarks\n * Each item in `results` corresponds to the message at the same index in\n * the original batch. Check individual `error` fields for per-message failures.\n *\n * @see {@link KubeMQClient.sendQueueMessagesBatch}\n * @see {@link QueueSendResult}\n */\nexport interface BatchSendResult {\n  /** Per-message results, ordered by batch index. */\n  readonly results: {\n    /** Index of the message in the original batch array. */\n    index: number;\n    /** Server-assigned message ID on success. */\n    messageId?: string;\n    /** Error details if this particular message failed. */\n    error?: KubeMQError;\n  }[];\n  /** Number of messages successfully sent. */\n  readonly successCount: number;\n  /** Number of messages that failed. */\n  readonly failureCount: number;\n}\n\n/**\n * Options for batch send operations.\n *\n * @see {@link KubeMQClient.sendQueueMessagesBatch}\n */\nexport interface BatchSendOptions {\n  /** Number of messages to include per batch request. */\n  readonly batchSize?: number;\n}\n\n/**\n * Options for creating a streaming queue consumer via {@link KubeMQClient.streamQueueMessages}.\n *\n * @remarks\n * The streaming API provides transactional message processing with explicit\n * ack/reject/requeue per message or per batch, unlike the simple poll API.\n *\n * @see {@link KubeMQClient.streamQueueMessages}\n * @see {@link QueueStreamHandle}\n */\nexport interface QueueStreamOptions {\n  /** Queue channel to consume from. */\n  readonly channel: string;\n  /** Time in seconds to wait for messages before the stream returns empty. */\n  readonly waitTimeoutSeconds?: number;\n  /** Maximum number of messages per batch. */\n  readonly maxMessages?: number;\n  /** Automatically acknowledge messages after delivery to the handler. */\n  readonly autoAck?: boolean;\n  /** Custom metadata key-value pairs sent with each downstream request. */\n  readonly metadata?: Record<string, string>;\n}\n\n/**\n * A queue message received via the streaming API with synchronous settlement methods.\n *\n * @remarks\n * Unlike {@link ReceivedQueueMessage} (from the poll API), the streaming message's\n * `ack()`, `nack()`, and `reQueue()` methods are synchronous — they write to\n * the underlying gRPC stream without awaiting a response.\n *\n * Each message within a transaction must be settled exactly once.\n *\n * @see {@link QueueStreamHandle}\n * @see {@link ReceivedQueueMessage}\n */\nexport interface QueueStreamMessage {\n  /** Server-assigned message ID. */\n  readonly id: string;\n  /** Channel the message was received from. */\n  readonly channel: string;\n  /** Raw message body. */\n  readonly body: Uint8Array;\n  /** Application metadata string. */\n  readonly metadata: string;\n  /** User-defined key-value tags. */\n  readonly tags: Record<string, string>;\n  /** Server-side timestamp when the message was enqueued. */\n  readonly timestamp: Date;\n  /** Monotonically increasing sequence number within the channel. */\n  readonly sequence: number;\n  /** Number of times this message has been delivered. */\n  readonly receiveCount: number;\n  /** MD5 hash of the body, if computed by the server. */\n  readonly md5OfBody?: string;\n  /** Whether this message was re-routed from another queue. */\n  readonly isReRouted: boolean;\n  /** Original queue channel if the message was re-routed. */\n  readonly reRouteFromQueue?: string;\n  /** Expiration timestamp, if an expiration policy was set. */\n  readonly expiredAt?: Date;\n  /** Delayed-until timestamp, if a delay policy was set. */\n  readonly delayedTo?: Date;\n\n  /** Acknowledge the message, removing it from the queue. */\n  ack(): void;\n  /** Reject (nack) the message, returning it to the queue for redelivery. */\n  nack(): void;\n  /** Move the message to a different queue channel. */\n  reQueue(channel: string): void;\n}\n\n/**\n * Handle for an active streaming queue consumer, providing batch settlement and lifecycle control.\n *\n * @remarks\n * Obtained from {@link KubeMQClient.streamQueueMessages}. Register handlers\n * via `onMessages`, `onError`, and `onClose`, then settle messages individually\n * or in bulk. Call `close()` to gracefully shut down the stream.\n *\n * @see {@link KubeMQClient.streamQueueMessages}\n * @see {@link QueueStreamMessage}\n * @see {@link QueueStreamOptions}\n */\nexport interface QueueStreamHandle {\n  /** Whether the stream is still active and accepting operations. */\n  readonly isActive: boolean;\n  /** Metadata returned by the most recent server response. */\n  readonly responseMetadata: Record<string, string>;\n  /** Register a handler invoked when a batch of messages is received. */\n  onMessages(handler: (messages: QueueStreamMessage[]) => void): void;\n  /** Register a handler invoked when a stream error occurs. */\n  onError(handler: (err: Error) => void): void;\n  /** Register a handler invoked when the stream closes. */\n  onClose(handler: () => void): void;\n  /** Gracefully close the stream and release resources. */\n  close(): void;\n  /** Acknowledge all messages in the current transaction. */\n  ackAll(): void;\n  /** Reject (nack) all messages in the current transaction. */\n  nackAll(): void;\n  /** Re-queue all messages in the current transaction to a different channel. */\n  reQueueAll(channel: string): void;\n  /** Acknowledge specific messages by their sequence numbers. */\n  ackRange(sequences: number[]): void;\n  /** Reject specific messages by their sequence numbers. */\n  nackRange(sequences: number[]): void;\n  /** Re-queue specific messages by their sequence numbers to a different channel. */\n  reQueueRange(channel: string, sequences: number[]): void;\n  /** @deprecated Not supported by the server — throws NotImplementedError. Reserved for future use. */\n  getActiveOffsets(): Promise<number[]>;\n  /** @deprecated Not supported by the server — throws NotImplementedError. Reserved for future use. */\n  getTransactionStatus(): Promise<boolean>;\n}\n\n/**\n * Result of a queue upstream (streaming send) operation.\n *\n * @see {@link QueueUpstreamHandle}\n * @see {@link KubeMQClient.createQueueUpstream}\n */\nexport interface QueueUpstreamResult {\n  /** Correlation ID matching the original request. */\n  readonly requestId: string;\n  /** Per-message send results within the batch. */\n  readonly results: QueueSendResult[];\n  /** Whether the upstream operation encountered an error. */\n  readonly isError: boolean;\n  /** Error description if `isError` is `true`. */\n  readonly error?: string;\n}\n\n/**\n * Handle for a persistent upstream queue stream, enabling high-throughput batch sends.\n *\n * @remarks\n * Obtained from {@link KubeMQClient.createQueueUpstream}. Unlike\n * {@link KubeMQClient.sendQueueMessage}, the upstream stream keeps a\n * single gRPC bidirectional stream open for multiple send operations,\n * reducing per-message overhead.\n *\n * @see {@link KubeMQClient.createQueueUpstream}\n * @see {@link QueueUpstreamResult}\n */\nexport interface QueueUpstreamHandle {\n  /** Send a batch of messages over the upstream stream. */\n  send(msgs: QueueMessage[]): Promise<QueueUpstreamResult>;\n  /** Close the upstream stream and release resources. */\n  close(): void;\n  /** Whether the stream is still active. */\n  readonly isActive: boolean;\n}\n\n/**\n * A batch of messages from the queue streaming consumer, with batch-level settlement.\n *\n * @remarks\n * Yielded by the {@link KubeMQClient.consumeQueue} async iterator.\n * Settle the entire batch at once via `ackAll()`, `nackAll()`, or `reQueueAll()`.\n *\n * @see {@link KubeMQClient.consumeQueue}\n * @see {@link QueueStreamMessage}\n */\nexport interface QueueBatch {\n  /** Messages in this batch. */\n  readonly messages: QueueStreamMessage[];\n  /** Server-assigned transaction ID for this batch. */\n  readonly transactionId: string;\n  /** Acknowledge all messages in the batch. */\n  ackAll(): void;\n  /** Reject all messages in the batch. */\n  nackAll(): void;\n  /** Re-queue all messages in the batch to a different channel. */\n  reQueueAll(channel: string): void;\n}\n\n/**\n * Create a validated, frozen QueueMessage with defaults applied.\n *\n * - `id` defaults to a random UUID\n * - `metadata` defaults to `''`\n * - `tags` defaults to `{}`\n * - Nested `policy` is also frozen\n * - String/Buffer body is normalized to `Uint8Array`\n *\n * @example\n * ```typescript\n * const msg = createQueueMessage({\n *   channel: 'queues.orders',\n *   body: new TextEncoder().encode(JSON.stringify({ orderId: 123 })),\n *   tags: { priority: 'high' },\n *   policy: { expirationSeconds: 3600, maxReceiveCount: 3 },\n * });\n * const result = await client.sendQueueMessage(msg);\n * ```\n */\nexport function createQueueMessage(\n  opts: Omit<QueueMessage, 'id'> & { id?: string },\n): Readonly<QueueMessage> {\n  validateQueueMessage(opts, 'createQueueMessage');\n\n  const msg: QueueMessage = {\n    channel: opts.channel,\n    body: opts.body !== undefined ? normalizeBody(opts.body) : undefined,\n    metadata: opts.metadata ?? '',\n    tags: opts.tags ?? {},\n    policy: opts.policy ? Object.freeze({ ...opts.policy }) : undefined,\n    id: opts.id ?? randomUUID(),\n    clientId: opts.clientId,\n  };\n\n  return Object.freeze(msg);\n}\n","import { randomUUID } from 'node:crypto';\nimport type { KubeMQError } from '../errors.js';\nimport type { MessageBody } from '../internal/utils/body.js';\nimport { normalizeBody } from '../internal/utils/body.js';\nimport { validateCommandMessage } from '../internal/validation/message-validator.js';\n\n/**\n * Outbound RPC command message.\n *\n * @remarks\n * **Async safety:** Not safe for concurrent modification. Create a new instance\n * per send operation. Do not share outbound message objects between concurrent\n * async operations. Message objects are frozen (`Object.freeze()`) by factory\n * functions — modification after creation throws a `TypeError`.\n */\nexport interface CommandMessage {\n  readonly channel: string;\n  readonly body?: MessageBody;\n  readonly metadata?: string;\n  readonly tags?: Record<string, string>;\n  readonly timeoutInSeconds: number;\n  readonly id?: string;\n  readonly clientId?: string;\n  readonly span?: Uint8Array;\n}\n\n/**\n * Received RPC command from a subscription.\n *\n * @remarks\n * **Async safety:** Safe to read from multiple async contexts concurrently.\n * Do not modify received message objects — they are shared references from\n * the subscription's delivery pipeline. Fields are readonly.\n */\nexport interface CommandReceived {\n  readonly id: string;\n  readonly channel: string;\n  readonly fromClientId: string;\n  readonly timestamp: Date;\n  readonly body: Uint8Array;\n  readonly metadata: string;\n  readonly replyChannel: string;\n  readonly tags: Record<string, string>;\n}\n\n/**\n * Response to an RPC command, indicating whether the command was executed.\n *\n * @remarks\n * Returned by {@link KubeMQClient.sendCommand} and sent back by command\n * subscribers via {@link KubeMQClient.sendCommandResponse}. Check the\n * `executed` flag to determine success.\n *\n * @see {@link KubeMQClient.sendCommand}\n * @see {@link KubeMQClient.sendCommandResponse}\n * @see {@link CommandReceived}\n */\nexport interface CommandResponse {\n  /** Correlation ID linking the response to its originating command. */\n  readonly id: string;\n  /** Reply channel for routing the response back to the sender. */\n  readonly replyChannel: string;\n  /** Client ID of the responder. */\n  readonly clientId?: string;\n  /** Whether the command was successfully executed by the handler. */\n  readonly executed: boolean;\n  /** Error message from the handler, if execution failed. */\n  readonly error?: string;\n  /** Optional metadata returned with the response. */\n  readonly metadata?: string;\n  /** Optional response body payload. */\n  readonly body?: Uint8Array;\n  /** OpenTelemetry span context for distributed tracing. */\n  readonly span?: Uint8Array;\n  /** Key-value tags attached to the response. */\n  readonly tags?: Record<string, string>;\n  /** Server-side timestamp of the response. */\n  readonly timestamp?: Date;\n}\n\n/**\n * Subscription request for RPC commands.\n *\n * @remarks\n * **Async safety:** Subscription callbacks fire sequentially on the Node.js\n * event loop by default. Opt-in concurrent processing is available via\n * `maxConcurrentCallbacks` in `SubscriptionOptions`. When concurrency > 1,\n * message ordering is NOT guaranteed.\n */\nexport interface CommandSubscription {\n  readonly channel: string;\n  readonly group?: string;\n  readonly onCommand: (cmd: CommandReceived) => void | Promise<void>;\n  readonly onError: (err: KubeMQError) => void;\n}\n\n/**\n * Create a validated, frozen CommandMessage with defaults applied.\n *\n * - `id` defaults to a random UUID\n * - `metadata` defaults to `''`\n * - `tags` defaults to `{}`\n * - `timeoutInSeconds` is required and must be positive\n * - Requires at least one of: body, metadata, or tags\n * - String/Buffer body is normalized to `Uint8Array`\n *\n * @example\n * ```typescript\n * const cmd = createCommand({\n *   channel: 'commands.user-service',\n *   body: new TextEncoder().encode(JSON.stringify({ action: 'disable', userId: '42' })),\n *   timeoutInSeconds: 5,\n *   tags: { source: 'admin-panel' },\n * });\n * const response = await client.sendCommand(cmd);\n * ```\n */\nexport function createCommand(\n  opts: Omit<CommandMessage, 'id'> & { id?: string },\n): Readonly<CommandMessage> {\n  validateCommandMessage(opts, 'createCommand');\n\n  const msg: CommandMessage = {\n    channel: opts.channel,\n    body: opts.body !== undefined ? normalizeBody(opts.body) : undefined,\n    metadata: opts.metadata ?? '',\n    tags: opts.tags ?? {},\n    timeoutInSeconds: opts.timeoutInSeconds,\n    id: opts.id ?? randomUUID(),\n    clientId: opts.clientId,\n  };\n\n  return Object.freeze(msg);\n}\n","import { randomUUID } from 'node:crypto';\nimport type { KubeMQError } from '../errors.js';\nimport type { MessageBody } from '../internal/utils/body.js';\nimport { normalizeBody } from '../internal/utils/body.js';\nimport { validateQueryMessage } from '../internal/validation/message-validator.js';\n\n/**\n * Outbound RPC query message.\n *\n * @remarks\n * **Async safety:** Not safe for concurrent modification. Create a new instance\n * per send operation. Do not share outbound message objects between concurrent\n * async operations. Message objects are frozen (`Object.freeze()`) by factory\n * functions — modification after creation throws a `TypeError`.\n */\nexport interface QueryMessage {\n  readonly channel: string;\n  readonly body?: MessageBody;\n  readonly metadata?: string;\n  readonly tags?: Record<string, string>;\n  readonly timeoutInSeconds: number;\n  readonly cacheKey?: string;\n  readonly cacheTtlInSeconds?: number;\n  readonly id?: string;\n  readonly clientId?: string;\n  readonly span?: Uint8Array;\n}\n\n/**\n * Received RPC query from a subscription.\n *\n * @remarks\n * **Async safety:** Safe to read from multiple async contexts concurrently.\n * Do not modify received message objects — they are shared references from\n * the subscription's delivery pipeline. Fields are readonly.\n */\nexport interface QueryReceived {\n  readonly id: string;\n  readonly channel: string;\n  readonly fromClientId: string;\n  readonly timestamp: Date;\n  readonly body: Uint8Array;\n  readonly metadata: string;\n  readonly replyChannel: string;\n  readonly tags: Record<string, string>;\n}\n\n/**\n * Response to an RPC query, carrying the result data.\n *\n * @remarks\n * Returned by {@link KubeMQClient.sendQuery} and sent back by query\n * subscribers via {@link KubeMQClient.sendQueryResponse}. Check `executed`\n * for success, then read `body` for the result payload. The `cacheHit` flag\n * indicates whether the response was served from the server-side cache.\n *\n * @see {@link KubeMQClient.sendQuery}\n * @see {@link KubeMQClient.sendQueryResponse}\n * @see {@link QueryReceived}\n */\nexport interface QueryResponse {\n  /** Correlation ID linking the response to its originating query. */\n  readonly id: string;\n  /** Reply channel for routing the response back to the sender. */\n  readonly replyChannel: string;\n  /** Client ID of the responder. */\n  readonly clientId?: string;\n  /** Whether the query was successfully executed by the handler. */\n  readonly executed: boolean;\n  /** Error message from the handler, if execution failed. */\n  readonly error?: string;\n  /** Optional metadata returned with the response. */\n  readonly metadata?: string;\n  /** Response body payload containing the query result. */\n  readonly body?: Uint8Array;\n  /** Key-value tags attached to the response. */\n  readonly tags?: Record<string, string>;\n  /** Server-side timestamp of the response. */\n  readonly timestamp?: Date;\n  /** Whether this response was served from the server-side query cache. */\n  readonly cacheHit?: boolean;\n  /** OpenTelemetry span context for distributed tracing. */\n  readonly span?: Uint8Array;\n}\n\n/**\n * Subscription request for RPC queries.\n *\n * @remarks\n * **Async safety:** Subscription callbacks fire sequentially on the Node.js\n * event loop by default. Opt-in concurrent processing is available via\n * `maxConcurrentCallbacks` in `SubscriptionOptions`. When concurrency > 1,\n * message ordering is NOT guaranteed.\n */\nexport interface QuerySubscription {\n  readonly channel: string;\n  readonly group?: string;\n  readonly onQuery: (query: QueryReceived) => void | Promise<void>;\n  readonly onError: (err: KubeMQError) => void;\n}\n\n/**\n * Create a validated, frozen QueryMessage with defaults applied.\n *\n * - `id` defaults to a random UUID\n * - `metadata` defaults to `''`\n * - `tags` defaults to `{}`\n * - `timeoutInSeconds` is required and must be positive\n * - Requires at least one of: body, metadata, or tags\n * - String/Buffer body is normalized to `Uint8Array`\n *\n * @example\n * ```typescript\n * const query = createQuery({\n *   channel: 'queries.user-service',\n *   body: new TextEncoder().encode(JSON.stringify({ userId: '42' })),\n *   timeoutInSeconds: 5,\n *   cacheKey: 'user:42',\n *   cacheTtlInSeconds: 60,\n * });\n * const response = await client.sendQuery(query);\n * ```\n */\nexport function createQuery(\n  opts: Omit<QueryMessage, 'id'> & { id?: string },\n): Readonly<QueryMessage> {\n  validateQueryMessage(opts, 'createQuery');\n\n  const msg: QueryMessage = {\n    channel: opts.channel,\n    body: opts.body !== undefined ? normalizeBody(opts.body) : undefined,\n    metadata: opts.metadata ?? '',\n    tags: opts.tags ?? {},\n    timeoutInSeconds: opts.timeoutInSeconds,\n    cacheKey: opts.cacheKey,\n    cacheTtlInSeconds: opts.cacheTtlInSeconds,\n    id: opts.id ?? randomUUID(),\n    clientId: opts.clientId,\n  };\n\n  return Object.freeze(msg);\n}\n","export const SDK_VERSION = '3.0.1' as const;\n"]}