Skip to content

Commit d2cb4e2

Browse files
fern-supportdevin-ai-integration[bot]willkendall01
authored
fix(typescript): honor HeaderAuthScheme prefix in HeaderAuthProvider (#15814)
* fix(ts): honor HeaderAuthScheme prefix in HeaderAuthProvider Co-Authored-By: will.kendall@buildwithfern.com <wpk235@gmail.com> * test(typescript): update header-auth-with-prefix snapshot for new HEADER_PREFIX behavior --------- Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Co-authored-by: will.kendall@buildwithfern.com <wpk235@gmail.com>
1 parent 2bf787e commit d2cb4e2

6 files changed

Lines changed: 24 additions & 6 deletions

File tree

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
# yaml-language-server: $schema=../../../../../fern-changes-yml.schema.json
2+
3+
- summary: |
4+
Honor the auth scheme `prefix` for `HeaderAuthScheme` when generating `HeaderAuthProvider`.
5+
Previously, the generator emitted the raw header value into the configured header (e.g.
6+
`Authorization`) and dropped any prefix declared in the API definition (e.g. `Bearer`).
7+
The provider now emits a `HEADER_PREFIX` constant and prepends it to the header value,
8+
matching the behavior of the Java, Python, Go, C#, PHP, Rust, and Ruby v2 generators.
9+
type: fix

generators/typescript/sdk/client-class-generator/src/__test__/AuthProviders.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -721,7 +721,7 @@ describe("HeaderAuthProviderGenerator", () => {
721721
createHeaderAuthScheme({
722722
name: "authorization",
723723
wireValue: "Authorization",
724-
prefix: "Bearer "
724+
prefix: "Bearer"
725725
})
726726
);
727727
const ir = createMinimalIR({ authSchemes: [authScheme] });

generators/typescript/sdk/client-class-generator/src/__test__/__snapshots__/AuthProviders.test.ts.snap

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -640,6 +640,7 @@ exports[`HeaderAuthProviderGenerator > getAuthOptionsProperties() > returns requ
640640
exports[`HeaderAuthProviderGenerator > writeToFile() > generates header auth provider with custom header name and prefix 1`] = `
641641
"const PARAM_KEY = "authorization" as const;
642642
const HEADER_NAME = "Authorization" as const;
643+
const HEADER_PREFIX = "Bearer " as const;
643644
644645
export class HeaderAuthProvider implements core.AuthProvider {
645646
private readonly options: HeaderAuthProvider.Options;
@@ -664,7 +665,7 @@ export class HeaderAuthProvider implements core.AuthProvider {
664665
}
665666
666667
return {
667-
headers: { [HEADER_NAME]: headerValue },
668+
headers: { [HEADER_NAME]: \`\${HEADER_PREFIX}\${headerValue}\` },
668669
};
669670
670671
}

generators/typescript/sdk/client-class-generator/src/auth-provider/HeaderAuthProviderGenerator.ts

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,7 @@ export class HeaderAuthProviderGenerator implements AuthProviderGenerator {
137137
const headerEnvVar = this.authScheme.headerEnvVar;
138138
const headerName = getWireValue(this.authScheme.name);
139139
const wrapperPropertyName = this.getWrapperPropertyName();
140+
const prefix = this.authScheme.prefix;
140141

141142
const constants: string[] = [];
142143

@@ -147,6 +148,9 @@ export class HeaderAuthProviderGenerator implements AuthProviderGenerator {
147148
constants.push(`const ENV_HEADER_KEY = "${headerEnvVar}" as const;`);
148149
}
149150
constants.push(`const HEADER_NAME = "${headerName}" as const;`);
151+
if (prefix != null) {
152+
constants.push(`const HEADER_PREFIX = "${prefix} " as const;`);
153+
}
150154

151155
for (const constant of constants.filter((c) => c !== "")) {
152156
context.sourceFile.addStatements(constant);
@@ -272,6 +276,8 @@ export class HeaderAuthProviderGenerator implements AuthProviderGenerator {
272276
? `\n (${supplierGetCode}) ??\n process.env?.[ENV_HEADER_KEY]`
273277
: supplierGetCode;
274278

279+
const headerValueExpr = this.authScheme.prefix != null ? `\`\${HEADER_PREFIX}\${${headerVar}}\`` : headerVar;
280+
275281
if (this.neverThrowErrors) {
276282
// When neverThrowErrors is true, return empty headers if header value is missing
277283
return `
@@ -281,7 +287,7 @@ export class HeaderAuthProviderGenerator implements AuthProviderGenerator {
281287
}
282288
283289
return {
284-
headers: { [HEADER_NAME]: ${headerVar} },
290+
headers: { [HEADER_NAME]: ${headerValueExpr} },
285291
};
286292
`;
287293
} else {
@@ -299,7 +305,7 @@ export class HeaderAuthProviderGenerator implements AuthProviderGenerator {
299305
}
300306
301307
return {
302-
headers: { [HEADER_NAME]: ${headerVar} },
308+
headers: { [HEADER_NAME]: ${headerValueExpr} },
303309
};
304310
`;
305311
}

seed/ts-sdk/header-auth-environment-variable/src/auth/HeaderAuthProvider.ts

Lines changed: 2 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

seed/ts-sdk/header-auth/src/auth/HeaderAuthProvider.ts

Lines changed: 2 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)