Skip to content

Commit 684e5cd

Browse files
committed
Attempt OpenAPITools#2 at post fixes
1 parent 8919c9e commit 684e5cd

File tree

4 files changed

+47
-35
lines changed

4 files changed

+47
-35
lines changed

modules/openapi-generator/src/main/resources/typescript-axios/apiInner.mustache

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,26 @@ export const {{classname}}AxiosParamCreator = function (configuration?: Configur
7373
const localVarFormParams = new {{^multipartFormData}}URLSearchParams(){{/multipartFormData}}{{#multipartFormData}}((configuration && configuration.formDataCtor) || FormData)(){{/multipartFormData}};{{/hasFormParams}}{{/vendorExtensions}}
7474
let awsSignatureHeaders = {};
7575
76+
{{#hasAuthMethods}}
77+
{{#authMethods}}{{#isAWSV4Signature}}
78+
// AWS V4 Signature auth detected - need to set body/form data before signing
79+
{{#bodyParam}}
80+
// Set body before AWS signing
81+
{{^consumes}}
82+
localVarHeaderParameter['Content-Type'] = 'application/json';
83+
{{/consumes}}
84+
{{#consumes.0}}
85+
localVarHeaderParameter['Content-Type'] = '{{{mediaType}}}';
86+
{{/consumes.0}}
87+
localVarRequestOptions.data = serializeDataIfNeeded({{paramName}}, localVarRequestOptions, configuration)
88+
{{/bodyParam}}
89+
{{#vendorExtensions}}{{#hasFormParams}}
90+
// Set form data before AWS signing
91+
{{^multipartFormData}}localVarHeaderParameter['Content-Type'] = 'application/x-www-form-urlencoded';{{/multipartFormData}}{{#multipartFormData}}localVarHeaderParameter['Content-Type'] = 'multipart/form-data';{{/multipartFormData}}
92+
localVarRequestOptions.data = localVarFormParams{{#vendorExtensions}}{{^multipartFormData}}.toString(){{/multipartFormData}}{{/vendorExtensions}};
93+
{{/hasFormParams}}{{/vendorExtensions}}
94+
{{/isAWSV4Signature}}{{/authMethods}}
95+
{{/hasAuthMethods}}
7696
{{#authMethods}}
7797
// authentication {{name}} required
7898
{{#isApiKey}}
@@ -237,10 +257,16 @@ export const {{classname}}AxiosParamCreator = function (configuration?: Configur
237257
let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
238258
localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions,{{#hasFormParams}}{{#multipartFormData}} ...(localVarFormParams as any).getHeaders?.(),{{/multipartFormData}}{{/hasFormParams}} ...awsSignatureHeaders, ...options.headers};
239259
{{#hasFormParams}}
240-
localVarRequestOptions.data = localVarFormParams{{#vendorExtensions}}{{^multipartFormData}}.toString(){{/multipartFormData}}{{/vendorExtensions}};
260+
// Only set form data if not already set (e.g., by AWS signing)
261+
if (localVarRequestOptions.data === undefined) {
262+
localVarRequestOptions.data = localVarFormParams{{#vendorExtensions}}{{^multipartFormData}}.toString(){{/multipartFormData}}{{/vendorExtensions}};
263+
}
241264
{{/hasFormParams}}
242265
{{#bodyParam}}
243-
localVarRequestOptions.data = serializeDataIfNeeded({{paramName}}, localVarRequestOptions, configuration)
266+
// Only serialize body if not already set (e.g., by AWS signing)
267+
if (localVarRequestOptions.data === undefined) {
268+
localVarRequestOptions.data = serializeDataIfNeeded({{paramName}}, localVarRequestOptions, configuration)
269+
}
244270
{{/bodyParam}}
245271
return {
246272
url: toPathString(localVarUrlObj),

modules/openapi-generator/src/main/resources/typescript-axios/common.mustache

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -80,22 +80,6 @@ export const setBearerAuthToObject = async function (object: any, configuration?
8080
*/
8181
export const getSignedAwsHeaders = async function (requestOptions: any, url: URL, configuration?: Configuration): Promise<OutgoingHttpHeaders> {
8282
try {
83-
// Handle body serialization if needed
84-
if (requestOptions.data !== undefined && requestOptions.data !== null) {
85-
// Check if data needs serialization (not already a string or FormData)
86-
const needsSerialization = typeof requestOptions.data !== 'string' &&
87-
!(typeof FormData !== 'undefined' && requestOptions.data instanceof FormData) &&
88-
!(requestOptions.data instanceof URLSearchParams);
89-
90-
if (needsSerialization) {
91-
// Check if it should be JSON based on Content-Type
92-
const contentType = requestOptions.headers?.['Content-Type'] || 'application/json';
93-
if (contentType.includes('json')) {
94-
requestOptions.data = JSON.stringify(requestOptions.data);
95-
}
96-
}
97-
}
98-
9983
let credentials;
10084
10185
// Strategy 1: Use explicit credentials if provided (highest priority)

samples/client/petstore/typescript-axios/builds/aws-iam/api.ts

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,13 @@ export const DefaultApiAxiosParamCreator = function (configuration?: Configurati
8080
const localVarQueryParameter = {} as any;
8181
let awsSignatureHeaders = {};
8282

83+
84+
// AWS V4 Signature auth detected - need to set body/form data before signing
85+
// Set body before AWS signing
86+
localVarHeaderParameter['Content-Type'] = 'application/json';
87+
localVarRequestOptions.data = serializeDataIfNeeded(pet, localVarRequestOptions, configuration)
88+
89+
8390
// authentication aws_iam required
8491
// aws v4 signature required
8592
awsSignatureHeaders = await getSignedAwsHeaders(localVarRequestOptions, localVarUrlObj, configuration)
@@ -90,7 +97,10 @@ export const DefaultApiAxiosParamCreator = function (configuration?: Configurati
9097
setSearchParams(localVarUrlObj, localVarQueryParameter);
9198
let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
9299
localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...awsSignatureHeaders, ...options.headers};
93-
localVarRequestOptions.data = serializeDataIfNeeded(pet, localVarRequestOptions, configuration)
100+
// Only serialize body if not already set (e.g., by AWS signing)
101+
if (localVarRequestOptions.data === undefined) {
102+
localVarRequestOptions.data = serializeDataIfNeeded(pet, localVarRequestOptions, configuration)
103+
}
94104
return {
95105
url: toPathString(localVarUrlObj),
96106
options: localVarRequestOptions,
@@ -116,6 +126,10 @@ export const DefaultApiAxiosParamCreator = function (configuration?: Configurati
116126
const localVarQueryParameter = {} as any;
117127
let awsSignatureHeaders = {};
118128

129+
130+
// AWS V4 Signature auth detected - need to set body/form data before signing
131+
132+
119133
// authentication sigv4_auth required
120134
// aws v4 signature required
121135
awsSignatureHeaders = await getSignedAwsHeaders(localVarRequestOptions, localVarUrlObj, configuration)
@@ -149,6 +163,10 @@ export const DefaultApiAxiosParamCreator = function (configuration?: Configurati
149163
const localVarQueryParameter = {} as any;
150164
let awsSignatureHeaders = {};
151165

166+
167+
// AWS V4 Signature auth detected - need to set body/form data before signing
168+
169+
152170
// authentication aws_iam required
153171
// aws v4 signature required
154172
awsSignatureHeaders = await getSignedAwsHeaders(localVarRequestOptions, localVarUrlObj, configuration)

samples/client/petstore/typescript-axios/builds/aws-iam/common.ts

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -82,22 +82,6 @@ export const setBearerAuthToObject = async function (object: any, configuration?
8282
*/
8383
export const getSignedAwsHeaders = async function (requestOptions: any, url: URL, configuration?: Configuration): Promise<OutgoingHttpHeaders> {
8484
try {
85-
// Handle body serialization if needed
86-
if (requestOptions.data !== undefined && requestOptions.data !== null) {
87-
// Check if data needs serialization (not already a string or FormData)
88-
const needsSerialization = typeof requestOptions.data !== 'string' &&
89-
!(typeof FormData !== 'undefined' && requestOptions.data instanceof FormData) &&
90-
!(requestOptions.data instanceof URLSearchParams);
91-
92-
if (needsSerialization) {
93-
// Check if it should be JSON based on Content-Type
94-
const contentType = requestOptions.headers?.['Content-Type'] || 'application/json';
95-
if (contentType.includes('json')) {
96-
requestOptions.data = JSON.stringify(requestOptions.data);
97-
}
98-
}
99-
}
100-
10185
let credentials;
10286

10387
// Strategy 1: Use explicit credentials if provided (highest priority)

0 commit comments

Comments
 (0)