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
—
Internal extension configuration system for HTTP handler customization. Provides runtime configuration management and helper functions for integrating HTTP handlers into Smithy client runtime configurations.
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;
}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;Retrieves the current HTTP handler instance.
/**
* Get the current HTTP handler instance
* @returns Current HttpHandler instance
*/
httpHandler(): HttpHandler<HandlerConfig>;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;Retrieves HTTP handler configuration object.
/**
* Get HTTP handler configuration object
* @returns Handler configuration object
*/
httpHandlerConfigs(): HandlerConfig;Type representing partial extension configuration with optional HTTP handler.
/**
* @internal
* Partial extension configuration type
*/
type HttpHandlerExtensionConfigType<HandlerConfig extends object = {}> = Partial<{
httpHandler: HttpHandler<HandlerConfig>;
}>;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();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 }The extension configuration system works through a bidirectional conversion pattern:
getHttpHandlerExtensionConfiguration() converts runtime config to extension interfaceresolveHttpHandlerRuntimeConfig() extracts runtime config from extension interfaceThis design enables:
// 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