37 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			37 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
import { setFeature } from "@smithy/core";
 | 
						|
import { getSmithyContext } from "@smithy/util-middleware";
 | 
						|
import { getEndpointFromInstructions } from "./adaptors/getEndpointFromInstructions";
 | 
						|
export const endpointMiddleware = ({ config, instructions, }) => {
 | 
						|
    return (next, context) => async (args) => {
 | 
						|
        if (config.isCustomEndpoint) {
 | 
						|
            setFeature(context, "ENDPOINT_OVERRIDE", "N");
 | 
						|
        }
 | 
						|
        const endpoint = await getEndpointFromInstructions(args.input, {
 | 
						|
            getEndpointParameterInstructions() {
 | 
						|
                return instructions;
 | 
						|
            },
 | 
						|
        }, { ...config }, context);
 | 
						|
        context.endpointV2 = endpoint;
 | 
						|
        context.authSchemes = endpoint.properties?.authSchemes;
 | 
						|
        const authScheme = context.authSchemes?.[0];
 | 
						|
        if (authScheme) {
 | 
						|
            context["signing_region"] = authScheme.signingRegion;
 | 
						|
            context["signing_service"] = authScheme.signingName;
 | 
						|
            const smithyContext = getSmithyContext(context);
 | 
						|
            const httpAuthOption = smithyContext?.selectedHttpAuthScheme?.httpAuthOption;
 | 
						|
            if (httpAuthOption) {
 | 
						|
                httpAuthOption.signingProperties = Object.assign(httpAuthOption.signingProperties || {}, {
 | 
						|
                    signing_region: authScheme.signingRegion,
 | 
						|
                    signingRegion: authScheme.signingRegion,
 | 
						|
                    signing_service: authScheme.signingName,
 | 
						|
                    signingName: authScheme.signingName,
 | 
						|
                    signingRegionSet: authScheme.signingRegionSet,
 | 
						|
                }, authScheme.properties);
 | 
						|
            }
 | 
						|
        }
 | 
						|
        return next({
 | 
						|
            ...args,
 | 
						|
        });
 | 
						|
    };
 | 
						|
};
 |