CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/npm-smithy--protocol-http

Protocol HTTP utilities for Smithy TypeScript clients and servers, providing HTTP request/response handling, field management, hostname validation, and extension configuration for HTTP-based protocol implementations

Pending
Overview
Eval results
Files

extension-configuration.mddocs/

Extension Configuration

Internal extension configuration system for HTTP handler customization. Provides runtime configuration management and helper functions for integrating HTTP handlers into Smithy client runtime configurations.

Capabilities

HttpHandlerExtensionConfiguration Interface

Core interface for HTTP handler extension configuration providing lifecycle management methods.

/**
 * @internal
 * Extension configuration interface for HTTP handler management
 */
interface HttpHandlerExtensionConfiguration<HandlerConfig extends object = {}> {
  setHttpHandler(handler: HttpHandler<HandlerConfig>): void;
  httpHandler(): HttpHandler<HandlerConfig>;
  updateHttpClientConfig(key: keyof HandlerConfig, value: HandlerConfig[typeof key]): void;
  httpHandlerConfigs(): HandlerConfig;
}

Set HTTP Handler

Sets the HTTP handler instance for the extension configuration.

/**
 * Set the HTTP handler instance
 * @param handler - HttpHandler instance to set
 */
setHttpHandler(handler: HttpHandler<HandlerConfig>): void;

Get HTTP Handler

Retrieves the current HTTP handler instance.

/**
 * Get the current HTTP handler instance  
 * @returns Current HttpHandler instance
 */
httpHandler(): HttpHandler<HandlerConfig>;

Update HTTP Client Config

Updates HTTP client configuration through the handler.

/**
 * Update HTTP client configuration via the handler
 * @param key - Configuration key to update
 * @param value - New value for the configuration key
 */
updateHttpClientConfig(key: keyof HandlerConfig, value: HandlerConfig[typeof key]): void;

Get HTTP Handler Configs

Retrieves HTTP handler configuration object.

/**
 * Get HTTP handler configuration object
 * @returns Handler configuration object
 */
httpHandlerConfigs(): HandlerConfig;

HttpHandlerExtensionConfigType

Type representing partial extension configuration with optional HTTP handler.

/**
 * @internal
 * Partial extension configuration type
 */
type HttpHandlerExtensionConfigType<HandlerConfig extends object = {}> = Partial<{
  httpHandler: HttpHandler<HandlerConfig>;
}>;

getHttpHandlerExtensionConfiguration Function

Helper function to resolve default extension configuration from runtime config. Creates extension configuration implementation from runtime configuration.

/**
 * @internal
 * Helper function to resolve default extension configuration from runtime config
 * @param runtimeConfig - Runtime configuration object
 * @returns Extension configuration implementation
 */
function getHttpHandlerExtensionConfiguration<HandlerConfig extends object = {}>(
  runtimeConfig: HttpHandlerExtensionConfigType<HandlerConfig>
): HttpHandlerExtensionConfiguration<HandlerConfig>;

Usage Example:

// Internal usage in Smithy client configuration
const runtimeConfig = {
  httpHandler: myHttpHandler
};

const extensionConfig = getHttpHandlerExtensionConfiguration(runtimeConfig);

// Extension config provides handler management methods
extensionConfig.setHttpHandler(newHandler);
const currentHandler = extensionConfig.httpHandler();
extensionConfig.updateHttpClientConfig('timeout', 5000);
const configs = extensionConfig.httpHandlerConfigs();

resolveHttpHandlerRuntimeConfig Function

Helper function to resolve runtime config from extension configuration. Extracts runtime configuration from extension configuration for client initialization.

/**
 * @internal
 * Helper function to resolve runtime config from default extension configuration
 * @param httpHandlerExtensionConfiguration - Extension configuration instance
 * @returns Runtime configuration object
 */
function resolveHttpHandlerRuntimeConfig<HandlerConfig extends object = {}>(
  httpHandlerExtensionConfiguration: HttpHandlerExtensionConfiguration<HandlerConfig>
): HttpHandlerExtensionConfigType<HandlerConfig>;

Usage Example:

// Internal usage in Smithy client initialization
const extensionConfig: HttpHandlerExtensionConfiguration = {
  setHttpHandler: (handler) => { /* implementation */ },
  httpHandler: () => myHandler,
  updateHttpClientConfig: (key, value) => { /* implementation */ },
  httpHandlerConfigs: () => ({ /* config */ })
};

const runtimeConfig = resolveHttpHandlerRuntimeConfig(extensionConfig);
// runtimeConfig = { httpHandler: myHandler }

Implementation Details

The extension configuration system works through a bidirectional conversion pattern:

  1. Runtime → Extension: getHttpHandlerExtensionConfiguration() converts runtime config to extension interface
  2. Extension → Runtime: resolveHttpHandlerRuntimeConfig() extracts runtime config from extension interface

This design enables:

  • Consistent Interface: All Smithy clients use the same extension configuration interface
  • Handler Swapping: Runtime replacement of HTTP handlers without recreating clients
  • Configuration Updates: Dynamic HTTP client configuration changes
  • Type Safety: Generic type parameter ensures configuration type consistency

Configuration Flow

// 1. Initial runtime config
const initialConfig = { httpHandler: defaultHandler };

// 2. Create extension config
const extensionConfig = getHttpHandlerExtensionConfiguration(initialConfig);

// 3. Runtime handler updates
extensionConfig.setHttpHandler(newHandler);
extensionConfig.updateHttpClientConfig('timeout', 10000);

// 4. Extract updated runtime config
const updatedConfig = resolveHttpHandlerRuntimeConfig(extensionConfig);

This pattern enables Smithy clients to maintain flexible HTTP handler configuration while providing a consistent internal interface for configuration management.

Install with Tessl CLI

npx tessl i tessl/npm-smithy--protocol-http

docs

extension-configuration.md

field-management.md

handler-configuration.md

http-messages.md

index.md

tile.json