in codegen/smithy-aws-typescript-codegen/src/main/java/software/amazon/smithy/aws/typescript/codegen/auth/http/integration/AwsSdkCustomizeEndpointRuleSetHttpAuthSchemeProvider.java [193:309]
public void write(
TypeScriptWriter w,
String previousText,
DefaultHttpAuthSchemeParametersProviderFunctionCodeSection s
) {
String serviceName = CodegenUtils.getServiceName(
s.getSettings(),
s.getModel(),
s.getSymbolProvider());
ServiceIndex serviceIndex = ServiceIndex.of(s.getModel());
SupportedHttpAuthSchemesIndex authIndex = new SupportedHttpAuthSchemesIndex(
codegenContext.integrations(),
s.getModel(),
s.getSettings());
TopDownIndex topDownIndex = TopDownIndex.of(s.getModel());
Map<ShapeId, HttpAuthScheme> effectiveHttpAuthSchemes =
AuthUtils.getAllEffectiveNoAuthAwareAuthSchemes(
s.getService(),
serviceIndex,
authIndex,
topDownIndex);
Map<String, HttpAuthSchemeParameter> httpAuthSchemeParameters =
AuthUtils.collectHttpAuthSchemeParameters(effectiveHttpAuthSchemes.values());
Symbol serviceSymbol = s.getSymbolProvider().toSymbol(s.getService());
w.addRelativeImport(serviceSymbol.getName() + "ResolvedConfig", null,
Paths.get(".", serviceSymbol.getNamespace()));
w.addDependency(TypeScriptDependency.SMITHY_TYPES);
w.addImport("HandlerExecutionContext", null, TypeScriptDependency.SMITHY_TYPES);
w.addDependency(TypeScriptDependency.UTIL_MIDDLEWARE);
w.addImport("getSmithyContext", null, TypeScriptDependency.UTIL_MIDDLEWARE);
w.addDependency(TypeScriptDependency.MIDDLEWARE_ENDPOINTS_V2);
w.addImport("EndpointParameterInstructions", null, TypeScriptDependency.MIDDLEWARE_ENDPOINTS_V2);
w.addImport("resolveParams", null, TypeScriptDependency.MIDDLEWARE_ENDPOINTS_V2);
w.writeDocs("@internal");
w.write("""
interface EndpointRuleSetSmithyContext {
commandInstance?: {
constructor?: {
getEndpointParameterInstructions(): EndpointParameterInstructions;
};
};
}""");
w.writeDocs("@internal");
w.write("""
interface EndpointRuleSetHttpAuthSchemeParametersProvider<
TConfig extends object,
TContext extends HandlerExecutionContext,
TParameters extends HttpAuthSchemeParameters & EndpointParameters,
TInput extends object
> extends HttpAuthSchemeParametersProvider<TConfig, TContext, TParameters, TInput> {}""");
w.writeDocs("@internal");
w.write("""
const createEndpointRuleSetHttpAuthSchemeParametersProvider =
<
TConfig extends object,
TContext extends HandlerExecutionContext,
THttpAuthSchemeParameters extends HttpAuthSchemeParameters,
TEndpointParameters extends EndpointParameters,
TParameters extends THttpAuthSchemeParameters & TEndpointParameters,
TInput extends object
>(
defaultHttpAuthSchemeParametersProvider: HttpAuthSchemeParametersProvider<
TConfig,
TContext,
THttpAuthSchemeParameters,
TInput
>
): EndpointRuleSetHttpAuthSchemeParametersProvider<
TConfig,
TContext,
THttpAuthSchemeParameters & TEndpointParameters,
TInput
> =>
async (config: TConfig, context: TContext, input: TInput): Promise<TParameters> => {
if (!input) {
throw new Error(`Could not find \\`input\\` for \
\\`defaultEndpointRuleSetHttpAuthSchemeParametersProvider\\``);
}
const defaultParameters = \
await defaultHttpAuthSchemeParametersProvider(config, context, input);
const instructionsFn = (getSmithyContext(context) as \
EndpointRuleSetSmithyContext)?.commandInstance?.constructor
?.getEndpointParameterInstructions;
if (!instructionsFn) {
throw new Error(`getEndpointParameterInstructions() is not defined on \
\\`$${context.commandName!}\\``);
}
const endpointParameters = await resolveParams(
input as Record<string, unknown>,
{ getEndpointParameterInstructions: instructionsFn! },
config as Record<string, unknown>
);
return Object.assign(defaultParameters, endpointParameters) as TParameters;
};""");
w.writeDocs("@internal");
w.openBlock("""
const _default$LHttpAuthSchemeParametersProvider = async (\
config: $LResolvedConfig, \
context: HandlerExecutionContext, \
input: object): Promise<_$LHttpAuthSchemeParameters> => {""", "};",
serviceName, serviceSymbol.getName(), serviceName,
() -> {
w.openBlock("return {", "};", () -> {
w.write("operation: getSmithyContext(context).operation as string,");
for (HttpAuthSchemeParameter parameter : httpAuthSchemeParameters.values()) {
w.write("$L: $C,", parameter.name(), parameter.source());
}
});
});
w.writeDocs("@internal");
w.write("""
export const default$LHttpAuthSchemeParametersProvider: \
$LHttpAuthSchemeParametersProvider = createEndpointRuleSetHttpAuthSchemeParametersProvider(\
_default$LHttpAuthSchemeParametersProvider);
""",
serviceName, serviceName, serviceName);
}