in packages/libs/oai2-to-oai3/src/converter.ts [460:543]
async visitSecurityDefinitions(securityDefinitions: Iterable<Node>) {
for (const {
key: schemeName,
value: v,
pointer: sourcePointer,
children: securityDefinitionsItemMembers,
} of securityDefinitions) {
this.generated.components?.securitySchemes?.__set__(schemeName, this.newObject(sourcePointer));
const securityScheme: MappingTreeObject<oai3.SecurityScheme> = this.generated.components?.securitySchemes?.[
schemeName
]! as any;
switch (v.type) {
case "apiKey":
for (const { key, value, pointer } of securityDefinitionsItemMembers) {
switch (key) {
case "type":
case "description":
case "name":
case "in":
securityScheme.__set__(key as any, { value, sourcePointer: pointer });
break;
default:
await this.visitExtensions(securityScheme, key, value, pointer);
break;
}
}
break;
case "basic":
for (const { key, value, pointer } of securityDefinitionsItemMembers) {
switch (key) {
case "description":
securityScheme.__set__("description", { value, sourcePointer: pointer });
break;
case "type":
securityScheme.__set__("type", { value: SecurityType.Http, sourcePointer: pointer });
securityScheme.__set__("scheme" as any, { value: "basic", sourcePointer: pointer });
break;
default:
await this.visitExtensions(securityScheme, key, value, pointer);
break;
}
}
break;
case "oauth2":
{
const oauth2Scheme: MappingTreeObject<OAuth2SecurityScheme> = securityScheme as any;
if (v.description !== undefined) {
oauth2Scheme.__set__("description", { value: v.description, sourcePointer });
}
oauth2Scheme.__set__("type", { value: v.type, sourcePointer });
oauth2Scheme.__set__("flows", this.newObject(sourcePointer));
let flowName = v.flow;
// convert flow names to OpenAPI 3 flow names
if (v.flow === "application") {
flowName = "clientCredentials";
}
if (v.flow === "accessCode") {
flowName = "authorizationCode";
}
oauth2Scheme.flows.__set__(flowName, this.newObject(sourcePointer));
let authorizationUrl;
let tokenUrl;
if (v.authorizationUrl) {
authorizationUrl = v.authorizationUrl.split("?")[0].trim() || "/";
oauth2Scheme.flows[flowName].__set__("authorizationUrl", { value: authorizationUrl, sourcePointer });
}
if (v.tokenUrl) {
tokenUrl = v.tokenUrl.split("?")[0].trim() || "/";
oauth2Scheme.flows[flowName].__set__("tokenUrl", { value: tokenUrl, sourcePointer });
}
const scopes = v.scopes || {};
oauth2Scheme.flows[flowName].__set__("scopes", { value: scopes, sourcePointer });
}
break;
}
}
}