async visitSecurityDefinitions()

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;
      }
    }
  }