+12








fcd7c979df
Co-authored-by: Artur <145776561+arturict@users.noreply.github.com> Co-authored-by: arturict <arturict@users.noreply.github.com> Co-authored-by: Thomas <thomas@ajnart.fr> Co-authored-by: Afonso Jorge Ramos <afonsojorgeramos@gmail.com> Co-authored-by: Danura30082 <danura30082+github@gmail.com> Co-authored-by: Kushie <122986913+kushiemoon-dev@users.noreply.github.com> Co-authored-by: ajnart <thomas@ajnart.fr> Co-authored-by: ajnart <thomas@ajnart.dev> Co-authored-by: chenjun <chenjun@foxmail.com> Co-authored-by: Wikibear <wikibear@users.noreply.github.com> Co-authored-by: Bergasha <bergasha@gmail.com> Co-authored-by: leafyelin <43306196+leafyelin@users.noreply.github.com> Co-authored-by: Lucas Araujo <lucas.lra@gmail.com> Co-authored-by: GreenMonito <86085570+GreenMonito@users.noreply.github.com> Co-authored-by: Nerdy-Technician <roffo@nerdy-technician.social> Co-authored-by: Jun <34545896+jcstrong@users.noreply.github.com> Co-authored-by: Edmond Abraham <54119952+gitedmond@users.noreply.github.com> Co-authored-by: thrawnx <tight.bulb9384@fastmail.com> Co-authored-by: Chris <58918656+nordada@users.noreply.github.com> Co-authored-by: yi111 <153097222+Yi-111-a@users.noreply.github.com> Co-authored-by: Yanis <naamaneyanis@gmail.com> Co-authored-by: Wikibear <me@sej.de> Co-authored-by: alessiottavo <93441886+alessiottavo@users.noreply.github.com>
46 lines
1.3 KiB
TypeScript
46 lines
1.3 KiB
TypeScript
type HeaderSetter = Pick<Headers, "set">;
|
|
|
|
export const AUTH_HANDLERS: Record<
|
|
string,
|
|
(headers: HeaderSetter, url: URL, apiKey: string, headerName?: string) => void
|
|
> = {
|
|
bearer: (headers, _url, apiKey) => {
|
|
headers.set("Authorization", `Bearer ${apiKey}`);
|
|
},
|
|
apiKeyHeader: (headers, _url, apiKey, headerName) => {
|
|
headers.set(headerName ?? "X-API-Key", apiKey);
|
|
},
|
|
apiKeyQuery: (_headers, url, apiKey, headerName) => {
|
|
url.searchParams.set(headerName ?? "api_key", apiKey);
|
|
},
|
|
};
|
|
|
|
export function buildSecretMap(secrets: Array<{ kind: string; value: string }>): Record<string, string> {
|
|
const map: Record<string, string> = {};
|
|
for (const secret of secrets) {
|
|
map[secret.kind] = secret.value;
|
|
}
|
|
return map;
|
|
}
|
|
|
|
export function applyAuth(
|
|
headers: HeaderSetter,
|
|
url: URL,
|
|
authType: string,
|
|
secrets: Array<{ kind: string; value: string }>,
|
|
headerName?: string | null,
|
|
): void {
|
|
const secretMap = buildSecretMap(secrets);
|
|
|
|
if (authType === "basic" && secretMap.username && secretMap.password) {
|
|
const credentials = Buffer.from(`${secretMap.username}:${secretMap.password}`).toString("base64");
|
|
headers.set("Authorization", `Basic ${credentials}`);
|
|
return;
|
|
}
|
|
|
|
const handler = AUTH_HANDLERS[authType];
|
|
if (handler && secretMap.apiKey) {
|
|
handler(headers, url, secretMap.apiKey, headerName ?? undefined);
|
|
}
|
|
}
|