{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://catalog.lintel.tools/schemas/schemastore/liblab-config-json/latest.json",
  "description": "The liblab Configuration File",
  "x-lintel": {
    "source": "https://cdn.jsdelivr.net/npm/liblab@latest/liblab.config.schema.json",
    "sourceSha256": "5692f55e6d6ecf18b275de34af87d7c7d698936cf7f92ebb98bb43f61cd6b092",
    "fileMatch": [
      "liblab.config.json",
      "*.liblab.config.json"
    ],
    "parsers": [
      "json"
    ]
  },
  "type": "object",
  "properties": {
    "sdkName": {
      "type": "string",
      "minLength": 1,
      "description": "The name of your SDK"
    },
    "apiVersion": {
      "type": "string",
      "description": "version of your API"
    },
    "apiName": {
      "type": "string",
      "description": "name of your API"
    },
    "specFilePath": {
      "type": "string",
      "minLength": 1,
      "description": "A local relative path to your specification file or a publicly reachable URL to the spec file"
    },
    "languages": {
      "type": "array",
      "items": {
        "type": "string",
        "enum": [
          "java",
          "python",
          "typescript",
          "csharp",
          "go",
          "terraform",
          "swift",
          "php",
          "mcp"
        ]
      },
      "description": "The list of languages you want to generate SDKs for"
    },
    "createDocs": {
      "type": "boolean",
      "description": "Should developer documentation be generated?\n docs are supported for: java, python and typescript",
      "default": false
    },
    "workflows": {
      "type": "object",
      "properties": {
        "path": {
          "type": "string",
          "description": "A local relative path to your arrazo specification file or a publicly reachable URL to the arrazo spec file"
        },
        "outputName": {
          "type": "string",
          "description": "The desired output name for the workflow"
        }
      },
      "required": [
        "path"
      ],
      "description": "The workflow configuration",
      "additionalProperties": false
    },
    "docs": {
      "type": "array",
      "items": {
        "type": "string",
        "enum": [
          "api",
          "snippets",
          "enhancedApiSpec"
        ]
      },
      "description": "Should API documentation or code snippets be generated?"
    },
    "auth": {
      "type": "array",
      "items": {
        "type": "string",
        "enum": [
          "apikey",
          "basic",
          "bearer",
          "custom",
          "oauth"
        ]
      }
    },
    "customizations": {
      "type": "object",
      "properties": {
        "authentication": {
          "type": "object",
          "properties": {
            "access": {
              "type": "object",
              "properties": {
                "prefix": {
                  "type": "string",
                  "description": "The prefix to use for the access authentication",
                  "default": ""
                }
              },
              "additionalProperties": false
            },
            "apiKey": {
              "type": "object",
              "properties": {
                "header": {
                  "type": "string",
                  "description": "The header to use for the api key authentication",
                  "default": ""
                }
              },
              "additionalProperties": false
            },
            "basic": {
              "type": "object",
              "properties": {
                "enabled": {
                  "type": "boolean"
                }
              },
              "required": [
                "enabled"
              ],
              "additionalProperties": false
            },
            "custom": {
              "type": "object",
              "properties": {
                "prefix": {
                  "type": "string",
                  "description": "The prefix to use for the custom authentication",
                  "default": ""
                }
              },
              "additionalProperties": false
            },
            "oauth": {
              "type": "object",
              "properties": {
                "enabled": {
                  "type": "boolean",
                  "default": false,
                  "description": "Enable oauth authentication"
                },
                "basic": {
                  "type": "boolean",
                  "default": false,
                  "description": "Use basic authentication for the oauth token"
                },
                "tokenEndpoint": {
                  "type": "object",
                  "properties": {
                    "path": {
                      "type": "string",
                      "description": "The path to use for the oauth token endpoint. This is used to retrieve the oauth token from the server"
                    },
                    "method": {
                      "type": "string",
                      "enum": [
                        "get",
                        "post"
                      ],
                      "default": "post",
                      "description": "The method to use for the oauth token endpoint"
                    },
                    "definition": {
                      "type": "object",
                      "properties": {},
                      "description": "The definition of the token endpoint",
                      "additionalProperties": true
                    }
                  },
                  "required": [
                    "path",
                    "definition"
                  ],
                  "additionalProperties": false
                },
                "securityScheme": {
                  "type": "object",
                  "properties": {
                    "name": {
                      "type": "string",
                      "description": "The name of the security scheme for the oauth"
                    },
                    "definition": {
                      "type": "object",
                      "properties": {},
                      "description": "The security scheme definition for the oauth.",
                      "additionalProperties": true
                    }
                  },
                  "required": [
                    "name",
                    "definition"
                  ],
                  "description": "The security scheme definition for the oauth",
                  "additionalProperties": false
                },
                "refreshBuffer": {
                  "type": "number",
                  "minimum": 0,
                  "description": "The buffer time in milliseconds before the token expires to refresh it",
                  "default": 1000
                }
              },
              "additionalProperties": false
            }
          },
          "default": {},
          "additionalProperties": false
        },
        "documentation": {
          "type": "object",
          "properties": {
            "snippets": {
              "type": "object",
              "properties": {
                "format": {
                  "type": "string",
                  "enum": [
                    "md",
                    "json"
                  ],
                  "description": "The format of the documentation code snippets",
                  "default": "md"
                }
              },
              "additionalProperties": false
            },
            "enhancedApiSpec": {
              "type": "object",
              "properties": {
                "customOutputName": {
                  "type": "string",
                  "description": "Name of the output file, will default to enhancedApiSpec.json"
                },
                "includeOauthEndpoints": {
                  "type": "boolean",
                  "description": "Whether to include OAuth endpoints in the enhanced API documentation.  Note that the SDK handles calling these endpoints.",
                  "default": false
                }
              },
              "additionalProperties": false
            }
          },
          "additionalProperties": false
        },
        "devContainer": {
          "type": "boolean",
          "description": "Should example dev container files be generated?",
          "default": true
        },
        "environmentVariables": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "description": {
                "type": "string",
                "description": "A description of the environment variable"
              },
              "name": {
                "type": "string",
                "description": "The name of the environment variable"
              }
            },
            "required": [
              "description",
              "name"
            ],
            "description": "An environment variable",
            "additionalProperties": false
          }
        },
        "endpointCustomizations": {
          "anyOf": [
            {
              "anyOf": [
                {
                  "not": {}
                },
                {
                  "type": "object",
                  "additionalProperties": {
                    "type": "object",
                    "properties": {
                      "get": {
                        "type": "object",
                        "properties": {
                          "operationId": {
                            "type": "string"
                          },
                          "streaming": {
                            "type": "boolean"
                          },
                          "scopes": {
                            "type": "object",
                            "additionalProperties": {
                              "type": "array",
                              "items": {
                                "type": "string"
                              }
                            }
                          },
                          "pagination": {
                            "type": "object",
                            "properties": {
                              "type": {
                                "type": "string",
                                "const": "limitOffset"
                              },
                              "inputFields": {
                                "type": "array",
                                "items": {
                                  "type": "object",
                                  "properties": {
                                    "name": {
                                      "type": "string"
                                    },
                                    "in": {
                                      "type": "string",
                                      "const": "query"
                                    },
                                    "type": {
                                      "type": "string",
                                      "enum": [
                                        "limit",
                                        "offset"
                                      ]
                                    }
                                  },
                                  "required": [
                                    "name",
                                    "in",
                                    "type"
                                  ],
                                  "additionalProperties": false
                                }
                              },
                              "resultsArray": {
                                "type": "object",
                                "properties": {
                                  "results": {
                                    "type": "string"
                                  },
                                  "defaultPageSize": {
                                    "type": "number"
                                  }
                                },
                                "required": [
                                  "results",
                                  "defaultPageSize"
                                ],
                                "additionalProperties": false
                              }
                            },
                            "required": [
                              "type",
                              "inputFields",
                              "resultsArray"
                            ],
                            "additionalProperties": false
                          }
                        },
                        "additionalProperties": false
                      },
                      "post": {
                        "$ref": "#/properties/customizations/properties/endpointCustomizations/anyOf/0/anyOf/1/additionalProperties/properties/get"
                      },
                      "put": {
                        "$ref": "#/properties/customizations/properties/endpointCustomizations/anyOf/0/anyOf/1/additionalProperties/properties/get"
                      },
                      "delete": {
                        "$ref": "#/properties/customizations/properties/endpointCustomizations/anyOf/0/anyOf/1/additionalProperties/properties/get"
                      },
                      "patch": {
                        "$ref": "#/properties/customizations/properties/endpointCustomizations/anyOf/0/anyOf/1/additionalProperties/properties/get"
                      }
                    },
                    "additionalProperties": true
                  }
                }
              ]
            },
            {
              "type": "string",
              "pattern": "^[\\w./\\\\-]+$"
            },
            {
              "type": "string",
              "format": "uri"
            }
          ],
          "description": "Customizations for specific endpoints"
        },
        "environments": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "name": {
                "type": "string",
                "description": "The name of the environment"
              },
              "url": {
                "type": "string",
                "format": "uri",
                "description": "The URL of the environment"
              }
            },
            "required": [
              "name",
              "url"
            ],
            "description": "A deployment environment",
            "additionalProperties": false
          }
        },
        "generateEnv": {
          "type": "boolean",
          "description": "Should example .env files be generated?",
          "default": true
        },
        "hookDependencies": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "groupId": {
                "type": "string",
                "description": "The groupId of the hook dependency"
              },
              "name": {
                "type": "string",
                "description": "The name of the hook dependency"
              },
              "version": {
                "type": "string",
                "description": "The version of the hook dependency"
              }
            },
            "required": [
              "name",
              "version"
            ],
            "description": "A dependency that should be installed for the hook",
            "additionalProperties": false
          }
        },
        "includeOptionalSnippetParameters": {
          "type": "boolean",
          "description": "toggles whether optional parameters are included in code snippets in generated SDK documentation.",
          "default": true
        },
        "inferServiceNames": {
          "type": "boolean",
          "description": "Should the SDKs infer service names?",
          "default": false
        },
        "injectedModels": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "A list of all custom models paths"
        },
        "license": {
          "type": "object",
          "properties": {
            "type": {
              "type": "string",
              "enum": [
                "MIT",
                "GPL3",
                "APACHE",
                "NONE",
                "CUSTOM"
              ],
              "description": "What license should the SDKs be covered under?",
              "default": "NONE"
            },
            "url": {
              "type": "string",
              "format": "uri",
              "description": "URL for a CUSTOM license"
            }
          },
          "description": "Optional configuration for licensing the SDKs",
          "additionalProperties": false
        },
        "refreshToken": {
          "type": "object",
          "properties": {
            "bearerKey": {
              "type": "string",
              "description": "The key to use for the bearer token"
            },
            "endpoint": {
              "type": "string",
              "description": "The endpoint to use for refreshing the token"
            },
            "refreshKey": {
              "type": "string",
              "description": "The key to use for the refresh token"
            }
          },
          "required": [
            "bearerKey",
            "endpoint",
            "refreshKey"
          ],
          "description": "The parameters for the refresh token system",
          "additionalProperties": false
        },
        "responseHeaders": {
          "type": "boolean",
          "description": "Should the SDKs return a response with both the data and headers?",
          "default": false
        },
        "buildAllModels": {
          "type": "boolean",
          "description": "Should unreferenced models be built?",
          "default": false
        },
        "retry": {
          "type": "object",
          "properties": {
            "backOffFactor": {
              "type": "number",
              "exclusiveMinimum": 0,
              "description": "What is the exponent base used to calulate wait times?"
            },
            "enabled": {
              "type": "boolean",
              "description": "Should the SDKs include retry behavior?"
            },
            "httpCodesToRetry": {
              "type": "array",
              "items": {
                "type": "integer",
                "minimum": 200,
                "maximum": 599
              },
              "description": "What HTTP codes should the SDKs retry on?"
            },
            "httpMethodsToRetry": {
              "type": "array",
              "items": {
                "type": "string",
                "enum": [
                  "GET",
                  "POST",
                  "PUT",
                  "DELETE",
                  "PATCH",
                  "HEAD",
                  "OPTIONS",
                  "CONNECT",
                  "TRACE"
                ]
              },
              "description": "What HTTP methods should the SDKs retry on?"
            },
            "maxAttempts": {
              "type": "number",
              "description": "How many attempts should the SDKs make before giving up?"
            },
            "maxDelay": {
              "type": "number",
              "minimum": 0,
              "description": "What is the maximum time between attempts in milliseconds?"
            },
            "retryDelay": {
              "type": "number",
              "description": "How long should the SDKs wait between attempts in milliseconds?"
            },
            "retryDelayJitter": {
              "type": "number",
              "minimum": 0,
              "description": "What is the maximum random jitter applied to wait times in milliseconds?"
            }
          },
          "required": [
            "retryDelay"
          ],
          "description": "Retry functionality customization",
          "additionalProperties": false
        },
        "readme": {
          "type": "object",
          "properties": {
            "apiDescription": {
              "type": "string",
              "description": "Overwrites the SDK README description"
            }
          },
          "additionalProperties": false
        },
        "deprecatedOperations": {
          "type": "object",
          "properties": {
            "include": {
              "type": "boolean",
              "description": "Whether to include deprecated operations in the SDKs"
            }
          },
          "required": [
            "include"
          ],
          "additionalProperties": false
        }
      },
      "description": "Customizations to SDKs",
      "additionalProperties": false
    },
    "baseUrl": {
      "type": "string",
      "minLength": 1,
      "description": "The Base URL of your SDK"
    },
    "languageOptions": {
      "type": "object",
      "properties": {
        "csharp": {
          "type": "object",
          "properties": {
            "packageId": {
              "type": "string",
              "description": "The PackageId of your C# SDK. It identifies your NuGet package."
            },
            "useOptionalWrapper": {
              "type": "boolean",
              "description": "Enable Optional<T> wrapper for distinguishing between \"not provided\" and \"explicitly null\" values",
              "default": false
            },
            "validateResponses": {
              "type": "boolean",
              "description": "Enable response validation to check for missing required fields and invalid null values",
              "default": false
            },
            "authors": {
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "email": {
                    "type": "string",
                    "format": "email",
                    "default": ""
                  },
                  "name": {
                    "type": "string"
                  }
                },
                "required": [
                  "name"
                ],
                "additionalProperties": false
              },
              "description": "The list of authors who contribute to the SDK (In TypeScript the first is the only one displayed)"
            },
            "githubRepoName": {
              "type": "string",
              "description": "The name of the Github Repo that will be Pull Requested to"
            },
            "homepage": {
              "type": "string",
              "format": "uri"
            },
            "hookDependencies": {
              "type": "array",
              "items": {
                "$ref": "#/properties/customizations/properties/hookDependencies/items"
              }
            },
            "ignoreFiles": {
              "type": "array",
              "items": {
                "type": "string",
                "description": "A file path that should be ignored"
              },
              "description": "List of files that shouldn't be produced by liblab, used for when you want to keep specific files safe from changes"
            },
            "liblabVersion": {
              "type": "string",
              "pattern": "^(\\d+)$",
              "description": "The version of the liblab SDK Generator"
            },
            "renameIllegalModelProperties": {
              "type": "boolean",
              "description": "renames all model properties with illegal names, during the SDK generation"
            },
            "sdkVersion": {
              "type": "string",
              "description": "The version of the SDK"
            },
            "targetBranch": {
              "type": "string",
              "minLength": 2,
              "description": "The target to branch off from when opening a PR, if not specified will default to main branch"
            }
          },
          "description": "C# specific options",
          "additionalProperties": false
        },
        "go": {
          "type": "object",
          "properties": {
            "goModuleName": {
              "type": "string",
              "description": "The name of the go module"
            },
            "additionalConstructorParameters": {
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "name": {
                    "type": "string",
                    "description": "The name of the variable"
                  },
                  "example": {
                    "type": "string",
                    "description": "An example value for the variable"
                  }
                },
                "required": [
                  "name"
                ],
                "description": "An additional variable to be included in the constructor",
                "additionalProperties": false
              },
              "description": "Additional variables to include in the constructor and access in the hooks"
            },
            "authors": {
              "$ref": "#/properties/languageOptions/properties/csharp/properties/authors"
            },
            "githubRepoName": {
              "$ref": "#/properties/languageOptions/properties/csharp/properties/githubRepoName"
            },
            "homepage": {
              "$ref": "#/properties/languageOptions/properties/csharp/properties/homepage"
            },
            "hookDependencies": {
              "$ref": "#/properties/languageOptions/properties/csharp/properties/hookDependencies"
            },
            "ignoreFiles": {
              "$ref": "#/properties/languageOptions/properties/csharp/properties/ignoreFiles"
            },
            "liblabVersion": {
              "$ref": "#/properties/languageOptions/properties/csharp/properties/liblabVersion"
            },
            "renameIllegalModelProperties": {
              "$ref": "#/properties/languageOptions/properties/csharp/properties/renameIllegalModelProperties"
            },
            "sdkVersion": {
              "$ref": "#/properties/languageOptions/properties/csharp/properties/sdkVersion"
            },
            "targetBranch": {
              "$ref": "#/properties/languageOptions/properties/csharp/properties/targetBranch"
            }
          },
          "required": [
            "goModuleName"
          ],
          "description": "go specific options",
          "additionalProperties": false
        },
        "java": {
          "type": "object",
          "properties": {
            "groupId": {
              "type": "string",
              "description": "The groupId of the Java package"
            },
            "packageName": {
              "type": "string",
              "description": "The name of the Java package"
            },
            "artifactId": {
              "type": "string",
              "description": "The artifactId of the Java package"
            },
            "includeKotlinSnippets": {
              "type": "boolean",
              "default": false,
              "description": "Include Kotlin snippets and documentation in the generated SDK"
            },
            "developers": {
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "name": {
                    "type": "string",
                    "description": "The name of the developer"
                  },
                  "email": {
                    "type": "string",
                    "format": "email",
                    "description": "The email of the developer"
                  },
                  "organization": {
                    "type": "string",
                    "description": "The organization of the developer"
                  },
                  "organizationUrl": {
                    "type": "string",
                    "format": "uri",
                    "description": "The organization URL of the developer. It is acceptable to link to your profile on GitHub or other forges, if you do no have a website."
                  }
                },
                "required": [
                  "name",
                  "email",
                  "organization",
                  "organizationUrl"
                ],
                "additionalProperties": false
              },
              "description": "The developers' information to add to pom.xml for project association"
            },
            "additionalConstructorParameters": {
              "$ref": "#/properties/languageOptions/properties/go/properties/additionalConstructorParameters",
              "description": "Additional variables to include in the constructor and access in the hooks"
            },
            "authors": {
              "$ref": "#/properties/languageOptions/properties/csharp/properties/authors"
            },
            "githubRepoName": {
              "$ref": "#/properties/languageOptions/properties/csharp/properties/githubRepoName"
            },
            "homepage": {
              "$ref": "#/properties/languageOptions/properties/csharp/properties/homepage"
            },
            "hookDependencies": {
              "$ref": "#/properties/languageOptions/properties/csharp/properties/hookDependencies"
            },
            "ignoreFiles": {
              "$ref": "#/properties/languageOptions/properties/csharp/properties/ignoreFiles"
            },
            "liblabVersion": {
              "$ref": "#/properties/languageOptions/properties/csharp/properties/liblabVersion",
              "default": "2",
              "description": "The version of the liblab SDK Generator"
            },
            "renameIllegalModelProperties": {
              "$ref": "#/properties/languageOptions/properties/csharp/properties/renameIllegalModelProperties"
            },
            "sdkVersion": {
              "$ref": "#/properties/languageOptions/properties/csharp/properties/sdkVersion"
            },
            "targetBranch": {
              "$ref": "#/properties/languageOptions/properties/csharp/properties/targetBranch"
            }
          },
          "description": "Java specific options",
          "additionalProperties": false
        },
        "python": {
          "type": "object",
          "properties": {
            "alwaysInitializeOptionals": {
              "type": "boolean",
              "default": true
            },
            "classifiers": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "enforceRequestValidation": {
              "type": "boolean",
              "default": false,
              "description": "Should the Python SDK enforce request validation?"
            },
            "additionalConstructorParameters": {
              "$ref": "#/properties/languageOptions/properties/go/properties/additionalConstructorParameters",
              "description": "Additional variables to include in the constructor and access in the hooks"
            },
            "projectUrls": {
              "type": "object",
              "propertyNames": {
                "minLength": 1
              },
              "additionalProperties": {
                "type": "string",
                "format": "uri"
              }
            },
            "pypiPackageName": {
              "type": "string",
              "description": "The name of the Python project"
            },
            "strictVersion": {
              "type": "boolean",
              "default": false,
              "description": "Should the version be strict?"
            },
            "authors": {
              "$ref": "#/properties/languageOptions/properties/csharp/properties/authors"
            },
            "githubRepoName": {
              "$ref": "#/properties/languageOptions/properties/csharp/properties/githubRepoName"
            },
            "homepage": {
              "$ref": "#/properties/languageOptions/properties/csharp/properties/homepage"
            },
            "hookDependencies": {
              "$ref": "#/properties/languageOptions/properties/csharp/properties/hookDependencies"
            },
            "ignoreFiles": {
              "$ref": "#/properties/languageOptions/properties/csharp/properties/ignoreFiles"
            },
            "liblabVersion": {
              "$ref": "#/properties/languageOptions/properties/csharp/properties/liblabVersion"
            },
            "renameIllegalModelProperties": {
              "$ref": "#/properties/languageOptions/properties/csharp/properties/renameIllegalModelProperties"
            },
            "sdkVersion": {
              "$ref": "#/properties/languageOptions/properties/csharp/properties/sdkVersion"
            },
            "targetBranch": {
              "$ref": "#/properties/languageOptions/properties/csharp/properties/targetBranch"
            }
          },
          "description": "Python specific options",
          "additionalProperties": false
        },
        "php": {
          "type": "object",
          "properties": {
            "packageName": {
              "type": "string",
              "pattern": "^[0-9a-z]([._-]?[0-9a-z]+)*\\/[0-9a-z](([._]|-{1,2})?[0-9a-z]+)*$",
              "description": "The name of the composer package",
              "default": "company/sdk"
            },
            "additionalConstructorParameters": {
              "$ref": "#/properties/languageOptions/properties/go/properties/additionalConstructorParameters",
              "description": "Additional variables to include in the constructor and access in the hooks"
            },
            "authors": {
              "$ref": "#/properties/languageOptions/properties/csharp/properties/authors"
            },
            "githubRepoName": {
              "$ref": "#/properties/languageOptions/properties/csharp/properties/githubRepoName"
            },
            "homepage": {
              "$ref": "#/properties/languageOptions/properties/csharp/properties/homepage"
            },
            "hookDependencies": {
              "$ref": "#/properties/languageOptions/properties/csharp/properties/hookDependencies"
            },
            "ignoreFiles": {
              "$ref": "#/properties/languageOptions/properties/csharp/properties/ignoreFiles"
            },
            "liblabVersion": {
              "$ref": "#/properties/languageOptions/properties/csharp/properties/liblabVersion"
            },
            "renameIllegalModelProperties": {
              "$ref": "#/properties/languageOptions/properties/csharp/properties/renameIllegalModelProperties"
            },
            "sdkVersion": {
              "$ref": "#/properties/languageOptions/properties/csharp/properties/sdkVersion"
            },
            "targetBranch": {
              "$ref": "#/properties/languageOptions/properties/csharp/properties/targetBranch"
            }
          },
          "description": "PHP specific options",
          "additionalProperties": false
        },
        "swift": {
          "type": "object",
          "properties": {
            "authors": {
              "$ref": "#/properties/languageOptions/properties/csharp/properties/authors"
            },
            "githubRepoName": {
              "$ref": "#/properties/languageOptions/properties/csharp/properties/githubRepoName"
            },
            "homepage": {
              "$ref": "#/properties/languageOptions/properties/csharp/properties/homepage"
            },
            "hookDependencies": {
              "$ref": "#/properties/languageOptions/properties/csharp/properties/hookDependencies"
            },
            "ignoreFiles": {
              "$ref": "#/properties/languageOptions/properties/csharp/properties/ignoreFiles"
            },
            "liblabVersion": {
              "$ref": "#/properties/languageOptions/properties/csharp/properties/liblabVersion"
            },
            "renameIllegalModelProperties": {
              "$ref": "#/properties/languageOptions/properties/csharp/properties/renameIllegalModelProperties"
            },
            "sdkVersion": {
              "$ref": "#/properties/languageOptions/properties/csharp/properties/sdkVersion"
            },
            "targetBranch": {
              "$ref": "#/properties/languageOptions/properties/csharp/properties/targetBranch"
            }
          },
          "description": "Swift specific options",
          "additionalProperties": false
        },
        "terraform": {
          "type": "object",
          "properties": {
            "hideComputedDiff": {
              "type": "boolean",
              "description": "Should the terraform provider hide computed diff? Default is false",
              "default": false
            },
            "mockAcceptance": {
              "type": "boolean",
              "description": "Should the terraform provider mock acceptance tests? Default is true",
              "default": true
            },
            "providerGoModuleName": {
              "type": "string",
              "description": "The name of the go module used in the terraform provider module"
            },
            "providerName": {
              "type": "string",
              "description": "The name of the terraform provider module"
            },
            "providerSchemaConfig": {
              "type": "object",
              "properties": {
                "addressKey": {
                  "type": "string"
                },
                "authTokenKey": {
                  "type": "string"
                }
              },
              "additionalProperties": false
            },
            "providerVersion": {
              "type": "string",
              "description": "The version of the terraform provider module"
            },
            "authors": {
              "$ref": "#/properties/languageOptions/properties/csharp/properties/authors"
            },
            "githubRepoName": {
              "$ref": "#/properties/languageOptions/properties/csharp/properties/githubRepoName"
            },
            "homepage": {
              "$ref": "#/properties/languageOptions/properties/csharp/properties/homepage"
            },
            "hookDependencies": {
              "$ref": "#/properties/languageOptions/properties/csharp/properties/hookDependencies"
            },
            "ignoreFiles": {
              "$ref": "#/properties/languageOptions/properties/csharp/properties/ignoreFiles"
            },
            "liblabVersion": {
              "$ref": "#/properties/languageOptions/properties/csharp/properties/liblabVersion"
            },
            "renameIllegalModelProperties": {
              "$ref": "#/properties/languageOptions/properties/csharp/properties/renameIllegalModelProperties"
            },
            "sdkVersion": {
              "$ref": "#/properties/languageOptions/properties/csharp/properties/sdkVersion"
            },
            "targetBranch": {
              "$ref": "#/properties/languageOptions/properties/csharp/properties/targetBranch"
            }
          },
          "required": [
            "providerGoModuleName",
            "providerName",
            "providerVersion"
          ],
          "description": "terraform provider specific options",
          "additionalProperties": false
        },
        "typescript": {
          "type": "object",
          "properties": {
            "bundle": {
              "type": "boolean",
              "description": "Should the SDKs be bundled?",
              "default": true
            },
            "denoteCommon": {
              "type": "boolean",
              "description": "Should the SDK mark common models with the `Common` postfix? (Useful when conflicts occur)",
              "default": false
            },
            "exportClassDefault": {
              "type": "boolean",
              "description": "Should the SDK export the main class as default?",
              "default": false
            },
            "httpClient": {
              "type": "string",
              "enum": [
                "axios",
                "fetch",
                "https"
              ],
              "description": "The HTTP client to use",
              "default": "fetch"
            },
            "npmName": {
              "type": "string",
              "description": "The NPM package name to publish to"
            },
            "npmOrg": {
              "type": "string",
              "description": "The NPM organization to publish to"
            },
            "additionalConstructorParameters": {
              "$ref": "#/properties/languageOptions/properties/go/properties/additionalConstructorParameters",
              "description": "Additional variables to include in the constructor and access in the hooks"
            },
            "authors": {
              "$ref": "#/properties/languageOptions/properties/csharp/properties/authors"
            },
            "githubRepoName": {
              "$ref": "#/properties/languageOptions/properties/csharp/properties/githubRepoName"
            },
            "homepage": {
              "$ref": "#/properties/languageOptions/properties/csharp/properties/homepage"
            },
            "hookDependencies": {
              "$ref": "#/properties/languageOptions/properties/csharp/properties/hookDependencies"
            },
            "ignoreFiles": {
              "$ref": "#/properties/languageOptions/properties/csharp/properties/ignoreFiles"
            },
            "liblabVersion": {
              "$ref": "#/properties/languageOptions/properties/csharp/properties/liblabVersion",
              "default": "1",
              "description": "The version of the liblab SDK Generator"
            },
            "renameIllegalModelProperties": {
              "$ref": "#/properties/languageOptions/properties/csharp/properties/renameIllegalModelProperties"
            },
            "sdkVersion": {
              "$ref": "#/properties/languageOptions/properties/csharp/properties/sdkVersion"
            },
            "targetBranch": {
              "$ref": "#/properties/languageOptions/properties/csharp/properties/targetBranch"
            },
            "generateEnumAs": {
              "type": "string",
              "enum": [
                "union",
                "enum"
              ],
              "default": "enum"
            },
            "namingStrategy": {
              "type": "string",
              "enum": [
                "default",
                "originalPropertyNames"
              ]
            }
          },
          "description": "TypeScript specific options",
          "additionalProperties": false
        },
        "mcp": {
          "$ref": "#/properties/languageOptions/properties/typescript",
          "description": "TypeScript specific options"
        }
      },
      "description": "Language specific options",
      "additionalProperties": false
    },
    "mcp": {
      "type": "object",
      "properties": {
        "generate": {
          "type": "boolean",
          "description": "Should mcp server be generated?",
          "default": false
        }
      },
      "description": "MCP server options",
      "additionalProperties": false
    },
    "liblabVersion": {
      "$ref": "#/properties/languageOptions/properties/csharp/properties/liblabVersion",
      "description": "The version of the liblab SDK Generator"
    },
    "publishing": {
      "type": "object",
      "properties": {
        "githubOrg": {
          "type": "string",
          "description": "The GitHub organization to publish to"
        }
      },
      "required": [
        "githubOrg"
      ],
      "description": "Publishing options",
      "additionalProperties": false
    },
    "validationsToIgnore": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "code": {
            "type": "string",
            "description": "The rule code to ignore"
          },
          "path": {
            "type": "array",
            "items": {
              "type": [
                "string",
                "number"
              ]
            },
            "description": "Path that should be ignored"
          }
        },
        "required": [
          "code"
        ],
        "additionalProperties": false
      }
    },
    "integrations": {
      "type": "object",
      "properties": {
        "enhancedApiSpec": {
          "type": "object",
          "properties": {
            "githubRepoName": {
              "$ref": "#/properties/languageOptions/properties/csharp/properties/githubRepoName"
            },
            "targetBranch": {
              "$ref": "#/properties/languageOptions/properties/csharp/properties/targetBranch",
              "description": "The target to branch off from when opening a PR, if not specified will default to main branch",
              "default": "main"
            },
            "provider": {
              "type": "string",
              "enum": [
                "mintlify",
                "redocly",
                "readmeIO"
              ],
              "description": "Selecting the provider will enable the liblab service to generate the required files for your integration provider"
            },
            "redocly": {
              "type": "object",
              "properties": {
                "openapiPath": {
                  "type": "string"
                }
              },
              "additionalProperties": false
            },
            "readmeIO": {
              "type": "object",
              "properties": {
                "openapiPath": {
                  "type": "string"
                }
              },
              "additionalProperties": false
            },
            "mintlify": {
              "type": "object",
              "properties": {
                "codeSamplesLanguages": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  },
                  "description": "Selecting the languages to enhance and include in the mintlify integration. The selected languages will override the languages shown in the mintlify UI."
                }
              },
              "additionalProperties": false
            }
          },
          "required": [
            "githubRepoName",
            "provider"
          ],
          "description": "API documentation integration object",
          "additionalProperties": false
        }
      },
      "additionalProperties": false
    }
  },
  "allowComments": true,
  "fileMatch": [
    "liblab.config.json",
    "liblab.config.js",
    "*.liblab.config.json"
  ],
  "required": [
    "specFilePath",
    "languages"
  ],
  "additionalProperties": false
}
