@scalar/api-reference
Version:
Generate beautiful API references from OpenAPI documents
44 lines (43 loc) • 1.57 kB
JavaScript
import { getResolvedRef } from "@scalar/workspace-store/helpers/get-resolved-ref";
import { unpackProxyObject } from "@scalar/workspace-store/helpers/unpack-proxy";
const getDefaultScopes = (scheme) => {
if (!scheme || scheme.type !== "oauth2") {
return [];
}
return scheme["x-default-scopes"] ?? [];
};
const addSchemeToRequirement = (acc, schemeName, securitySchemes) => {
const scheme = getResolvedRef(securitySchemes[schemeName]);
acc[schemeName] = getDefaultScopes(scheme);
};
const buildSecurityRequirementFromPreferred = (preferredSecurityScheme, securitySchemes) => {
if (!Array.isArray(preferredSecurityScheme)) {
const scheme = getResolvedRef(securitySchemes[preferredSecurityScheme]);
return { [preferredSecurityScheme]: getDefaultScopes(scheme) };
}
const requirement = {};
for (const item of preferredSecurityScheme) {
if (Array.isArray(item)) {
for (const schemeName of item) {
addSchemeToRequirement(requirement, schemeName, securitySchemes);
}
} else {
addSchemeToRequirement(requirement, item, securitySchemes);
}
}
return requirement;
};
const getDefaultSecurity = (securityRequirements, preferredSecurityScheme, securitySchemes) => {
if (preferredSecurityScheme) {
return buildSecurityRequirementFromPreferred(preferredSecurityScheme, securitySchemes);
}
const firstRequirement = securityRequirements[0];
if (firstRequirement) {
return unpackProxyObject(firstRequirement, { depth: 1 });
}
return null;
};
export {
getDefaultScopes,
getDefaultSecurity
};