const internalCredentialBearerRegexp = /^Bearer\s+(.+)$/i // Bearer credential 的标准文本形态是 "Bearer "。 // 这个辅助函数统一去掉多余空白和 Bearer 前缀,使判断、格式化和解析共享同一条规范化规则。 const internalNormalizeBearerToken = (token: string): string => { return token.trim().replace(/^Bearer\s+/i, "") } /** * @description 判断输入值是否为 Bearer 凭据字符串。 * * @example * ``` * // Expect: true * const example1 = isBearerCredential("Bearer token-value") * // Expect: false * const example2 = isBearerCredential("Basic token-value") * ``` */ export const isBearerCredential = (input: string): boolean => { return internalCredentialBearerRegexp.test(input.trim()) } /** * @description 把原始 token 格式化为 Bearer 凭据字符串。 * * 当输入值只包含空白字符时,该函数会抛出 RangeError,避免产出一个连 Bearer 校验器都不会接受的无效凭据字符串。 * * @example * ``` * // Expect: "Bearer token-value" * const example1 = formatBearerCredential("token-value") * // Expect: "Bearer token-value" * const example2 = formatBearerCredential(" token-value ") * // Expect: throws RangeError * const example3 = () => formatBearerCredential(" ") * ``` */ export const formatBearerCredential = (token: string): string => { const normalizedToken = internalNormalizeBearerToken(token) if (normalizedToken.length === 0) { throw new RangeError("Expected token to contain at least one non-whitespace character") } return `Bearer ${normalizedToken}` } /** * @description 从 Bearer 凭据字符串中提取原始 token。 * * 当输入值不是 Bearer 格式时,该函数返回 `undefined`。 * * @example * ``` * // Expect: "token-value" * const example1 = parseBearerCredential("Bearer token-value") * // Expect: undefined * const example2 = parseBearerCredential("Basic token-value") * ``` */ export const parseBearerCredential = (input: string | undefined): string | undefined => { if (input === undefined) { return undefined } if (isBearerCredential(input) === false) { return undefined } const normalizedToken = internalNormalizeBearerToken(input) return normalizedToken.length === 0 ? undefined : normalizedToken }